我想在编辑方程式时禁用自动填充模式

我想在编辑方程式时禁用自动填充模式

如何在编辑方程式时禁用自动填充模式?

我一般喜欢自动填充模式,但我想在特定情况下将其关闭,
例如在 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*”放在那里,但您可以根据需要添加更多环境。

相关内容