我收到一条“LaTeX 警告:存在多次定义的标签”,我知道这意味着什么,但我的文档很大,并且包含多个文件。那么,我该如何找到多次定义的标签呢?
我在 MacOS 中使用 TeXShop。
这是整个警告(我相信):
------------------------------------------------------------------------------
Bibliography
------------------------------------------------------------------------------
(./Thesis.bbl [29] [30] [31] [32] [33] [34] [35]) [36] (./Thesis.aux)
LaTeX Warning: There were undefined references.
LaTeX Warning: There were multiply-defined labels.
)
答案1
您引用的日志消息是之前更详细的警告的“摘要”,准确地告诉您哪些引用未定义/多次定义。向上滚动日志文件,您应该会找到更详细的消息,如下所示:
LaTeX Warning: Label `foo' multiply defined.
答案2
有一些方法可以在复杂文档中查找重复标签,而其他答案中没有提到这些方法。为了展示它们的工作原理,我将使用一个简单的(非复杂的)测试用例:
\documentclass{article}
\begin{document}
\section{Section 1}
\label{foo}
\section{Section 2}
\label{foo}
\end{document}
参考TeX
参考TeX可以使用函数查找重复的标签reftex-find-duplicate-labels
它会生成文档中所有重复标签的列表。要使用它,只需执行M-x reftex-find-duplicate-labels
。在包含测试用例的文件上执行此操作时,它会打开一个包含以下内容的新缓冲区:
当前文档中的多个标签: 将点移动到标签并输入“r”以在标签上运行查询替换 及其引用。键入“q”退出此缓冲区。 标签文件 ------------------------------------------------------------- 富 〜/测试/测试.tex 〜/测试/测试.tex
Perl
正如 Walt Mankowski 所指出的,可以使用 Perl 单行代码来查找重复的标签。代码如下:
perl -nE'如果/(\\label[^}]*})/则说$1'*.tex|sort|uniq-c|sort-n
要使用它,请打开终端并cd
转到要检查重复标签的文档的目录,然后执行一行代码。测试用例的输出如下:
2 \标签{foo}
您可能还想检查未使用的标签。
答案3
除了查看 .log 文件之外,显示标签如果您想检查输出中的标签,包可以帮助您。
要检查输入,您可以打开终端并 grep 标签:
grep label filename.tex
这为您提供了一个简洁的概览。
答案4
扩展:我刚刚完成了一个调试,跟踪了多次定义的标签,但只有一个创建该标签的实例。事实证明,如果你有一个跨页的表格分隔符和一个第一个头未定义,则会出现多个该标签的实例。
\begin{longtable}{c}
\caption{my text \label{tab:mine}}\\
Title\\
\endfirsthead
\caption{my text, continued}\\
Title\\
\endhead
blah\\
.
.
.
blah\\
\end{longtable}