Subject: bug#32089: closed (Re: bug#32089: RefTeX: Regexp for parsing labels in optional arguments)

From: [email-masked] (GNU bug Tracking System)
Date: Tue, 30 Apr 2019 22:03:02 +0000

Your bug report

#32089: RefTeX: Regexp for parsing labels in optional arguments

which was filed against the auctex package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
32089: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=32089
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#32089: RefTeX: Regexp for parsing labels in optional arguments
From: Arash Esbati <[email-masked]>
To: [email-masked]
Date: Wed, 01 May 2019 00:01:18 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

> It is due to the regex defined in `reftex-label-regexps' in
> `reftex-vars.el' which expects one of ],} directly after the label.
> With the following patch, it parses the labels correctly:
>
> --8<---------------cut here---------------start------------->8---
> diff --git a/lisp/textmodes/reftex-vars.el b/lisp/textmodes/reftex-vars.el
> index 11dbb8d..66d800d 100644
> --- a/lisp/textmodes/reftex-vars.el
> +++ b/lisp/textmodes/reftex-vars.el
> @@ -895,7 +895,7 @@ DOWNCASE    t:   Downcase words before using them."
>        "\\\\label{\\(?1:[^}]*\\)}"
>        ;; keyvals [..., label = {foo}, ...] forms used by ctable,
>        ;; listings, minted, ...
> -      "\\[[^][]\\{0,2000\\}\\<label[[:space:]]*=[[:space:]]*{?\\(?1:[^],}]+\\)}?")
> +      "\\[[^][]\\{0,2000\\}\\<label[[:space:]]*=[[:space:]]*{?\\(?1:[^], \t\n\r%}]+\\)}?")
>      "List of regexps matching \\label definitions.
>  The default value matches usual \\label{...} definitions and
>  keyval style [..., label = {...}, ...] label definitions.  It is
>  --8<---------------cut here---------------end--------------->8---
>
> Any suggestion if I'm missing a character?  My next step would be to add
> the same regexp to `LaTeX-auto-label-regexp-list' in order to make
> AUCTeX also capable of this feature.  Any comments welcome.

Following up myself, I'm closing this one as it is fixed in Emacs:

http://git.savannah.gnu.org/cgit/emacs.git/commit/?id=b18cecf89bbb9d2d057f86e8fa1a1f1417d887b6
http://git.savannah.gnu.org/cgit/emacs.git/commit/?id=eed512814c45cd5859a1814bf07ad18ea3fa3b1a

Best, Arash

Subject: RefTeX: Regexp for parsing labels in optional arguments
From: Arash Esbati <[email-masked]>
To: auctex-bugs <[email-masked]>
Date: Sat, 07 Jul 2018 23:11:26 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi all,

please consider the following example:

--8<---------------cut here---------------start------------->8---
\documentclass{article}
\usepackage{listings}
\begin{document}

\begin{lstlisting}[
caption={Some caption},
label=lst:1]
Some code
\end{lstlisting}

\begin{lstlisting}[
caption={Some caption},
label=lst:2
]
Some code
\end{lstlisting}

\begin{lstlisting}[
caption = {Some caption},
label   = lst:3                   ]
Some code
\end{lstlisting}

\ref{lst:1}, \ref{lst:2
}, \ref{lst:3                   }

\ref{lst:1}, \ref{lst:2}, \ref{lst:3}

\end{document}
--8<---------------cut here---------------end--------------->8---

With RefTeX active, it fails to parse the labels defined in optional
arguments correctly (see the first set of \ref commands).  It is due to
the regex defined in `reftex-label-regexps' in `reftex-vars.el' which
expects one of ],} directly after the label.  With the following patch,
it parses the labels correctly:

--8<---------------cut here---------------start------------->8---
diff --git a/lisp/textmodes/reftex-vars.el b/lisp/textmodes/reftex-vars.el
index 11dbb8d..66d800d 100644
--- a/lisp/textmodes/reftex-vars.el
+++ b/lisp/textmodes/reftex-vars.el
@@ -895,7 +895,7 @@ DOWNCASE    t:   Downcase words before using them."
       "\\\\label{\\(?1:[^}]*\\)}"
       ;; keyvals [..., label = {foo}, ...] forms used by ctable,
       ;; listings, minted, ...
-      "\\[[^][]\\{0,2000\\}\\<label[[:space:]]*=[[:space:]]*{?\\(?1:[^],}]+\\)}?")
+      "\\[[^][]\\{0,2000\\}\\<label[[:space:]]*=[[:space:]]*{?\\(?1:[^], \t\n\r%}]+\\)}?")
     "List of regexps matching \\label definitions.
 The default value matches usual \\label{...} definitions and
 keyval style [..., label = {...}, ...] label definitions.  It is
 --8<---------------cut here---------------end--------------->8---

Any suggestion if I'm missing a character?  My next step would be to add
the same regexp to `LaTeX-auto-label-regexp-list' in order to make
AUCTeX also capable of this feature.  Any comments welcome.

Best, Arash