Existe uma maneira de forçar o LaTeX a emitir um aviso se uma figura nunca for referenciada?

Existe uma maneira de forçar o LaTeX a emitir um aviso se uma figura nunca for referenciada?

Possível duplicata:
Como posso fazer com que o LaTeX avise sobre figuras não referenciadas?

No meu documento, tenho várias figuras, a maioria das quais criei referências para (usando \ref{}) imediatamente após colocá-las no documento. Porém, tive algumas figuras que esqueci de referenciar no documento, deixando algumas figuras “penduradas” sem qualquer citação, o que é um erro da minha parte e deve ser corrigido.

Então, minhas perguntas são:

Existe uma maneira de forçar o látex a emitir um aviso se uma figura nunca for referenciada?

Responder1

Orefcheckpacote pode ser útil aqui.

O MWE a seguir possui uma figura que não é referenciada, portanto refcheckcoloca um aviso em seu pdf ao ?seu redor.

insira a descrição da imagem aqui

\documentclass{article}
\usepackage{refcheck}

\begin{document}

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

Assim que você fizer referência à figura, o ?será removido. Observe que este método depende de cada figura ter um rótulo.

Observe que demonstrei refcheckcom um figure, mas funciona da mesma maneira paraqualquer coisaque tem um rótulo ( table, chapter, equation, etc).

Responder2

Aqui está uma solução feita à mão:

Adicione o seguinte ao seu preâmbulo:

\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

e o seguinte diretamente antes \end{document}:

\warnunused

Agora, em cada execução do LaTeX, para cada rótulo não referenciado você obtém uma linha

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

na sua saída padrão e no seu refwarn.log.

Se você preferir o aviso diretamente em seu documento, remova \typeout(e possivelmente adicione um \textttao redor #1e um \\no final) na macro de aviso.

informação relacionada