![emacs auctex 表格单元格的垂直对齐方式](https://linux22.com/image/419007/emacs%20auctex%20%E8%A1%A8%E6%A0%BC%E5%8D%95%E5%85%83%E6%A0%BC%E7%9A%84%E5%9E%82%E7%9B%B4%E5%AF%B9%E9%BD%90%E6%96%B9%E5%BC%8F.png)
是否有一个 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)))