Hi all,

please consider the following 2 examples and how the column separator is
filled, both do not work as expected:

--8<---------------cut here---------------start------------->8---
\documentclass{article}

\begin{document}

\begin{tabular}{ll}
  \multicolumn{2}{c}{These lines will} `M-RET here'
\end{tabular}
results in:
\begin{tabular}{ll}
  \multicolumn{2}{c}{These lines will} `M-RET here' \\
&
\end{tabular}

And
\begin{tabular}{ll}
  \multicolumn{2}{c}{These lines will}  \\
  & `C-c C-q C-e here'
\end{tabular}
results in:
\begin{tabular}{ll}
  \multicolumn{2}{c}{These lines will}  \\
& `C-c C-q C-e here'
\end{tabular}
\end{document}
--8<---------------cut here---------------end--------------->8---

The issue is in `LaTeX-hanging-ampersand-position' where
(- (current-column) 1) returns a negative value if no "[^\\]&" is found:

--8<---------------cut here---------------start------------->8---
(defun LaTeX-hanging-ampersand-position ()
  "Return indent column for a hanging ampersand (i.e. ^\\s-*&)."
  (destructuring-bind (beg-pos . beg-col)
      (LaTeX-env-beginning-pos-col)
    (let* ((cur-pos (point)))
      (save-excursion
        (if (re-search-backward "\\\\\\\\" beg-pos t)
            (let ((cur-idx (TeX-how-many "[^\\]&" (point) cur-pos)))
              (goto-char beg-pos)
              (re-search-forward "[^\\]&" cur-pos t (+ 1 cur-idx))
              (- (current-column) 1))
          (+ 2 beg-col))))))
--8<---------------cut here---------------end--------------->8---

My suggest to guard (- (current-column) 1) with a (wholenump ...) and
return (+ 2 beg-col) as fallback if the test is not true:

--8<---------------cut here---------------start------------->8---
(defun LaTeX-hanging-ampersand-position ()
  "Return indent column for a hanging ampersand (i.e. ^\\s-*&)."
  (destructuring-bind (beg-pos . beg-col)
      (LaTeX-env-beginning-pos-col)
    (let* ((cur-pos (point)))
      (save-excursion
        (if (re-search-backward "\\\\\\\\" beg-pos t)
            (let ((cur-idx (TeX-how-many "[^\\]&" (point) cur-pos)))
              (goto-char beg-pos)
              (re-search-forward "[^\\]&" cur-pos t (+ 1 cur-idx))
              (if (wholenump (- (current-column) 1))
                  (- (current-column) 1)
                (+ 2 beg-col)))
          (+ 2 beg-col))))))
--8<---------------cut here---------------end--------------->8---

Any comments welcome.

Best, Arash



_______________________________________________
bug-auctex mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/bug-auctex

Reply via email to