emacs auctex 表格单元格的垂直对齐方式

emacs auctex 表格单元格的垂直对齐方式

是否有一个 emacs auctex 宏或扩展可以自动垂直对齐表格中的单元格?我想到了一个可以将光标放在此表格中的任意位置的宏或扩展

\begin{tabular}{lll}
x & 123456789 & c \\
2345 & 2345 & 2345 \\
\end{tabular}

通过M-X tabular-magic(哈哈),它将表格重新格式化为

\begin{tabular}{lcr}
x    & 123456789 &    c \\
2345 &   2345    & 2345 \\
\end{tabular}

我知道多列可能会比较棘手,但这已经足够有帮助了。

真挚地,

/iaw

答案1

align-regexp您可以使用 Emacs 自身提供的库中的函数align.el。将光标放在表中,点击C-c .标记环境。现在点击C-u M-x align-regexp RET并附加到&迷你缓冲区中建议的正则表达式(应该看起来像这样\(\s-*\)&),点击RET2 次,最后y重复该过程。这会将您的环境更改为:

\begin{tabular}{lll}
x    & 123456789 & c \\
2345 & 2345      & 2345 \\
\end{tabular}

现在再次标记表格并执行M-x align-regexp RET \\ RET。请注意,您必须输入\\(反斜杠前的空格)才能捕获正确的宏,或者使用\\\\$匹配行尾的 2 个反斜杠。最终结果如下所示:

\begin{tabular}{lll}
  x    & 123456789 & c    \\
  2345 & 2345      & 2345 \\
\end{tabular}

您还可以通过在 init.el 中定义这样的函数并将其分配给 LaTeX 模式下的键绑定来自动化此操作:

(defun iw/tabular-magic ()
  (interactive)
  (unless (string= (LaTeX-current-environment) "document")
    (let ((s (make-marker))
          (e (make-marker)))
      (set-marker s (save-excursion
                      (LaTeX-find-matching-begin)
                      (forward-line)
                      (point)))
      (set-marker e (save-excursion
                      (LaTeX-find-matching-end)
                      (forward-line -1)
                      (end-of-line)
                      (point)))
      ;; Delete the next 2 lines if you don't like indenting and removal
      ;; of whitespaces:
      (LaTeX-fill-environment nil)
      (whitespace-cleanup-region s e)
      (align-regexp s e "\\(\\s-*\\)&" 1 1 t)
      (align-regexp s e "\\(\\s-*\\)\\\\\\\\")
      (set-marker s nil)
      (set-marker e nil))))

;; Choose a key binding for LaTeX mode:
(add-hook 'LaTeX-mode-hook
          (lambda ()
            (local-set-key (kbd "C-c e") #'iw/tabular-magic)))

相关内容