
Возможный дубликат:
Как заставить LaTeX предупреждать о рисунках, на которые нет ссылок?
В моем документе есть несколько рисунков, для большинства из которых я создал ссылки (используя \ref{}
) сразу после того, как поместил их в документ. Однако у меня было несколько рисунков, на которые я забыл сослаться в документе, оставив некоторые рисунки «висеть» без какой-либо ссылки, что является моей ошибкой и должно быть исправлено.
Итак, мои вопросы:
Есть ли способ заставить latex выдавать предупреждение, если на рисунок никогда не ссылаются?
решение1
Therefcheck
package может быть здесь полезен.
В следующем MWE есть рисунок, на который нет ссылки, поэтому refcheck
в вашем PDF-файле вокруг него будет размещено предупреждение ?
.
\documentclass{article}
\usepackage{refcheck}
\begin{document}
\begin{figure}
\centering
\rule{20pt}{30pt}
\caption{}
\label{fig:myfig}
\end{figure}
\end{document}
Как только вы ссылаетесь на рисунок, он ?
будет удален. Обратите внимание, что этот метод предполагает наличие метки у каждого рисунка.
Обратите внимание, что я продемонстрировал refcheck
это с помощью figure
, но это работает таким же образом длячто-либоимеющий метку ( table
, chapter
, equation
, и т.д.).
решение2
Вот решение, сделанное своими руками:
Добавьте в преамбулу следующее:
\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
и следующее непосредственно перед этим \end{document}
:
\warnunused
Теперь при каждом запуске LaTeX для каждой неиспользуемой метки вы получаете строку
warning: label (your label here) was not referenced.
в стандартном выводе и в файле refwarn.log.
Если вы предпочитаете, чтобы предупреждение отображалось непосредственно в документе, удалите \typeout
(и, возможно, добавьте a \texttt
вокруг #1
и a \\
в конце) в макросе предупреждения.