Emacs:Aquamacs 更新后,Auto-Fill-Mode 的 Alt-q 在 LaTeX 中的数学定界符处换行

Emacs: After Aquamacs update, Auto-Fill-Mode's Alt-q breaks lines at maths delimiter in LaTeX

我更新 Aquamacs 后,在编辑 LaTeX 文档时使用 Alt-q(在自动填充次要模式下)填充段落会导致每行在第一次出现 LaTeX 数学结束分隔符时被断开, \)。 (好吧,几乎!请参阅下面的示例以了解一个例外。)

版本信息:Aquamacs 3.2 GNU Emacs 24.4.51.2.

问题

如何告诉 Aquamacs/Emacs/Auto-Fill 模式 而不是 在它看到的第一个 \) 处换行,而是实际填写段落像更新前一样?

重现此行为的步骤

  1. Help -> Diagnose and report bug -> Start Aquamacs without customizations 获得 "pristine" Aquamacs window。
  2. 打开名为 testemacs.tex 的文件并粘贴 Lorem Ipsum 文本,两次以形成两个段落。
  3. second 段落的随机位置添加由 LaTeX 分隔符 \(\) 分隔的小数学表达式。保持第一段不变。
  4. 键入 Alt-x auto-fill-mode 以启用自动填充模式。
  5. 转到每个段落并键入 Alt-q 以调用 fill-paragraph 函数。
  6. 观察差异!请参阅下面的屏幕截图:

如您所见,除了最后一行,fill-paragraph 在它看到的第一个结束分隔符 \) 处换行。这使得段落看起来非常难看,并且破坏了填充段落的全部目的。我怎样才能摆脱这种行为?

模式

运行模式请见下方截图:

这是 AUCTeX 的最新变化。您可以自定义变量 LaTeX-fill-break-at-separators。默认情况下是

 (\\( \\) \\[ \\])

根据文档,这意味着如果整个表达式在填充时不适合行,则这些分隔符之前或之后的行将被断开。但是,行为并不完全如此,如您所见,它会在结束定界符 \)\] 之后无条件地换行。 从此列表中删除内联数学开关 \(\) 可恢复旧行为。我还发现只需从此列表中删除 \) 即可获得可接受的结果,请参见下面的示例 2。在自定义界面中取消勾选 "Closing Inline Math Switches"

下面是不同设置的具体演示。

  1. 默认值为LaTeX-fill-break-at-separators,相当于

    (custom-set-variables
     '(LaTeX-fill-break-at-separators (quote (\\( \\) \\[ \\]))))
    

在每个 \):

后给出一个换行符
Let \( \gamma\colon \BbbR \times [0,T) \to \BbbR^2 \)
be a family of regular curves solving~\eqref{eq:c-flow}, with each
curve \( \gamma^t \)
of period~\( \Psi \)
and with \( \gamma^0 \)
strictly convex. Let \( \kappa_0(t) \)
be the minimum value of \( \kappa \)
on \( \gamma^t \).
Note that \( \kappa_0(t) \)
is achieved at some point \( (\psi,t) \),
so in particular \( \kappa_0(0) > 0 \).
  1. 没有内联数学关闭

    (custom-set-variables
     '(LaTeX-fill-break-at-separators (quote (\\( \\[ \\]))))
    

将数学组保持在一行上,但允许在它们之后输入文本:

Let \( \gamma\colon \BbbR \times [0,T) \to \BbbR^2 \) be a family of
regular curves solving~\eqref{eq:c-flow}, with each curve
\( \gamma^t \) of period~\( \Psi \) and with \( \gamma^0 \) strictly
convex. Let \( \kappa_0(t) \) be the minimum value of \( \kappa \) on
\( \gamma^t \).  Note that \( \kappa_0(t) \) is achieved at some point
\( (\psi,t) \), so in particular \( \kappa_0(0) > 0 \).
  1. 没有任何内联数学定界符

    (custom-set-variables
     '(LaTeX-fill-break-at-separators (quote (\\[ \\]))))
    

数学组可以按行拆分:

Let \( \gamma\colon \BbbR \times [0,T) \to \BbbR^2 \) be a family of
regular curves solving~\eqref{eq:c-flow}, with each curve \( \gamma^t
\) of period~\( \Psi \) and with \( \gamma^0 \) strictly convex. Let
\( \kappa_0(t) \) be the minimum value of \( \kappa \) on \( \gamma^t
\).  Note that \( \kappa_0(t) \) is achieved at some point \( (\psi,t)
\), so in particular \( \kappa_0(0) > 0 \).

我还会注意到 Aquamacs 已损坏:它使用来自 fill-adapt 的函数覆盖了默认值 fill-paragraph(在 GNU Emacs 中不带参数),该函数只带一个参数。

这基本上破坏了所有使用 fill-paragraph 的包。