Orgmode导出:如何防止注释行换行


16

目前,我的orgmode(v8.3.4)在导出为LaTeX(也许还有其他格式,但我尚未检查)时,为注释行或一行连续的注释行生成新行。这是不可取的,因为在LaTeX中会创建一个新段落。在撰写本文时,我经常需要在段落中间注释一两行,但又不想将该段落分成两部分。当前,由于orgmode的这种行为,我必须将这些注释行移动到该段落之后,这在我修改文本时可能会造成混淆。

下面是一个最小的示例。orgmode来源是:

First sentence.
# Commented sentence.
Last sentence.

通过orgmode导出为LaTeX的方式(省略前言):

\begin{document}
\tableofcontents

First sentence.

Last sentence.
\end{document}

第一个句子和最后一个句子之间有一个空行,这导致两个段落而不是一个段落。

有什么方法可以阻止这种orgmode行为吗?注释行或注释行块应导出为0字节/字符,甚至不能导出为新行。这是LaTeX在处理注释时的行为。


3
我猜这是组织模式下的错误。可能值得在org-mode邮件列表上进行讨论。
ph0t0nix

1
作为主要的组织模式开发者之一,Nicolas Goaziou确认,这种行为是预期的,不是错误
考沙尔·莫迪

以上两种解决方案均适用# comments,但不幸的是,所有解决方案均不适用于#+ BEGIN_COMMENT注释#+ END_COMMENT在存在该块注释的位置的LaTeX导出中插入了新行...是否有任何简单的方法来解决?编辑(是的,有):根据@John提供的答案,以下内容适用于# comments#+BEGIN_COMMENT块:(defun delete-org-comments(backend)(在(reverse(org-元素映射(org-element-parse-buffer)'注释'身份))做(setf(缓冲子字符串(org-element-property:开始评论)
user2016854

Answers:


4

尝试这样的事情。将此代码块放入文档中,然后运行它。LaTeX将位于Org LATEX Export缓冲区中。

* build :noexport:
#+BEGIN_SRC emacs-lisp
(defun delete-org-comments (backend)
  (loop for comment in (reverse (org-element-map (org-element-parse-buffer)
                    'comment 'identity))
    do
    (setf (buffer-substring (org-element-property :begin comment)
                (org-element-property :end comment))
          "")))

(let ((org-export-before-processing-hook '(delete-org-comments)))
  (switch-to-buffer (org-latex-export-as-latex)))
#+END_SRC

0

在约翰的答案的基础上,这是一个使用org-element-extract-element和的替代函数org-element-interpret-data

(defun delete-org-comments (backend)
  (let ((tree (org-element-parse-buffer)))
    (org-element-map tree 'comment #'org-element-extract-element)
    (erase-buffer)
    (insert (org-element-interpret-data tree))))

org-elementAPI并不是特别明显,但功能强大-您只需要自己探索一下即可。:)当然,对于大型文档,John的速度可能更快,因为它只是修改缓冲区,而不是将树重新解释为字符串。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.