我有一篇很长的文章(约 20 页),其中有很多方程式都已编号等。为了进行良好的清理,我想取消未使用的方程式的编号。我知道我可以隐藏未使用的号码,但我想清理一下,不依赖 的功能mathtools
。因此,是否可以以某种方式显示未使用的标签列表?
在以下 MWE 中,它应该显示(在日志中、在 bash 中,无论在何处)boo
未使用的内容:
\documentclass{article}
\begin{document}
\section{BLA}\label{bla}
\section{BOO}\label{boo}
In Section~\ref{bla}.
\end{document}
答案1
使用refcheck
包裹:
\documentclass{article}
\usepackage{refcheck}
\begin{document}
\section{BLA}\label{bla}
\section{BOO}\label{boo}
In Section~\ref{bla}.
\end{document}
未使用的\label
s 也标记在 中.log
。上述 MWE 输出
Package refcheck Warning: Unused label `boo' on input line 5.
在 中.log
。可以使用选项打开/关闭输出中的可视队列[norefs]
。它也适用于\cite
s(使用附带的showcites
/ nocites
boolean 包选项)。
答案2
自制版本。它重新定义\label
,\ref
然后\unusedlabels
在最后使用,以查看哪些标签未使用。完成此过程后,您可以删除重新定义。
\label
被重新定义为所有标签组成一个以空格分隔的连接字符串。
\ref
被重新定义为逐项检查连接列表,并将项与参数进行比较\ref
,然后继续重建连接列表。如果比较结果为真,则不执行任何操作,从而从列表中删除该项。如果比较结果为假,则将该项目重新添加到重建的列表中。
最后列表上剩下的任何东西都是未使用的。
\documentclass{article}
\usepackage{etoolbox}
\let\svlabel\label
\let\svref\ref
\def\unusedlabels{}
\renewcommand\label[1]{\svlabel{#1}\global\edef\unusedlabels{\unusedlabels$<$#1$>$ }}
\renewcommand\ref[1]{\svref{#1}%
\edef\teststring{$<$#1$>$}%
\edef\tmp{\unusedlabels}%
\def\unusedlabels{}%
\expandafter\refhelper\tmp\relax%
}
\def\refhelper#1 #2\relax{%
\edef\expandcase{#1}%
\ifdefstrequal{\teststring}{\expandcase}{}{\edef\unusedlabels{\unusedlabels#1 }}%
\if\relax#2\relax\else\refhelper#2\relax\fi
}
\begin{document}
\section{BLA}\label{bla}
\begin{equation}
\label{eq:first}
y=x
\end{equation}
\section{BOO}\label{boo}
\begin{equation}
\label{eq:second}
y=x^2
\end{equation}
In Section~\ref{bla}, I use equation \ref{eq:first}.
Unused labels are \unusedlabels
\end{document}