Emacs LaTeX 格式化段落

Emacs LaTeX 格式化段落

我喜欢 Emacs 中 Auctex/LaTeX 的“格式化段落”功能,但它似乎会移动标记命令。有什么方法可以格式化缓冲区但只格式化其纯文本部分,以便最终像填充段落或格式化区域命令一样,但不触及 LaTeX 命令?

只是为了更清楚一点,如果命令在换行符上,我希望它们不会被弄乱,因此段落内的命令texbf可以移动。

答案1

我在 Emacs 中编写了一个快速实现该功能的 hack。其思路如下:首先,找到第一个“硬”段落分隔符(即两个换行符)。我相信应该有更好的方法来识别段落,也许通过其他 elisp 函数,但我还没有研究过。该分隔符将限制段落填充的应用范围(fill-paragraph永远不会超出硬段落)。然后,我们将任何“起始”TeX 命令(\换行符后面的命令)转换为其自己的段落的起始。这很丑陋,因为它会更改文本,为以新行开头的 TeX 命令插入换行符。

但请注意有时,获得正确的行为是不可能的。例如,如果你保持礼仪,你的台词长度大约为 75 个字符将以换行符结束。\textbf例如, 可能偶然在换行符之后开始,但您显然希望它在当前段落内。

这是代码。您可以在 TeX/LaTeX 模式下将其绑定到 Mq:

(defun latex-fill-paragraph ()
  (interactive)
  (save-excursion
    ;; Insert a newline before a TeX command starting a line to avoid
    ;; fill-paragraph to include it in the current paragraph
    (let ((end-point
           (or
            (save-excursion
              (re-search-forward "\n\n" (point-max) t))
            (point-max))))
      (replace-regexp "\n\\\\" "\n\n\\\\" t (point) (- end-point 2))))
  (save-excursion
    (fill-paragraph)))

相关内容