46

I got a "LaTeX Warning: There were multiply-defined labels", and I know what it means but my document is pretty big and it has various files. So, how can I find the multiply-defined label?

I am using TeXShop in MacOS.

This is the whole warning (I believe):

------------------------------------------------------------------------------
 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.
 )
51

The log message you quoted is a sort of "summary" of earlier, more detailed warnings, telling you exactly which references are undefined/multiply defined. Scroll up through the log file and you should find more detailed messages that look like the one below:

LaTeX Warning: Label `foo' multiply defined.
  • 8
    Using grep "multiply defined" master.log worked like a charm for me. Thanks! – David L Dec 12 '13 at 19:26
  • this doesn't occur if it is a label in the TOC (or doesn't for me) – Ian Turton Mar 19 '14 at 15:21
20

There are ways to find duplicate labels in complex documents that have not been mentioned in the other answers. To show how they work I will use a simple (non-complex) test case:

\documentclass{article}

\begin{document}

\section{Section 1}
\label{foo}

\section{Section 2}
\label{foo}

\end{document}

RefTeX

RefTeX can find duplicate labels with the function reftex-find-duplicate-labels which produce a list of all duplicate labels in the document. To use it simply do M-x reftex-find-duplicate-labels. When doing this on the file with the test case it opens a new buffer with the following content:

                MULTIPLE LABELS IN CURRENT DOCUMENT:
 Move point to label and type `r' to run a query-replace on the label
 and its references.  Type `q' to exit this buffer.

 LABEL               FILE
 -------------------------------------------------------------
foo
    ~/test/test.tex
    ~/test/test.tex

Perl

As noted by Walt Mankowski one can use a Perl one-liner to find duplicate labels. The one-liner is as follows:

perl -nE 'say $1 if /(\\label[^}]*})/' *.tex | sort | uniq -c | sort -n

To use it open a terminal and cd to the directory of the document you want to check for duplicate labels in and then execute the one-liner. The output for the test case is as follows:

      2 \label{foo}

Relatedly you may also want to check for unused labels.

  • This RefTex advice is worth gold. – YuppieNetworking Oct 16 '13 at 21:58
  • the perl one-liner just saved my life :-) – Ian Turton Mar 19 '14 at 15:20
  • My problem is that my work is scattered in several directories. Is there a version of this one-liner that scans a directory? I know nothing of Perl. – piffy Jan 11 '17 at 17:09
  • I'd like to extend that oneliner for tex documents which include or input tex files from subdirectories: perl -nE 'say $1 if /(\\label[^}]*})/' $(find . -name '*.tex' | sed ':a;N;$!ba;s/\n/ /g') | sort | uniq -c | sort -n See this question on using SED for replacing newlines. – Till Kolditz Mar 15 '18 at 18:48
14

Besides looking into the .log file, the showlabels package could help you if you would like to check the labels in the output.

To check the input, you could open a terminal and grep for labels:

grep label filename.tex

This gives you a compact overview.

  • Solved by deleting my .aux file, but this answer deserves a +1. – gsamaras Mar 2 '15 at 23:14
2

Extension: I just finished a debug tracking down multiply-defined label but only one instance of creating that label. Turns out if you have a table break across pages and a first head is not defined, multiple instances of the label occur.

\begin{longtable}{c}
\caption{my text \label{tab:mine}}\\
Title\\
\endfirsthead
\caption{my text, continued}\\
Title\\
\endhead
blah\\
.
.
.
blah\\
\end{longtable}
  • This will be reported in the log file just as in Seamus' answer. – Andrew Swann Apr 12 '17 at 15:09
  • @AndrewSwann The label itself was reported as being multiply defined, true. But it does not say why in the log file, especially when there is only one instance of \label in the tex file. This answer explains why which is how I got rid of it. +1 to @KC7HP. – Paul Aug 26 '17 at 20:47
  • Your code in a minimal document does not produce such a warning (even with longer table contents that spread over several pages). Yes, you should read the longtable documentation carefully before placing the \label command. – Andrew Swann Aug 27 '17 at 9:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.