Org-mode导出到Latex - 抑制标签生成

5
我使用org-mode撰写报告,然后导出为LaTeX格式。我有几个不同的.org文件(每个文件对应一章),我将它们作为“无标题”LaTeX导出,然后在主.tex文件中合并它们。这很好用,但生成的.tex文件包含具有冲突编号的标签。例如,a.tex和b.tex都包含\label{sec-1}。
只要我从未实际使用这些引用,那么这不算什么问题,尽管警告使我感到烦恼。是否有任何方法可以关闭这些标签的生成?这应该很简单,但我在文档中找不到任何相关内容。

如果你正在使用GNU make,你可以将过滤器添加到主文件的规则中。语法并不难,sed应该足以完成任务。 - abo-abo
我没有使用make,但是你给了我一个想法,可以使用org-mode钩子在Emacs中替换它们(请参见单独的答案)。谢谢! - John J. Camilleri
4个回答

4
为什么不把您的完整报告写成一个大的Org文件呢?但是,如果您喜欢有多个较小的文件,我建议您将它们作为“包含”在一个Org主文件中,如下所示:
* Chapter 1

#+INCLUDE: "chapter1.org"

* Chapter 2

#+INCLUDE: "chapter2.org"

那么,Org只看到一个文件(那么,我猜你的问题就消失了),而您可以根据自己的意愿进行编辑。

我考虑过这个问题,但主要原因是并不是所有的文件都是真正的org文件,有些是纯LaTeX文件。当然,我可以直接将LaTeX粘贴到org文件中,但这很麻烦,而且我不想担心org-export会以某种方式搞砸它。 - John J. Camilleri
这是我使用的方法。 - heroxbd
1
如果我没记错的话,你也可以包含LaTeX文件(你有额外的可选参数来使用INCLUDE关键字)。 - fniessen

4

我写了一些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)

这似乎可以完成任务,而不会删除我自己的自定义标签。


1
我想知道在过去的七年中Org导出的基本结构是否已经改变。据我所知,org-export-latex-final-hook似乎已经不存在了。 - Keith Pinson

2

截至目前(2021年5月18日),正确的解决方案如下:

(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)

对之前的回答进行了轻微修改。


0

这是我在最近的(2020年)Org-Mode中使用的方法:

(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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接