下面的例子是如果我没有引用标签则给出错误,生成一个警告:
\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 所预期的那样。