警告:存在多重定义的标签

警告:存在多重定义的标签

我收到一条“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}

相关内容