Gibt es eine Möglichkeit, LaTeX zu zwingen, eine Warnung auszugeben, wenn auf eine Abbildung nie verwiesen wird?

Gibt es eine Möglichkeit, LaTeX zu zwingen, eine Warnung auszugeben, wenn auf eine Abbildung nie verwiesen wird?

Mögliches Duplikat:
Wie kann ich LaTeX dazu bringen, vor nicht referenzierten Abbildungen zu warnen?

In meinem Dokument habe ich mehrere Abbildungen, für die ich die meisten sofort nach dem Einfügen in das Dokument referenziert habe (mit \ref{}). Allerdings habe ich bei einigen Abbildungen vergessen, im Dokument zu referenzieren, sodass einige Abbildungen ohne Quellenangabe „hängen“ blieben. Das ist ein Fehler meinerseits und muss korrigiert werden.

Meine Frage lautet also:

Gibt es eine Möglichkeit, Latex zu zwingen, eine Warnung auszugeben, wenn auf eine Abbildung nie verwiesen wird?

Antwort1

DerrefcheckPaket könnte hier nützlich sein.

Das folgende MWE enthält eine Abbildung ohne Referenz. Daher refcheckwird in Ihrem PDF eine Warnung ?darum herum eingefügt.

Bildbeschreibung hier eingeben

\documentclass{article}
\usepackage{refcheck}

\begin{document}

\begin{figure}
 \centering
 \rule{20pt}{30pt}
 \caption{}
 \label{fig:myfig}
\end{figure}
\end{document}

Sobald Sie auf die Abbildung verweisen, ?wird sie entfernt. Beachten Sie, dass diese Methode darauf angewiesen ist, dass jede Abbildung eine Beschriftung hat.

Beachten Sie, dass ich es refcheckmit einem demonstriert habe figure, aber es funktioniert genauso fürirgendetwasdas eine Bezeichnung ( table, chapter, equation, usw.) hat.

Antwort2

Hier ist eine handgemachte Lösung:

Fügen Sie Ihrer Präambel Folgendes hinzu:

\makeatletter

\let\LaTeX@original@label\label
\let\LaTeX@original@ref\ref

\newcommand{\warnunused}{}

\renewcommand{\label}[1]{%
  \expandafter\global\expandafter\def\csname warning@#1\endcsname{%
    \typeout{warning: label #1 was not referenced.}}%
  \g@addto@macro\warnunused{%
    \csname warning@#1\endcsname}
  \LaTeX@original@label{#1}}

\renewcommand{\ref}[1]{%
  \expandafter\global\expandafter\def\csname warning@#1\endcsname{}
  \LaTeX@original@ref{#1}}

\makeatother

und direkt davor folgendes \end{document}:

\warnunused

Jetzt erhalten Sie bei jedem LaTeX-Lauf für jedes nicht referenzierte Label eine Zeile

warning: label (your label here) was not referenced.

auf Ihrer Standardausgabe und in Ihrem refwarn.log.

Wenn Sie die Warnung stattdessen lieber direkt in Ihrem Dokument haben möchten, entfernen Sie das \typeout(und fügen Sie ggf. ein \textttum das #1und ein \\am Ende hinzu) im Warnmakro.

verwandte Informationen