如何在编辑方程式时禁用自动填充模式?
我一般喜欢自动填充模式,但我想在特定情况下将其关闭,
例如在 a \begin{equation}
and\end{equation}
或\begin{equation*}
and\end{equation*}
或\begin{eqnarray}
and\end{eqnarray*}
等之间。
我搜索了一下,发现https://stackoverflow.com/questions/2008849/suppress-emacs-auto-fill-in-a-selected-region看起来相关,但我无法让它工作。
具体来说,我尝试将%%% BEGIN NO FILL
和更改%%% END NO FILL
为,\begin{eq
但\end{eq
无济于事。
提前致谢!
答案1
如果您使用,这是一个解决方案奥科特克斯(我强烈推荐)。将以下代码放入您的 .emacs 文件中:
(defvar my-LaTeX-no-autofill-environments
'("equation" "equation*")
"A list of LaTeX environment names in which `auto-fill-mode' should be inhibited.")
(defun my-LaTeX-auto-fill-function ()
"This function checks whether point is currently inside one of
the LaTeX environments listed in
`my-LaTeX-no-autofill-environments'. If so, it inhibits automatic
filling of the current paragraph."
(let ((do-auto-fill t)
(current-environment "")
(level 0))
(while (and do-auto-fill (not (string= current-environment "document")))
(setq level (1+ level)
current-environment (LaTeX-current-environment level)
do-auto-fill (not (member current-environment my-LaTeX-no-autofill-environments))))
(when do-auto-fill
(do-auto-fill))))
(defun my-LaTeX-setup-auto-fill ()
"This function turns on auto-fill-mode and sets the function
used to fill a paragraph to `my-LaTeX-auto-fill-function'."
(auto-fill-mode)
(setq auto-fill-function 'my-LaTeX-auto-fill-function))
(add-hook 'LaTeX-mode-hook 'my-LaTeX-setup-auto-fill)
让我们从下往上了解一下它的作用。“add-hook”函数注册了一个回调,每次打开 .tex 文件时都会调用该回调。hook 变量LaTeX-mode-hook
由 AUCTeX 提供。
回调就是my-LaTeX-setup-auto-fill
我们上面定义的函数,它打开auto-fill-mode
后会告诉它使用函数my-LaTeX-auto-fill-function
来真正执行自动填充。
为了使此构造正常工作,重要的是不要关闭自动填充模式然后再打开,否则将无法my-LaTeX-auto-fill-function
使用。如果您已经有一个在编辑 .tex 文件时自动打开的机制auto-fill-mode
,您可能应该将其关闭,并让上述函数为您打开它。
的定义my-LaTeX-auto-fill-function
可在上面找到。它的基本作用是:检查您当前是否处于“方程式”环境中,如果是,则不执行任何操作。如果您不在“方程式”环境中,则会自动填充。
最后,顶部的变量定义了哪些 LaTeX 环境应禁止自动填充。我目前将“equation”和“equation*”放在那里,但您可以根据需要添加更多环境。