在乳胶环境中填充组织模式的段落

时间:2014-11-10 17:22:52

标签: emacs latex elisp org-mode

我开始使用org-mode编写数学论文,因此我大量使用了乳胶环境,例如prooftheoremlemma等。例如,我经常写< / p>

\begin{proof}

a very long proof follows

\end{proof}

问题是在组织模式下fill-paragraph(或M-q)在乳胶环境中不起作用。这使我的生活变得复杂,因为一些证明可能很长,在编译为pdf时达到几页,我无法在org-mode中有效地格式化它们。我无法在手册中找到有关控制段落填充的选项的任何信息。在这种情况下是否可以启用fill-paragraph

2 个答案:

答案 0 :(得分:1)

我有一个命令可以绑定到Org中的M-q:

(defun leuven-good-old-fill-paragraph ()
  (interactive)
  (let ((fill-paragraph-function nil)
        (adaptive-fill-function nil))
    (fill-paragraph)))

虽然,我不明白为什么默认情况下没有启用它。也许是Org ML的问题?

答案 1 :(得分:0)

如果使用组织块而不是乳胶环境,问题就会消失:

#+BEGIN_proof 
...
#+END_proof 

这将导出为\begin{proof}...\end{proof}。它还允许您在块内使用org语法,并填充段落作品。

如果您不想这样做,可以尝试visual-line-mode作为解决方法。

编辑:更改填充段落行为

如果你想填充段落在乳胶环境中工作,你必须深入挖掘一下。填充由org-fill-paragraph中的org.el完成,此功能默认忽略乳胶环境。要更改此设置,请转到功能的末尾并替换

  ;; Ignore every other element.
  (otherwise t)

  (latex-environment nil) ;; use default fill-paragraph
  ;; Ignore every other element.
  (otherwise t)

如果您不想更改组织来源,可以改用建议,例如

(defun org-fill-paragraph--latex-environment (&rest args)
  "Use default fill-paragraph in latex environments."
  (not (eql (org-element-type (org-element-context)) 'latex-environment)))

(advice-add 'org-fill-paragraph :before-while #'org-fill-paragraph--latex-environment)