使损坏的 \cleveref 引用更加明显

使损坏的 \cleveref 引用更加明显

使损坏的引用更加明显,我问如何让LaTex的正常??和 [] 标记表示断开的引用,而是呈现为一些超级烦人的彩色文本,以便在浏览较长的book类文档时,我可以立即知道需要修复什么。

我已经被告知如何对损坏的\refs 进行此操作,但我提供的 MWE 是最低限度:我也想知道如何以类似的方式标记损坏的\Crefs(可通过cleveref包获得)。

如果有人对我的意思有任何疑问,这里有一个 MWE。

 \documentclass{article}
 \usepackage{amsthm,hyperref,cleveref}
 \bibliographystyle{amsalpha}
 \newtheorem{theorem}{Theorem}
 \begin{document}
 \begin{theorem}\label{catfish}
 \end{theorem}
 Theorem \ref{catfish} implies the truth of \Cref{god}.
 \bibliography{bibshort}{}
 \end{document}.

答案1

假设你想要全部用户cleveref级宏以这种方式运行,而不是单独地\Cref,我们可以使用与原始问题类似的方法,替换内部cleveref宏名称和搜索代码:

\documentclass{article}
\usepackage{amsthm,etoolbox,xcolor,hyperref,cleveref}

\makeatletter
\patchcmd{\@@setcref}         {??}{\color{red} undefined Label}{}{}
\patchcmd{\@@setcref}         {??}{\color{red} undefined Label}{}{}
\patchcmd{\@@setcrefrange}    {??}{\color{red} undefined Label}{}{}
\patchcmd{\@@setcrefrange}    {??}{\color{red} undefined Label}{}{}
\patchcmd{\@@setcrefrange}    {??}{\color{red} undefined Label}{}{}
\patchcmd{\@@setcrefrange}    {??}{\color{red} undefined Label}{}{}
\patchcmd{\@@setcrefrange}    {??}{\color{red} undefined Label}{}{}
\patchcmd{\@@setcrefrange}    {??}{\color{red} undefined Label}{}{}
\patchcmd{\@@setnamecref}     {??}{\color{red} undefined Label}{}{}
\patchcmd{\@@setnamecref}     {??}{\color{red} undefined Label}{}{}
\patchcmd{\@@setcpageref}     {??}{\color{red} undefined Label}{}{}
\patchcmd{\@@setcpageref}     {??}{\color{red} undefined Label}{}{}
\patchcmd{\@@setcpagerefrange}{??}{\color{red} undefined Label}{}{}
\patchcmd{\@@setcpagerefrange}{??}{\color{red} undefined Label}{}{}
\patchcmd{\@@setcpagerefrange}{??}{\color{red} undefined Label}{}{}
\patchcmd{\@@setcpagerefrange}{??}{\color{red} undefined Label}{}{}
\patchcmd{\@@setcpagerefrange}{??}{\color{red} undefined Label}{}{}
\patchcmd{\@@cref}            {??}{\color{red} undefined Label}{}{}
\makeatother

\bibliographystyle{amsalpha}
\newtheorem{theorem}{Theorem}
\begin{document}
\section{Section}\label{god}
\subsection{Subsection}\label{dog}
\subsection{Subsection 2}\label{dog2}
\begin{theorem}\label{catfish}
\end{theorem}
\begin{equation}\label{math}
\end{equation}
\Cref{catfish} implies the truth of \cref{god} and \cref{dog}.

Also \cref{catfish,dog,god,math}. \Crefrange{dog}{dog2} with \crefrange{dog}{dog2}.
\bibliography{bibshort}
\end{document}

这里还有更多补丁需要执行,因为它cleveref有许多私有的辅助宏,用于不同的面向用户的命令。此外,仅执行替换第一次在命令中找到了搜索文本,因此如果搜索文本在一个命令中出现多次,我们必须重复修补。

第一次运行的输出:

在此处输入图片描述

第二次运行的输出(已解析的引用):

在此处输入图片描述

补丁文本(此处为undefined Label)和颜色red可以根据您的喜好进行自定义,并且您可以使用任何其他格式命令来更改其排版方式。在被修补的宏中,第二个参数(#2)是标签,因此您可以#2在补丁替换文本中的任何位置使用它来显示未定义的特定标签。例如:

\patchcmd{\@@setcref}{??}{\color{red} undefd label (#2)}{}{} % typ. (repeat for all patches)

当标签未解析时,将在文本中以红色打印“未定义的标签(鲶鱼)”。


cleveref注意:在 的后续版本中,内部宏名称已从原始答案时的当前版本更改。我已更新答案以匹配新名称,但如果您需要使用 的旧版本cleveref,请查看此帖子的编辑历史记录。

相关内容