我正在使用 org-mode 编写报告,然后将其导出到 LaTeX。我有几个不同的.org
文件(每章一个),我将它们导出为“无头”LaTeX,然后合并到一个主.tex
文件中。这很好用,除了生成的.tex
文件包含数字冲突的标签。例如,两者都a.tex
包含b.tex
。\label{sec-1}
只要我从未真正使用过这些引用,那么我认为这不是什么大问题,尽管这些警告确实让我很恼火。有没有办法关闭这些标签的生成?它应该很简单,但我在文档中找不到任何关于此的内容。
为什么不把你的完整报告写成一个大的 Org 文件呢?
无论如何,如果您更喜欢拥有多个较小的文件,我建议将它们“包含”在一个 Org 主文件中,如下所示:
* Chapter 1
#+INCLUDE: "chapter1.org"
* Chapter 2
#+INCLUDE: "chapter2.org"
这样,Org 只会看到一个文件(然后,我猜您的问题就消失了),而您可以随意编辑它们。
我写了一些 Lisp,它会在导出到 LaTeX 后删除上述标签,如下所示:
(defun remove-orgmode-latex-labels ()
"Remove labels generated by org-mode"
(interactive)
(let ((case-fold-search nil))
(goto-char 1)
(replace-regexp "\\\\label{sec-[0-9][^}]*}" "")
)
)
(add-hook 'org-export-latex-final-hook 'remove-orgmode-latex-labels)
这似乎可以在不删除我自己的自定义标签的情况下完成这项工作。
截至目前(18. 05. 2021)正确的解决方案是:
(defun my-latex-filter-removeOrgAutoLabels (text backend info)
"Org-mode automatically generates labels for headings despite explicit use of `#+LABEL`. This filter forcibly removes all automatically generated org-labels in headings."
(when (org-export-derived-backend-p backend 'latex)
(replace-regexp-in-string "\\\\label{sec:org[a-f0-9]+}\n" "" text)))
(add-to-list 'org-export-filter-headline-functions
'my-latex-filter-removeOrgAutoLabels)
只是对先前答案的轻微修改。
这就是最近(2020)组织模式对我有用的:
(defun rm-org-latex-labels (text backend _info)
"Remove labels auto-generated by `org-mode' export to LaTeX."
(when (eq backend 'latex)
(replace-regexp-in-string "\\\\label{sec:org[a-f0-9]+}\n" "" text)))
(add-to-list #'org-export-filter-headline-functions
#'rm-org-latex-labels)