Received: (at 81327) by debbugs.gnu.org; 2 Jul 2026 09:10:00 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Jul 02 05:10:00 2026
Received: from localhost ([127.0.0.1]:39924 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1wfDQm-0007Gm-3o
for submit <at> debbugs.gnu.org; Thu, 02 Jul 2026 05:10:00 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:33034)
by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.84_2) (envelope-from <arash@HIDDEN>) id 1wfDQj-0007GQ-Mc
for 81327 <at> debbugs.gnu.org; Thu, 02 Jul 2026 05:09:58 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e])
by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.90_1) (envelope-from <arash@HIDDEN>)
id 1wfDQa-0000Aq-7l; Thu, 02 Jul 2026 05:09:48 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
s=fencepost-gnu-org; h=MIME-Version:Date:References:In-Reply-To:Subject:To:
From; bh=8SR0sMJZFt1JPoBzTWK5i6ULRU9Tlvd6uPL4HyIwskQ=; b=n8vpv+semE8q53GbdnbD
tLstEPhYmojDNtDv+rfHkoRA8ZlYitG1K6HZaoj13YusL2fbPY5BEI88DqNLuRYUJRpXXYBLSx0di
oP1alxNkhE/y/FOqzVEdjH/XGpxJiThsMb5qd5Yvm4rahpxI6r64UseWVPOUqgauwRXaL27mYAT1Q
Xn53NlWjqIZI18VMMdIP1JY4oVl97tgh/iP+0DSYrFxfP+qS8RbBJ8sWcI0MenJeXFLr1XZM1CmHP
jbVAE8ZpUIyHoR5WzoLogR//GsAxDTu38IWezlwF+k00cOQGJf1y2/HRVTG/gy6cXUkdhG0CSTRD0
VkkLtWSuLZP3YA==;
From: Arash Esbati <arash@HIDDEN>
To: Gabriele Nicolardi <gabriele.nicolardi@HIDDEN>
Subject: Re: bug#81327: 14.1.0; texmathp returns nil inside $...$ math that
follows "\\" (e.g. "$a$\\$b$")
In-Reply-To: <e3f7feca-b8ab-469d-bdb6-badc370388a7@HIDDEN>
References: <a6966ef8-ba4d-4d2c-8a7d-d9e16cb4538b@HIDDEN>
<4278.1782900700@localhost>
<e3f7feca-b8ab-469d-bdb6-badc370388a7@HIDDEN>
Date: Thu, 02 Jul 2026 11:09:43 +0200
Message-ID: <m2wlvdsqp4.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 81327
Cc: Ikumi Keita <ikumi@HIDDEN>, 81327 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)
Ciao Gabriele,
Gabriele Nicolardi via bug-auctex via Bug reporting list for AUCTeX <bug-auctex@HIDDEN> writes:
> A regex without lookbehind cannot reliably encode "preceded by an even
> number of backslashes" through alternation alone.
Yes, we have to try harder if we want to fix issue.
> The robust fix is to capture the whole backslash run with a single,
> non-alternating quantifier, and check its parity in Lisp:
>
> In texmathp-compile:
>
> texmathp-toggle-regexp
> (concat "\\(\\\\*\\)"
> (regexp-opt togglers t))
>
> In texmathp, the toggle-scanning loop needs a matching change (group 1
> no longer means "real toggle", it now holds the backslash run, so
> parity must be checked before deciding to toggle):
>
> (while (re-search-forward texmathp-toggle-regexp pos t)
> (when (zerop (mod (length (match-string-no-properties 1)) 2))
> (if (setq math-on (not math-on))
> (setq sw-match (cons (match-string-no-properties 2) (match-beginning 2)))
> (setq sw-match nil))))
I only had a brief look at this, but within AUCTeX, we have the function
`TeX-escaped-p' which we can use for this. My proposal is this (look
for the ;; Next line changed: and ;; (unless ...) added:):
--8<---------------cut here---------------start------------->8---
(defun texmathp-compile ()
"Compile the value of `texmathp-tex-commands' into the internal lists.
Call this when you have changed the value of that variable without using
customize (customize calls it when setting the variable)."
(interactive)
;; Extract lists and regexp.
(setq texmathp-macros nil texmathp-environments nil)
(setq texmathp-memory
(cons texmathp-tex-commands texmathp-tex-commands-default))
(setq texmathp-tex-commands1 (append texmathp-tex-commands
texmathp-tex-commands-default))
(let ((list (reverse texmathp-tex-commands1))
entry type switches togglers)
(while (setq entry (car list))
(setq type (nth 1 entry)
list (cdr list))
(cond ((memq type '(env-on env-off)) (push (car entry) texmathp-environments))
((memq type '(arg-on arg-off)) (push (car entry) texmathp-macros))
((memq type '(sw-on sw-off)) (push (car entry) switches))
((memq type '(sw-toggle)) (push (car entry) togglers))))
(setq texmathp-onoff-regexp
(concat "\\(?:[^\\]\\|\\`\\)"
(regexp-opt switches t))
texmathp-toggle-regexp
;; Next line changed:
;; (concat "\\([^\\$]\\|\\`\\)"
(concat "\\(\\`\\|\\)"
(regexp-opt togglers t)))))
(defun texmathp ()
"Determine if point is inside (La)TeX math mode.
Returns t or nil. Additional info is placed into `texmathp-why'.
The functions assumes that you have (almost) syntactically correct (La)TeX in
the buffer.
See the variable `texmathp-tex-commands' about which commands are checked."
(interactive)
(let* ((pos (point)) math-on sw-match
(bound (save-excursion
(if (re-search-backward
(if (memq major-mode '(doctex-mode docTeX-mode))
"[\n\r]%*[ \t]*[\n\r]"
"[\n\r][ \t]*[\n\r]")
nil 1 texmathp-search-n-paragraphs)
(match-beginning 0)
(point-min))))
(mac-match (texmathp-match-macro bound))
(env-match (texmathp-match-environment
(if (and mac-match (> (cdr mac-match) bound))
(cdr mac-match)
bound)))
(match (cons nil bound)))
;; Select the nearer match
(and env-match (setq match env-match))
;; Use `>=' instead of `>' in case called inside \ensuremath{..}
;; beginning just at (point-min).
(and mac-match (>= (cdr mac-match) (cdr match)) (setq match mac-match))
(setq math-on (memq (nth 1 (assoc (car match) texmathp-tex-commands1))
'(env-on arg-on)))
;; Check for switches
(and (not math-on)
(setq sw-match (texmathp-match-switch bound))
;; Use `>=' instead of `>' by similar reason as above. (bug#41559)
(>= (cdr sw-match) (cdr match))
(eq (nth 1 (assoc (car sw-match) texmathp-tex-commands1)) 'sw-on)
(setq match sw-match math-on t))
;; Check for togglers
(if (not math-on)
(save-excursion
(goto-char (cdr match))
(while (re-search-forward texmathp-toggle-regexp pos t)
;; (unless ...) added:
(unless (TeX-escaped-p (1- (point)))
(if (setq math-on (not math-on))
(setq sw-match (cons (match-string-no-properties 2) (match-beginning 2)))
(setq sw-match nil))))
(and math-on sw-match (setq match sw-match))))
;; Store info, show as message when interactive, and return
(setq texmathp-why match)
;; Check also if the match is inside a verbatim construct and
;; return immediately nil. This relies on the function
;; `LaTeX-verbatim-p'. We add a check here in case this library
;; is used stand-alone without latex.el provided by AUCTeX
;; (bug#61410) and the `major-mode' doesn't derive from `TeX-mode'
;; (bug#69681):
(if (and (derived-mode-p 'TeX-mode)
(fboundp 'LaTeX-verbatim-p)
(LaTeX-verbatim-p (cdr match)))
(progn
(setq texmathp-why `(nil . ,(cdr match)))
(when (called-interactively-p 'any)
(message "math-mode is off: Math command in verbatim construct at buffer position %d"
(cdr match)))
nil)
(and (called-interactively-p 'any)
(message "math-mode is %s: %s begins at buffer position %d"
(if math-on "on" "off")
(or (car match) "new paragraph")
(cdr match)))
(and math-on t))))
--8<---------------cut here---------------end--------------->8---
> I tested it against backslash runs from N=0 up to N=101 (even and
> odd), the original tabular/TikZ case, your \\\$ counterexample, $$
> display math combined with backslash runs, and multi-cell tabular rows
> -- all correct. I also confirmed the compiled regexp still lets
> regexp-opt factor "$" and "$$" exactly as before
> ("\\(\\\\*\\)\\($\\$?\\)"), so display math is unaffected.
Can you please run your tests with the suggestion above?
> For full transparency, as with my initial report: I used an AI
> assistant (Claude) throughout this follow-up as well -- to analyze why
> the paired-backslash regex fails structurally, to design this
> alternative, and to build and run a test harness (an actual Emacs
> instance, byte-compiling texmathp.el and exercising the real texmathp
> function against dozens of cases, including the ones above) rather
> than reasoning about the regex in the abstract. I independently
> reviewed the test cases and the reasoning, and I'm satisfied the fix
> and the testing are sound, but of course I'd still welcome your
> review, especially given your closer familiarity with texmathp's
> history and edge cases.
Thanks for the disclaimer above. Note that currently, the GNU project
doesn't accept any code generated with LLMs until further notice. So we
can't install your suggestion above. So we either find another solution
(which I've proposed) or your change has to wait (if we agree on it).
TBH, I'm not happy with ("\\(\\\\*\\)\\($\\$?\\)").
Best, Arash
bug-auctex@HIDDEN:bug#81327; Package auctex.
Full text available.
Received: (at 81327) by debbugs.gnu.org; 1 Jul 2026 15:25:04 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Jul 01 11:25:03 2026
Received: from localhost ([127.0.0.1]:34095 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1wewo1-0004tW-IY
for submit <at> debbugs.gnu.org; Wed, 01 Jul 2026 11:25:02 -0400
Received: from smtp05.cbsolt.net ([185.97.217.44]:60058)
by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.84_2) (envelope-from <gabriele.nicolardi@HIDDEN>)
id 1wesbj-0003j4-GM
for 81327 <at> debbugs.gnu.org; Wed, 01 Jul 2026 06:55:57 -0400
Received: from [10.0.2.15] (host-87-19-250-62.retail.telecomitalia.it
[87.19.250.62])
by smtp05.cbsolt.net (Postfix) with ESMTPSA id 4gqxkr00Ydz3xKV;
Wed, 1 Jul 2026 12:55:47 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cbsolt.net;
s=201504-di4k2w; t=1782903348;
h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
to:to:cc:cc:mime-version:mime-version:content-type:content-type:
in-reply-to:in-reply-to:references:references;
bh=Ys5mD7eccqbRJvzOUd72hXxfDIg72wJ3j3dbBn0galk=;
b=QezB8vF0hM2Ado5itrKaxFhrzKQKOHFUcq6B6D8AljHWhqrVPlOP7pSFHsEnYm/77pjRPW
koyw9VDeDBbYgqN2eFMKNSUelxD5IajIHcVGrJV3VHJmqALyQDzZHNYLddwHCuAIK6OA8K
KAo2fvcFfH+xuxW66a21lXbpKHH0R2Q=
Content-Type: multipart/alternative;
boundary="------------4MdPD7CDU5xPoSk6yGu3n2js"
Message-ID: <e3f7feca-b8ab-469d-bdb6-badc370388a7@HIDDEN>
Date: Wed, 1 Jul 2026 12:55:46 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: bug#81327: 14.1.0; texmathp returns nil inside $...$ math that
follows "\\" (e.g. "$a$\\$b$")
To: Ikumi Keita <ikumi@HIDDEN>
References: <a6966ef8-ba4d-4d2c-8a7d-d9e16cb4538b@HIDDEN>
<4278.1782900700@localhost>
From: Gabriele Nicolardi <gabriele.nicolardi@HIDDEN>
Content-Language: en-US
In-Reply-To: <4278.1782900700@localhost>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 81327
X-Mailman-Approved-At: Wed, 01 Jul 2026 11:24:51 -0400
Cc: 81327 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)
This is a multi-part message in MIME format.
--------------4MdPD7CDU5xPoSk6yGu3n2js
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Hi Ikumi,
> However, this proposal leads to false positive for a dollar sign
> following 3 (or more) consecutive backslashes; M-x texmathp says
> "math-mode is on" at the end the following line:
> \\\$
> Could you further tune the regexp?
>
> In addition, we have to take another perspetive into consideration;
> `texmathp` is used in font-lock machinery in AUCTeX, thus every
> non-trivial edition in the buffer calls `texmathp` to compute correct
> syntax hilighting. For this reason, `texmathp` must be lightweight
> enough not to interrupt the user editing process. If the regular
> expression is too complex and it slows down `texmathp` siginificantly,
> it wouldn't be a good idea to implement it into `texmathp-compile`.
> (However, I'm optimistic about this aspect. I suppose we can find regexp
> simple enough.)
>
> Ikumi Keita
before going into the technical details: I should mention that I don't
actually use AUCTeX as a whole. I use texmathp.el on its own, as a
standalone library, to discriminate math from text during automated
find-and-replace operations -- I work in copy editing / journal
typesetting, and I need a reliable way to tell whether a given buffer
position is inside math mode before applying certain substitutions.
That's the context this bug report and this follow-up come from.
Thank you for catching that counterexample. I looked into it further,
and it turns out the problem is not a tuning issue but a structural one:
any regex that tries to encode backslash parity via "anchor + pairs of
backslashes" alternation is vulnerable to a leftmost-match slippage. I
verified this systematically: with the previously proposed regex, every
odd N >= 3 (3, 5, 7, ...) produces a false positive, not just N = 3. The
engine can always find a way to start the match one backslash later
inside the run, silently discarding the parity of the skipped backslash.
A regex without lookbehind cannot reliably encode "preceded by an even
number of backslashes" through alternation alone. The robust fix is to
capture the whole backslash run with a single, non-alternating
quantifier, and check its parity in Lisp:
In texmathp-compile:
texmathp-toggle-regexp
(concat "\\(\\\\*\\)"
(regexp-opt togglers t))
In texmathp, the toggle-scanning loop needs a matching change (group 1
no longer means "real toggle", it now holds the backslash run, so parity
must be checked before deciding to toggle):
(while (re-search-forward texmathp-toggle-regexp pos t)
(when (zerop (mod (length (match-string-no-properties 1)) 2))
(if (setq math-on (not math-on))
(setq sw-match (cons (match-string-no-properties 2)
(match-beginning 2)))
(setq sw-match nil))))
So this does end up touching texmathp itself, not just texmathp-compile
-- a slightly larger patch than my original proposal, but still small
and contained to that one loop. Group 2 (the toggler string itself, "$"
or "$$") and its position are completely unaffected, so texmathp-why
keeps exactly the same contents as before.
Why I'm confident this is correct rather than just "tuned better": "\\*"
is a single quantifier with no alternation, so the engine always finds
the true start of the backslash run as the leftmost match position --
there is no ambiguity to backtrack into, unlike the paired-backslash
approach. I tested it against backslash runs from N=0 up to N=101 (even
and odd), the original tabular/TikZ case, your \\\$ counterexample, $$
display math combined with backslash runs, and multi-cell tabular rows
-- all correct. I also confirmed the compiled regexp still lets
regexp-opt factor "$" and "$$" exactly as before
("\\(\\\\*\\)\\($\\$?\\)"), so display math is unaffected.
On your performance concern: I don't think this adds meaningful
overhead. "\\*" is linear with no backtracking, arguably simpler for the
regex engine to evaluate than the original "[^\\$]" character-class
alternative, and the added Lisp-side check is just a mod on the length
of a typically 0-2 character string per match. For what it's worth,
AUCTeX already uses exactly this parity-based idiom elsewhere for the
same class of problem -- TeX-escaped-p in tex.el determines whether a
character is escaped by checking whether skip-chars-backward over
backslashes returns an odd number. So this isn't a new pattern for the
codebase, just the same one applied here.
I also went through the whole AUCTeX tree (not just texmathp.el) to
check for anything else that might depend on the internals I'm changing.
texmathp-toggle-regexp itself is only ever referenced inside
texmathp.el. The only external consumers of the result are the
electric-dollar matching in tex.el (TeX-insert-dollar-action,
TeX--blink-matching-dollar) and the font-lock-beg optimization in
font-latex.el, and both only read (car texmathp-why) / (cdr
texmathp-why), i.e. group 2 and its position -- neither is touched by
this change.
For full transparency, as with my initial report: I used an AI assistant
(Claude) throughout this follow-up as well -- to analyze why the
paired-backslash regex fails structurally, to design this alternative,
and to build and run a test harness (an actual Emacs instance,
byte-compiling texmathp.el and exercising the real texmathp function
against dozens of cases, including the ones above) rather than reasoning
about the regex in the abstract. I independently reviewed the test cases
and the reasoning, and I'm satisfied the fix and the testing are sound,
but of course I'd still welcome your review, especially given your
closer familiarity with texmathp's history and edge cases.
I'd be happy to prepare a proper patch (against texmathp-compile and
texmathp) with a short changelog entry if this formulation looks
reasonable to you. Let me know if you'd like it adjusted, or if you see
a case I haven't considered.
Best,
Gabriele Nicolardi
--
SISSA Medialab
* Publishing *
*Gabriele Nicolardi*
*Production specialist*
*gabriele.nicolardi@HIDDEN*
------------------------------------------------------------------------
*Via Bonomea, 265 - 34136 Trieste, Italy - medialab.sissa.it
<http://medialab.sissa.it/en>*<http://medialab.sissa.it/en>
--------------4MdPD7CDU5xPoSk6yGu3n2js
Content-Type: multipart/related;
boundary="------------ohzBx1YiAjinzXA2Yko8kTvM"
--------------ohzBx1YiAjinzXA2Yko8kTvM
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8bit
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p>Hi Ikumi,</p>
<p><br>
</p>
<blockquote type="cite" cite="mid:4278.1782900700@localhost">
<pre class="moz-quote-pre" wrap="">However, this proposal leads to false positive for a dollar sign
following 3 (or more) consecutive backslashes; M-x texmathp says
"math-mode is on" at the end the following line:
\\\$
Could you further tune the regexp?
In addition, we have to take another perspetive into consideration;
`texmathp` is used in font-lock machinery in AUCTeX, thus every
non-trivial edition in the buffer calls `texmathp` to compute correct
syntax hilighting. For this reason, `texmathp` must be lightweight
enough not to interrupt the user editing process. If the regular
expression is too complex and it slows down `texmathp` siginificantly,
it wouldn't be a good idea to implement it into `texmathp-compile`.
(However, I'm optimistic about this aspect. I suppose we can find regexp
simple enough.)
Ikumi Keita</pre>
</blockquote>
<div class="moz-signature"><br>
before going into the technical details: I should mention that I
don't actually use AUCTeX as a whole. I use texmathp.el on its
own, as a standalone library, to discriminate math from text
during automated find-and-replace operations -- I work in copy
editing / journal typesetting, and I need a reliable way to tell
whether a given buffer position is inside math mode before
applying certain substitutions. That's the context this bug report
and this follow-up come from.<br>
<br>
Thank you for catching that counterexample. I looked into it
further, and it turns out the problem is not a tuning issue but a
structural one: any regex that tries to encode backslash parity
via "anchor + pairs of backslashes" alternation is vulnerable to a
leftmost-match slippage. I verified this systematically: with the
previously proposed regex, every odd N >= 3 (3, 5, 7, ...)
produces a false positive, not just N = 3. The engine can always
find a way to start the match one backslash later inside the run,
silently discarding the parity of the skipped backslash.<br>
<br>
A regex without lookbehind cannot reliably encode "preceded by an
even number of backslashes" through alternation alone. The robust
fix is to capture the whole backslash run with a single,
non-alternating quantifier, and check its parity in Lisp:<br>
<br>
In texmathp-compile:<br>
<br>
texmathp-toggle-regexp<br>
(concat "\\(\\\\*\\)"<br>
(regexp-opt togglers t))<br>
<br>
In texmathp, the toggle-scanning loop needs a matching change
(group 1 no longer means "real toggle", it now holds the backslash
run, so parity must be checked before deciding to toggle):<br>
<br>
(while (re-search-forward texmathp-toggle-regexp pos t)<br>
(when (zerop (mod (length (match-string-no-properties 1)) 2))<br>
(if (setq math-on (not math-on))<br>
(setq sw-match (cons (match-string-no-properties 2)
(match-beginning 2)))<br>
(setq sw-match nil))))<br>
<br>
So this does end up touching texmathp itself, not just
texmathp-compile -- a slightly larger patch than my original
proposal, but still small and contained to that one loop. Group 2
(the toggler string itself, "$" or "$$") and its position are
completely unaffected, so texmathp-why keeps exactly the same
contents as before.<br>
<br>
Why I'm confident this is correct rather than just "tuned better":
"\\*" is a single quantifier with no alternation, so the engine
always finds the true start of the backslash run as the leftmost
match position -- there is no ambiguity to backtrack into, unlike
the paired-backslash approach. I tested it against backslash runs
from N=0 up to N=101 (even and odd), the original tabular/TikZ
case, your \\\$ counterexample, $$ display math combined with
backslash runs, and multi-cell tabular rows -- all correct. I also
confirmed the compiled regexp still lets regexp-opt factor "$" and
"$$" exactly as before ("\\(\\\\*\\)\\($\\$?\\)"), so display math
is unaffected.<br>
<br>
On your performance concern: I don't think this adds meaningful
overhead. "\\*" is linear with no backtracking, arguably simpler
for the regex engine to evaluate than the original "[^\\$]"
character-class alternative, and the added Lisp-side check is just
a mod on the length of a typically 0-2 character string per match.
For what it's worth, AUCTeX already uses exactly this parity-based
idiom elsewhere for the same class of problem -- TeX-escaped-p in
tex.el determines whether a character is escaped by checking
whether skip-chars-backward over backslashes returns an odd
number. So this isn't a new pattern for the codebase, just the
same one applied here.<br>
<br>
I also went through the whole AUCTeX tree (not just texmathp.el)
to check for anything else that might depend on the internals I'm
changing. texmathp-toggle-regexp itself is only ever referenced
inside texmathp.el. The only external consumers of the result are
the electric-dollar matching in tex.el (TeX-insert-dollar-action,
TeX--blink-matching-dollar) and the font-lock-beg optimization in
font-latex.el, and both only read (car texmathp-why) / (cdr
texmathp-why), i.e. group 2 and its position -- neither is touched
by this change.<br>
<br>
For full transparency, as with my initial report: I used an AI
assistant (Claude) throughout this follow-up as well -- to analyze
why the paired-backslash regex fails structurally, to design this
alternative, and to build and run a test harness (an actual Emacs
instance, byte-compiling texmathp.el and exercising the real
texmathp function against dozens of cases, including the ones
above) rather than reasoning about the regex in the abstract. I
independently reviewed the test cases and the reasoning, and I'm
satisfied the fix and the testing are sound, but of course I'd
still welcome your review, especially given your closer
familiarity with texmathp's history and edge cases.<br>
<br>
I'd be happy to prepare a proper patch (against texmathp-compile
and texmathp) with a short changelog entry if this formulation
looks reasonable to you. Let me know if you'd like it adjusted, or
if you see a case I haven't considered.<br>
<br>
Best,<br>
Gabriele Nicolardi</div>
<div class="moz-signature">-- <br>
<div> <br>
<table border="0" cellpadding="0" cellspacing="0"
style="font-family: Arial, sans-serif; border-collapse: collapse; color: #000000;">
<tbody>
<tr>
<!-- Immagine --> <td style="vertical-align: top;"> <img
alt="SISSA Medialab"
style="width: 5.1em; margin: 0 1.5em"
src="cid:part1.f8wpVYCD.0AMDG3NJ@HIDDEN"> </td>
<!-- Testo --> <td style="vertical-align: top;">
<table border="0" cellpadding="0" cellspacing="0"
style="font-family: Arial, sans-serif; border-collapse: collapse; color: #000000; font-size: 14px;">
<!-- Tag --> <tbody>
<tr>
<td colspan="2"> <span
style="background-color: #c8d644; border-radius: 4px; color: #000000; display: inline-block;">
<b> Publishing </b> </span> </td>
</tr>
<!-- Recapiti personali --> <tr>
<td> </td>
<td> <b>Gabriele Nicolardi</b><br>
<b>Production specialist</b><br>
<b><a
href="mailto:gabriele.nicolardi@HIDDEN"
class="moz-txt-link-freetext">gabriele.nicolardi@HIDDEN</a></b>
</td>
</tr>
<!-- Linea separatrice --> <tr>
<td> </td>
<td>
<hr
style="border: 0; background-color: #c8d644; height: 1px;"> </td>
</tr>
<!-- Recapiti SISSA Medialab --> <tr>
<td> </td>
<td> <b>Via Bonomea, 265 - 34136 Trieste, Italy -
<a href="http://medialab.sissa.it/en">medialab.sissa.it</a></b><a
href="http://medialab.sissa.it/en"> </a></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>
--------------ohzBx1YiAjinzXA2Yko8kTvM
Content-Type: image/png; name="IQwdeMLFIuaXLmDF.png"
Content-Disposition: inline; filename="IQwdeMLFIuaXLmDF.png"
Content-Id: <part1.f8wpVYCD.0AMDG3NJ@HIDDEN>
Content-Transfer-Encoding: base64
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
D889MEn6RZlPAAAAAElFTkSuQmCC
--------------ohzBx1YiAjinzXA2Yko8kTvM--
--------------4MdPD7CDU5xPoSk6yGu3n2js--
bug-auctex@HIDDEN:bug#81327; Package auctex.
Full text available.
Received: (at 81327) by debbugs.gnu.org; 1 Jul 2026 10:11:47 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Jul 01 06:11:47 2026
Received: from localhost ([127.0.0.1]:57976 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1werv1-0000WS-6h
for submit <at> debbugs.gnu.org; Wed, 01 Jul 2026 06:11:47 -0400
Received: from smtp1a.inetd.co.jp ([210.129.88.11]:46034)
by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.84_2) (envelope-from <ikumi@HIDDEN>)
id 1weruy-0000WE-4U
for 81327 <at> debbugs.gnu.org; Wed, 01 Jul 2026 06:11:45 -0400
Received: from localhost (203-165-210-235.rev.home.ne.jp [203.165.210.235])
by smtp1a.inetd.co.jp (Postfix) with ESMTPSA id 919665C;
Wed, 1 Jul 2026 19:11:40 +0900 (JST)
From: Ikumi Keita <ikumi@HIDDEN>
To: Gabriele Nicolardi <gabriele.nicolardi@HIDDEN>
Subject: Re: bug#81327: 14.1.0;
texmathp returns nil inside $...$ math that follows "\\" (e.g.
"$a$\\$b$")
In-reply-to: <a6966ef8-ba4d-4d2c-8a7d-d9e16cb4538b@HIDDEN>
References: <a6966ef8-ba4d-4d2c-8a7d-d9e16cb4538b@HIDDEN>
Comments: In-reply-to Gabriele Nicolardi via bug-auctex via Bug reporting list
for AUCTeX <bug-auctex@HIDDEN>
message dated "Sun, 28 Jun 2026 19:21:41 +0200."
X-Mailer: MH-E 8.6+git; nmh 1.8; Emacs 30.2
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-ID: <4275.1782900700.1@localhost>
Content-Transfer-Encoding: quoted-printable
Date: Wed, 01 Jul 2026 19:11:40 +0900
Message-ID: <4278.1782900700@localhost>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 81327
Cc: Elia Calderan <elia.calderan@HIDDEN>, 81327 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)
Hi Gabriele,
>>>>> Gabriele Nicolardi via bug-auctex via Bug reporting list for AUCTeX =
<bug-auctex@HIDDEN> writes:
> texmathp misreports math mode when a math-opening "$" is immediately
> preceded by "\\" (a TeX line break). This is valid LaTeX and common in
> tabular/array cells and multi-line TikZ node labels.
> Tested against current git master (texmathp.el, copyright 1998-2024).
> How to reproduce (emacs -Q, AUCTeX loaded):
> Put point on the "b" of the second math group and run M-x texmathp.
> \begin{tabular}{c}$a$\\$b$\end{tabular}
> ^ point here
> Expected: math-mode is on (point is inside $...$).
> Actual: texmathp returns nil ("math-mode is off").
> Minimal trigger: in a buffer containing $a$\\$b$ , point on "b"
> returns nil. The first group $a$ is detected correctly; everything
> after the "\\$" has inverted parity.
> Root cause:
> texmathp counts unescaped "$" toggles via `texmathp-toggle-regexp',
> built in `texmathp-compile' as
> (concat "\\([^\\$]\\|\\`\\)" (regexp-opt togglers t))
> The "[^\\$]" prefix is meant to skip an escaped dollar "\$", by
> requiring the char before a counted "$" to be neither "\" nor "$".
> But it also rejects a *genuine* math "$" that follows "\\": in
> "$a$\\$b$" the opening "$" of the second group is preceded by the
> second backslash of "\\", so it is never counted. The dollar parity
> is then wrong for the rest of the paragraph, and texmathp returns the
> inverted result on alternating math groups.
I agree with your analysis.
> The correct rule is backslash *parity*: a "$" is a real toggle iff it
> is preceded by an even number of backslashes ("\$" =3D literal, skip;
> "\\$" =3D line break + math open, count).
I basically agree with this analysis as well.
> Proposed fix (texmathp-compile):
> - (concat "\\([^\\$]\\|\\`\\)"
> + (concat "\\(\\(?:\\(?:[^\\$]\\|\\`\\)\\(?:\\\\\\\\\\)*\\)\\=
|\\(?:\\\\\\\\\\)+\\)"
> (regexp-opt togglers t))
However, this proposal leads to false positive for a dollar sign
following 3 (or more) consecutive backslashes; M-x texmathp says
"math-mode is on" at the end the following line:
\\\$
Could you further tune the regexp?
In addition, we have to take another perspetive into consideration;
`texmathp` is used in font-lock machinery in AUCTeX, thus every
non-trivial edition in the buffer calls `texmathp` to compute correct
syntax hilighting. For this reason, `texmathp` must be lightweight
enough not to interrupt the user editing process. If the regular
expression is too complex and it slows down `texmathp` siginificantly,
it wouldn't be a good idea to implement it into `texmathp-compile`.
(However, I'm optimistic about this aspect. I suppose we can find regexp
simple enough.)
Ikumi Keita
#StandWithUkraine #StopWarInUkraine
#Gaza #StopGenocide #CeasefireNOW
#IProtestAgainstTrumpAndNetanyahu'sAttackOnIran,WhichViolatesInternational=
Law
bug-auctex@HIDDEN:bug#81327; Package auctex.
Full text available.
Received: (at submit) by debbugs.gnu.org; 29 Jun 2026 07:17:49 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Jun 29 03:17:49 2026
Received: from localhost ([127.0.0.1]:34709 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1we6FX-0000eY-Hb
for submit <at> debbugs.gnu.org; Mon, 29 Jun 2026 03:17:49 -0400
Received: from lists1p.gnu.org ([2001:470:142::17]:60710)
by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.84_2) (envelope-from <gabriele.nicolardi@HIDDEN>)
id 1wdtCp-0005Li-Ct
for submit <at> debbugs.gnu.org; Sun, 28 Jun 2026 13:22:16 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10])
by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.90_1) (envelope-from <gabriele.nicolardi@HIDDEN>)
id 1wdtCf-0006v3-RK
for bug-auctex@HIDDEN; Sun, 28 Jun 2026 13:21:57 -0400
Received: from smtp03.cbsolt.net ([185.97.217.42])
by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.90_1) (envelope-from <gabriele.nicolardi@HIDDEN>)
id 1wdtCY-00083e-CS
for bug-auctex@HIDDEN; Sun, 28 Jun 2026 13:21:55 -0400
Received: from [10.0.2.15] (host-87-19-250-62.retail.telecomitalia.it
[87.19.250.62])
by smtp03.cbsolt.net (Postfix) with ESMTPSA id 4gpGRV5TGwz3wdt;
Sun, 28 Jun 2026 19:21:42 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cbsolt.net;
s=201504-di4k2w; t=1782667303;
h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
to:to:cc:cc:mime-version:mime-version:content-type:content-type;
bh=2MdqbdKsk1YKVC6FN1nZtjmMiGBdYZQm8iE2nnWPdFU=;
b=YmBIkip7nP/mcWj2IH09Kfl8ODQWn998O3rwZdlDSyEoecTKCloIs+n97xZRluuSNKrXpV
MYvquHyu8j0nkU+qMtZQ6ErL22D/L2nceKKH6MAxzAzu/cl9gCXWrwNmPxryMNn0FgW09w
eLIaeQnI7X7/8i6g7EjniF3ZZs2f27E=
Content-Type: multipart/alternative;
boundary="------------b0FjzYPPpWqjRhwvsRWyYkp0"
Message-ID: <a6966ef8-ba4d-4d2c-8a7d-d9e16cb4538b@HIDDEN>
Date: Sun, 28 Jun 2026 19:21:41 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
From: Gabriele Nicolardi <gabriele.nicolardi@HIDDEN>
Content-Language: en-US
To: bug-auctex@HIDDEN
Subject: 14.1.0; texmathp returns nil inside $...$ math that follows "\\"
(e.g. "$a$\\$b$")
Received-SPF: pass client-ip=185.97.217.42;
envelope-from=gabriele.nicolardi@HIDDEN; helo=smtp03.cbsolt.net
X-Spam_score_int: -18
X-Spam_score: -1.9
X-Spam_bar: -
X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
DKIM_VALID=-0.1, HTML_MESSAGE=0.001, SPF_HELO_NONE=0.001,
SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 0.9 (/)
X-Debbugs-Envelope-To: submit
X-Mailman-Approved-At: Mon, 29 Jun 2026 03:17:46 -0400
Cc: Elia Calderan <elia.calderan@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.1 (/)
This is a multi-part message in MIME format.
--------------b0FjzYPPpWqjRhwvsRWyYkp0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Hi,
texmathp misreports math mode when a math-opening "$" is immediately
preceded by "\\" (a TeX line break). This is valid LaTeX and common in
tabular/array cells and multi-line TikZ node labels.
Tested against current git master (texmathp.el, copyright 1998-2024).
How to reproduce (emacs -Q, AUCTeX loaded):
Put point on the "b" of the second math group and run M-x texmathp.
\begin{tabular}{c}$a$\\$b$\end{tabular}
^ point here
Expected: math-mode is on (point is inside $...$).
Actual: texmathp returns nil ("math-mode is off").
Minimal trigger: in a buffer containing $a$\\$b$ , point on "b"
returns nil. The first group $a$ is detected correctly; everything
after the "\\$" has inverted parity.
Root cause:
texmathp counts unescaped "$" toggles via `texmathp-toggle-regexp',
built in `texmathp-compile' as
(concat "\\([^\\$]\\|\\`\\)" (regexp-opt togglers t))
The "[^\\$]" prefix is meant to skip an escaped dollar "\$", by
requiring the char before a counted "$" to be neither "\" nor "$".
But it also rejects a *genuine* math "$" that follows "\\": in
"$a$\\$b$" the opening "$" of the second group is preceded by the
second backslash of "\\", so it is never counted. The dollar parity
is then wrong for the rest of the paragraph, and texmathp returns the
inverted result on alternating math groups.
The correct rule is backslash *parity*: a "$" is a real toggle iff it
is preceded by an even number of backslashes ("\$" = literal, skip;
"\\$" = line break + math open, count).
Proposed fix (texmathp-compile):
- (concat "\\([^\\$]\\|\\`\\)"
+ (concat
"\\(\\(?:\\(?:[^\\$]\\|\\`\\)\\(?:\\\\\\\\\\)*\\)\\|\\(?:\\\\\\\\\\)+\\)"
(regexp-opt togglers t))
i.e. group 1 becomes "(anchor char or BOL) followed by zero or more
backslash pairs" OR "one or more backslash pairs" (the second branch
handles the case where the toggling "$" directly follows a previously
consumed "$", as in "$...$\\$..."). Group numbering is unchanged, so
the (match-string 2)/(match-beginning 2) references in `texmathp'
still refer to the dollar(s).
Verified with the patch:
$a$\\$b$ point on b -> t (was nil) FIXED
tabular cell above point on b -> t (was nil) FIXED
$x+y$ -> t (unchanged)
$$a+b$$ -> t (unchanged)
\$5 e testo -> nil (literal $, unchanged)
\$5 \$6 testo -> nil (between two \$, unchanged)
For full transparency: the root-cause analysis and the suggested fix
were developed with the help of an AI assistant (Claude Code). I have
independently reproduced the issue with "emacs -Q" and checked the
patch against the regression cases listed above. Please review the
patch on its own merits; feel free to adopt a different formulation if
you prefer.
Thanks,
Gabriele Nicolardi
Emacs : GNU Emacs 29.3 (build 1, x86_64-pc-linux-gnu, GTK+ Version
3.24.41, cairo version 1.18.0)
of 2026-02-03, modified by Debian
Package: 14.1.0
current state:
==============
(setq
window-system 'x
LaTeX-version "2e"
TeX-style-path '("~/.emacs.d/auctex/"
"/home/gabriele/.emacs.d/elpa/auctex-14.1.0/style"
"/home/gabriele/.emacs.d/auctex/auto"
"/home/gabriele/.emacs.d/auctex/style" "auto" "style")
TeX-auto-save nil
TeX-parse-self nil
TeX-master t
TeX-command-list '(("TeX" "%(PDF)%(tex) %(file-line-error)
%`%(extraopts) %S%(PDFout)%(mode)%' %(output-dir) %t"
TeX-run-TeX nil (plain-TeX-mode AmSTeX-mode Texinfo-mode)
:help "Run plain TeX")
("LaTeX" "%`%l%(mode)%' %T" TeX-run-TeX nil (LaTeX-mode
docTeX-mode) :help "Run LaTeX")
("Makeinfo" "makeinfo %(extraopts) %(o-dir) %t"
TeX-run-compile nil (Texinfo-mode) :help
"Run Makeinfo with Info output")
("Makeinfo HTML" "makeinfo %(extraopts) %(o-dir) --html %t"
TeX-run-compile nil
(Texinfo-mode) :help "Run Makeinfo with HTML output")
("AmSTeX" "amstex %(PDFout) %`%(extraopts) %S%(mode)%'
%(output-dir) %t" TeX-run-TeX nil
(AmSTeX-mode) :help "Run AMSTeX")
("ConTeXt" "%(cntxcom) --once %(extraopts) %(execopts)%t"
TeX-run-TeX nil (ConTeXt-mode)
:help "Run ConTeXt once")
("ConTeXt Full" "%(cntxcom) %(extraopts) %(execopts)%t"
TeX-run-TeX nil (ConTeXt-mode) :help
"Run ConTeXt until completion")
("BibTeX" "bibtex %(O?aux)" TeX-run-BibTeX nil
(plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode
Texinfo-mode ConTeXt-mode) :help
"Run BibTeX")
("Biber" "biber %(output-dir) %s" TeX-run-Biber nil
(plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode
Texinfo-mode) :help "Run Biber")
("Texindex" "texindex %s.??" TeX-run-command nil
(Texinfo-mode) :help "Run Texindex")
("Texi2dvi" "%(PDF)texi2dvi %t" TeX-run-command nil
(Texinfo-mode) :help
"Run Texi2dvi or Texi2pdf")
("View" "%V" TeX-run-discard-or-function t t :help "Run
Viewer")
("Print" "%p" TeX-run-command t t :help "Print the file")
("Queue" "%q" TeX-run-background nil t :help "View the
printer queue" :visible
TeX-queue-command)
("File" "%(o?)dvips %d -o %f " TeX-run-dvips t
(plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode
Texinfo-mode) :help
"Generate PostScript file")
("Dvips" "%(o?)dvips %d -o %f " TeX-run-dvips nil
(plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode
Texinfo-mode) :help
"Convert DVI file to PostScript")
("Dvipdfmx" "dvipdfmx -o %(O?pdf) %d" TeX-run-dvipdfmx nil
(plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode
Texinfo-mode) :help
"Convert DVI file to PDF with dvipdfmx")
("Ps2pdf" "ps2pdf %f %(O?pdf)" TeX-run-ps2pdf nil
(plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode
Texinfo-mode) :help
"Convert PostScript file to PDF")
("LaTeXMk"
"latexmk %(latexmk-out) %(file-line-error) %(output-dir)
%`%(extraopts) %S%(mode)%' %t"
TeX-run-TeX nil (LaTeX-mode docTeX-mode) :help "Run LaTeXMk")
("Glossaries" "makeglossaries %(d-dir) %s" TeX-run-command nil
(plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode
Texinfo-mode) :help
"Run makeglossaries to create glossary file")
("Index" "makeindex %(O?idx)" TeX-run-index nil
(plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode
Texinfo-mode) :help
"Run makeindex to create index file")
("upMendex" "upmendex %(O?idx)" TeX-run-index t
(plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode
Texinfo-mode) :help
"Run upmendex to create index file")
("Xindy" "texindy %s" TeX-run-command nil
(plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode
Texinfo-mode) :help
"Run xindy to create index file")
("Check" "lacheck %s" TeX-run-compile nil (LaTeX-mode) :help
"Check LaTeX file for correctness")
("ChkTeX" "chktex -v6 %s" TeX-run-compile nil (LaTeX-mode)
:help
"Check LaTeX file for common mistakes")
("Spell" "(TeX-ispell-document \"\")" TeX-run-function nil
t :help "Spell-check the document")
("Clean" "TeX-clean" TeX-run-function nil t :help "Delete
generated intermediate files")
("Clean All" "(TeX-clean t)" TeX-run-function nil t :help
"Delete generated intermediate and output files")
("Other" "" TeX-run-command t t :help "Run an arbitrary
command"))
)--
SISSA Medialab
* Publishing *
*Gabriele Nicolardi*
*Production specialist*
*gabriele.nicolardi@HIDDEN*
------------------------------------------------------------------------
*Via Bonomea, 265 - 34136 Trieste, Italy - medialab.sissa.it
<http://medialab.sissa.it/en>*<http://medialab.sissa.it/en>
--------------b0FjzYPPpWqjRhwvsRWyYkp0
Content-Type: multipart/related;
boundary="------------gO0HPIBEoUXUaXHQU9e9uyFF"
--------------gO0HPIBEoUXUaXHQU9e9uyFF
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8bit
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<p>Hi,</p>
<div class="moz-signature"><br>
texmathp misreports math mode when a math-opening "$" is
immediately<br>
preceded by "\\" (a TeX line break). This is valid LaTeX and
common in<br>
tabular/array cells and multi-line TikZ node labels.<br>
<br>
Tested against current git master (texmathp.el, copyright
1998-2024).<br>
<br>
How to reproduce (emacs -Q, AUCTeX loaded):<br>
<br>
Put point on the "b" of the second math group and run M-x
texmathp.<br>
<br>
\begin{tabular}{c}$a$\\$b$\end{tabular}<br>
^ point here<br>
<br>
Expected: math-mode is on (point is inside $...$).<br>
Actual: texmathp returns nil ("math-mode is off").<br>
<br>
Minimal trigger: in a buffer containing $a$\\$b$ , point on
"b"<br>
returns nil. The first group $a$ is detected correctly;
everything<br>
after the "\\$" has inverted parity.<br>
<br>
Root cause:<br>
<br>
texmathp counts unescaped "$" toggles via
`texmathp-toggle-regexp',<br>
built in `texmathp-compile' as<br>
<br>
(concat "\\([^\\$]\\|\\`\\)" (regexp-opt togglers t))<br>
<br>
The "[^\\$]" prefix is meant to skip an escaped dollar "\$", by<br>
requiring the char before a counted "$" to be neither "\" nor
"$".<br>
But it also rejects a *genuine* math "$" that follows "\\": in<br>
"$a$\\$b$" the opening "$" of the second group is preceded by
the<br>
second backslash of "\\", so it is never counted. The dollar
parity<br>
is then wrong for the rest of the paragraph, and texmathp
returns the<br>
inverted result on alternating math groups.<br>
<br>
The correct rule is backslash *parity*: a "$" is a real toggle
iff it<br>
is preceded by an even number of backslashes ("\$" = literal,
skip;<br>
"\\$" = line break + math open, count).<br>
<br>
Proposed fix (texmathp-compile):<br>
<br>
- (concat "\\([^\\$]\\|\\`\\)"<br>
+ (concat
"\\(\\(?:\\(?:[^\\$]\\|\\`\\)\\(?:\\\\\\\\\\)*\\)\\|\\(?:\\\\\\\\\\)+\\)"<br>
(regexp-opt togglers t))<br>
<br>
i.e. group 1 becomes "(anchor char or BOL) followed by zero or
more<br>
backslash pairs" OR "one or more backslash pairs" (the second
branch<br>
handles the case where the toggling "$" directly follows a
previously<br>
consumed "$", as in "$...$\\$..."). Group numbering is
unchanged, so<br>
the (match-string 2)/(match-beginning 2) references in
`texmathp'<br>
still refer to the dollar(s).<br>
<br>
Verified with the patch:<br>
<br>
$a$\\$b$ point on b -> t (was nil) FIXED<br>
tabular cell above point on b -> t (was nil) FIXED<br>
$x+y$ -> t (unchanged)<br>
$$a+b$$ -> t (unchanged)<br>
\$5 e testo -> nil (literal $,
unchanged)<br>
\$5 \$6 testo -> nil (between two \$,
unchanged)</div>
<div class="moz-signature"><br>
</div>
<div class="moz-signature">For full transparency: the root-cause
analysis and the suggested fix</div>
<div class="moz-signature">were developed with the help of an AI
assistant (Claude Code). I have</div>
<div class="moz-signature">independently reproduced the issue with
"emacs -Q" and checked the</div>
<div class="moz-signature">patch against the regression cases listed
above. Please review the</div>
<div class="moz-signature">patch on its own merits; feel free to
adopt a different formulation if</div>
<div class="moz-signature">you prefer.</div>
<div class="moz-signature"><br>
Thanks,<br>
<br>
Gabriele Nicolardi<br>
<br>
Emacs : GNU Emacs 29.3 (build 1, x86_64-pc-linux-gnu, GTK+
Version 3.24.41, cairo version 1.18.0)<br>
of 2026-02-03, modified by Debian<br>
Package: 14.1.0<br>
<br>
current state:<br>
==============<br>
(setq<br>
window-system 'x<br>
LaTeX-version "2e"<br>
TeX-style-path '("~/.emacs.d/auctex/"
"/home/gabriele/.emacs.d/elpa/auctex-14.1.0/style"<br>
"/home/gabriele/.emacs.d/auctex/auto"
"/home/gabriele/.emacs.d/auctex/style" "auto" "style")<br>
TeX-auto-save nil<br>
TeX-parse-self nil<br>
TeX-master t<br>
TeX-command-list '(("TeX" "%(PDF)%(tex) %(file-line-error)
%`%(extraopts) %S%(PDFout)%(mode)%' %(output-dir) %t"<br>
TeX-run-TeX nil (plain-TeX-mode AmSTeX-mode
Texinfo-mode) :help "Run plain TeX")<br>
("LaTeX" "%`%l%(mode)%' %T" TeX-run-TeX nil
(LaTeX-mode docTeX-mode) :help "Run LaTeX")<br>
("Makeinfo" "makeinfo %(extraopts) %(o-dir) %t"
TeX-run-compile nil (Texinfo-mode) :help<br>
"Run Makeinfo with Info output")<br>
("Makeinfo HTML" "makeinfo %(extraopts) %(o-dir)
--html %t" TeX-run-compile nil<br>
(Texinfo-mode) :help "Run Makeinfo with HTML output")<br>
("AmSTeX" "amstex %(PDFout) %`%(extraopts) %S%(mode)%'
%(output-dir) %t" TeX-run-TeX nil<br>
(AmSTeX-mode) :help "Run AMSTeX")<br>
("ConTeXt" "%(cntxcom) --once %(extraopts)
%(execopts)%t" TeX-run-TeX nil (ConTeXt-mode)<br>
:help "Run ConTeXt once")<br>
("ConTeXt Full" "%(cntxcom) %(extraopts)
%(execopts)%t" TeX-run-TeX nil (ConTeXt-mode) :help<br>
"Run ConTeXt until completion")<br>
("BibTeX" "bibtex %(O?aux)" TeX-run-BibTeX nil<br>
(plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode
Texinfo-mode ConTeXt-mode) :help<br>
"Run BibTeX")<br>
("Biber" "biber %(output-dir) %s" TeX-run-Biber nil<br>
(plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode
Texinfo-mode) :help "Run Biber")<br>
("Texindex" "texindex %s.??" TeX-run-command nil
(Texinfo-mode) :help "Run Texindex")<br>
("Texi2dvi" "%(PDF)texi2dvi %t" TeX-run-command nil
(Texinfo-mode) :help<br>
"Run Texi2dvi or Texi2pdf")<br>
("View" "%V" TeX-run-discard-or-function t t :help
"Run Viewer")<br>
("Print" "%p" TeX-run-command t t :help "Print the
file")<br>
("Queue" "%q" TeX-run-background nil t :help "View the
printer queue" :visible<br>
TeX-queue-command)<br>
("File" "%(o?)dvips %d -o %f " TeX-run-dvips t<br>
(plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode
Texinfo-mode) :help<br>
"Generate PostScript file")<br>
("Dvips" "%(o?)dvips %d -o %f " TeX-run-dvips nil<br>
(plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode
Texinfo-mode) :help<br>
"Convert DVI file to PostScript")<br>
("Dvipdfmx" "dvipdfmx -o %(O?pdf) %d" TeX-run-dvipdfmx
nil<br>
(plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode
Texinfo-mode) :help<br>
"Convert DVI file to PDF with dvipdfmx")<br>
("Ps2pdf" "ps2pdf %f %(O?pdf)" TeX-run-ps2pdf nil<br>
(plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode
Texinfo-mode) :help<br>
"Convert PostScript file to PDF")<br>
("LaTeXMk"<br>
"latexmk %(latexmk-out) %(file-line-error)
%(output-dir) %`%(extraopts) %S%(mode)%' %t"<br>
TeX-run-TeX nil (LaTeX-mode docTeX-mode) :help "Run
LaTeXMk")<br>
("Glossaries" "makeglossaries %(d-dir) %s"
TeX-run-command nil<br>
(plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode
Texinfo-mode) :help<br>
"Run makeglossaries to create glossary file")<br>
("Index" "makeindex %(O?idx)" TeX-run-index nil<br>
(plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode
Texinfo-mode) :help<br>
"Run makeindex to create index file")<br>
("upMendex" "upmendex %(O?idx)" TeX-run-index t<br>
(plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode
Texinfo-mode) :help<br>
"Run upmendex to create index file")<br>
("Xindy" "texindy %s" TeX-run-command nil<br>
(plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode
Texinfo-mode) :help<br>
"Run xindy to create index file")<br>
("Check" "lacheck %s" TeX-run-compile nil (LaTeX-mode)
:help<br>
"Check LaTeX file for correctness")<br>
("ChkTeX" "chktex -v6 %s" TeX-run-compile nil
(LaTeX-mode) :help<br>
"Check LaTeX file for common mistakes")<br>
("Spell" "(TeX-ispell-document \"\")" TeX-run-function
nil t :help "Spell-check the document")<br>
("Clean" "TeX-clean" TeX-run-function nil t :help
"Delete generated intermediate files")<br>
("Clean All" "(TeX-clean t)" TeX-run-function nil t
:help<br>
"Delete generated intermediate and output files")<br>
("Other" "" TeX-run-command t t :help "Run an
arbitrary command"))<br>
)-- <br>
<div> <br>
<table border="0" cellpadding="0" cellspacing="0"
style="font-family: Arial, sans-serif; border-collapse: collapse; color: #000000;">
<tbody>
<tr>
<!-- Immagine --> <td style="vertical-align: top;"> <img
alt="SISSA Medialab"
style="width: 5.1em; margin: 0 1.5em"
src="cid:part1.9rct0Hp2.peI6Ymb4@HIDDEN"> </td>
<!-- Testo --> <td style="vertical-align: top;">
<table border="0" cellpadding="0" cellspacing="0"
style="font-family: Arial, sans-serif; border-collapse: collapse; color: #000000; font-size: 14px;">
<!-- Tag --> <tbody>
<tr>
<td colspan="2"> <span
style="background-color: #c8d644; border-radius: 4px; color: #000000; display: inline-block;">
<b> Publishing </b> </span> </td>
</tr>
<!-- Recapiti personali --> <tr>
<td> </td>
<td> <b>Gabriele Nicolardi</b><br>
<b>Production specialist</b><br>
<b><a
href="mailto:gabriele.nicolardi@HIDDEN"
class="moz-txt-link-freetext">gabriele.nicolardi@HIDDEN</a></b>
</td>
</tr>
<!-- Linea separatrice --> <tr>
<td> </td>
<td>
<hr
style="border: 0; background-color: #c8d644; height: 1px;"> </td>
</tr>
<!-- Recapiti SISSA Medialab --> <tr>
<td> </td>
<td> <b>Via Bonomea, 265 - 34136 Trieste, Italy -
<a href="http://medialab.sissa.it/en">medialab.sissa.it</a></b><a
href="http://medialab.sissa.it/en"> </a></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>
--------------gO0HPIBEoUXUaXHQU9e9uyFF
Content-Type: image/png; name="z7UNezHZ0Gmz5f1i.png"
Content-Disposition: inline; filename="z7UNezHZ0Gmz5f1i.png"
Content-Id: <part1.9rct0Hp2.peI6Ymb4@HIDDEN>
Content-Transfer-Encoding: base64
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
D889MEn6RZlPAAAAAElFTkSuQmCC
--------------gO0HPIBEoUXUaXHQU9e9uyFF--
--------------b0FjzYPPpWqjRhwvsRWyYkp0--
Gabriele Nicolardi <gabriele.nicolardi@HIDDEN>:bug-auctex@HIDDEN.
Full text available.bug-auctex@HIDDEN:bug#81327; Package auctex.
Full text available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.