![使损坏的 \cleveref 引用更加明显](https://linux22.com/image/304478/%E4%BD%BF%E6%8D%9F%E5%9D%8F%E7%9A%84%20%5Ccleveref%20%E5%BC%95%E7%94%A8%E6%9B%B4%E5%8A%A0%E6%98%8E%E6%98%BE.png)
在使损坏的引用更加明显,我问如何让LaTex的正常??和 [?] 标记表示断开的引用,而是呈现为一些超级烦人的彩色文本,以便在浏览较长的book
类文档时,我可以立即知道需要修复什么。
我已经被告知如何对损坏的\ref
s 进行此操作,但我提供的 MWE 是也最低限度:我也想知道如何以类似的方式标记损坏的\Cref
s(可通过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
,请查看此帖子的编辑历史记录。