Есть ли способ заставить LaTeX выдавать предупреждение, если на рисунок никогда не ссылаются?

Есть ли способ заставить LaTeX выдавать предупреждение, если на рисунок никогда не ссылаются?

Возможный дубликат:
Как заставить LaTeX предупреждать о рисунках, на которые нет ссылок?

В моем документе есть несколько рисунков, для большинства из которых я создал ссылки (используя \ref{}) сразу после того, как поместил их в документ. Однако у меня было несколько рисунков, на которые я забыл сослаться в документе, оставив некоторые рисунки «висеть» без какой-либо ссылки, что является моей ошибкой и должно быть исправлено.

Итак, мои вопросы:

Есть ли способ заставить latex выдавать предупреждение, если на рисунок никогда не ссылаются?

решение1

Therefcheckpackage может быть здесь полезен.

В следующем 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 \\в конце) в макросе предупреждения.

Связанный контент