Hi all,

I have some minor issues with respect to `LaTeX-find-matching-begin',
`LaTeX-find-matching-end' and `LaTeX-current-environment', which I'd
like to discuss.

1. I noticed that `LaTeX-find-matching-{begin,end}' doesn't work
   correctly when the point is just after the asterisk of "\end{foo*}".
   To confirm, put the point at "!" in the following example and
   type M-: (LaTeX-find-matching-begin) RET or M-:
   (LaTeX-find-matching-end) RET
----------------------------------------------------------------------
\documentclass{article}
\begin{document}

\begin{equation*}
  abc = xyz
\end{equation*!}

\end{document}
----------------------------------------------------------------------
   The attached patch fixes the starred variant case, but, as stated in
   the FIXME comment, this simple fix doesn't yet work for the case
   discussed in bug#19281[1]; When the point is after "\bar" of
   "\end{\bar}", neither `LaTeX-find-matching-begin' nor
   `LaTeX-find-matching-end' find the correct position. Should we handle
   such exceptional cases, too?

2. `LaTeX-current-environment' has special support for macrocode*?
   environments, but that support is absent in
   `LaTeX-find-matching-{begin,end}':
----------------------------------------------------------------------
                  ;; macrocode*? in docTeX-mode is special since we
                  ;; have also regular code lines not starting with a
                  ;; comment-prefix.  Hence, the next check just looks
                  ;; if we're inside such a group and returns t to
                  ;; recognize such a situation.
                  (and (eq major-mode 'doctex-mode)
                       (member (match-string-no-properties 2)
                               '("macrocode" "macrocode*"))))
----------------------------------------------------------------------
   Is this intentional? Or should we add similar codes to
   `LaTeX-find-matching-{begin,end}' as well? (I have little experience
   with doctex mode, so am not sure what to do.)

3. The regexp used in `LaTeX-current-environment' is
----------------------------------------------------------------------
                  (re-search-backward
                   "\\\\\\(begin\\|end\\) *{\\([^}]+\\)}" nil t))
----------------------------------------------------------------------
   so it doesn't handle the exceptional cases of bug#19281, namely
   "\begin{\bar{xyz}}" and "\end{\bar{xyz}}". Should we cater for such
   cases?

[1] https://debbugs.gnu.org/cgi/bugreport.cgi?bug=19281

Regards,
Ikumi Keita
#StandWithUkraine #StopWarInUkraine

>From f33999550949549b4012e2d5e12be04e041bf4a3 Mon Sep 17 00:00:00 2001
From: Ikumi Keita <ik...@ikumi.que.jp>
Date: Sun, 11 Dec 2022 16:08:50 +0900
Subject: [PATCH] Support starred variant name

* latex.el (LaTeX-find-matching-end):
(LaTeX-find-matching-begin):
Find correct begin or end when the point is just after the asterisk of
"\end{foo*}".
Remove spurious `regexp-quote' for `TeX-grop'.
---
 latex.el | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/latex.el b/latex.el
index 04caaf53..24d285e4 100644
--- a/latex.el
+++ b/latex.el
@@ -5268,8 +5268,12 @@ environment in commented regions with the same comment prefix."
          (in-comment (TeX-in-commented-line))
          (comment-prefix (and in-comment (TeX-comment-prefix)))
          (case-fold-search nil))
+    ;; FIXME: The following code until `while' handles exceptional
+    ;; cases that the point is on "\begin{foo}" or "\end{foo}".
+    ;; However, this assumes that environment names consist of a-zA-Z*
+    ;; and doesn't work for case discussed in bug#19281.
     (let ((pt (point)))
-      (skip-chars-backward (concat "a-zA-Z \t" (regexp-quote TeX-grop)))
+      (skip-chars-backward (concat "a-zA-Z* \t" TeX-grop))
       (unless (bolp)
         (backward-char 1)
         (if (and (looking-at regexp)
@@ -5305,7 +5309,11 @@ environment in commented regions with the same comment prefix."
          (in-comment (TeX-in-commented-line))
          (comment-prefix (and in-comment (TeX-comment-prefix)))
          (case-fold-search nil))
-    (skip-chars-backward (concat "a-zA-Z \t" (regexp-quote TeX-grop)))
+    ;; FIXME: The following code until `while' handles exceptional
+    ;; cases that the point is on "\begin{foo}" or "\end{foo}".
+    ;; However, this assumes that environment names consist of a-zA-Z*
+    ;; and doesn't work for case discussed in bug#19281.
+    (skip-chars-backward (concat "a-zA-Z* \t" TeX-grop))
     (unless (bolp)
       (backward-char 1)
       (and (looking-at regexp)
-- 
2.38.1

Reply via email to