将警告(“未使用的标签”)转换为错误

将警告(“未使用的标签”)转换为错误

下面的例子是如果我没有引用标签则给出错误,生成一个警告:

\documentclass{article}
\usepackage{amsmath}
\usepackage{refcheck}

\begin{document}
  \begin{figure}
    % ...
    \caption{A nice picture of my dog}\label{fig:dog}
  \end{figure}
  % As seen in figure~\ref{fig:dog}
\end{document}

警告如下:

Package refcheck Warning: Unused label `fig:dog' on input line 8.

我想将该警告(并且只将该警告,而不是其他警告)转换为错误。我更愿意在 LaTeX 内部执行此操作,而不是通过解析日志的外部 bash 脚本。

答案1

这似乎是一个奇怪的错误,标记任何可能被引用的东西都是正常的,但无论如何

\documentclass{article}
\usepackage{amsmath}
\usepackage{refcheck}

\makeatletter
\let\old@warning@rc@\@warning@rc@
\def\@warning@rc@#1{\x@warning@rc@#1\relax}

\AtEndDocument{%
\immediate\write\@auxout{\gdef\string\rc@unlab{Unused label}}}

\def\x@warning@rc@#1 #2 #3\relax{%
\def\rc@tmp{#1 #2}%
\ifx\rc@tmp\rc@unlab
  \PackageError{refcheck}{#1 #2 #3}\@ehc
\else
 \old@warning@rc@{#1 #2 #3}%
\fi}

\begin{document}
  \begin{figure}
    % ...
    \caption{A nice picture of my dog}\label{fig:dog}
  \end{figure}
  % As seen in figure~\ref{fig:dog}
\end{document}

这将检查警告的开始是否正确Unused label,如果正确,则产生错误。Unused label通过将定义写入辅助文件来间接定义保存字符串的测试宏,因此第一次将其添加到文档时不会定义它,这样您就有机会在第二次运行时使交叉引用稳定下来。第一次您会收到警告,正如 refcheck 所预期的那样。

相关内容