是否可以将?
未找到的 bibtex 键所对应的 变成其他任意字符串或符号?我有一个很大的文档,通过?
查找缺失的书目参考文献的速度很慢。(下面的 MWE,但假设我使用的引用样式不会输出[?]
缺失的参考文献,而只是?
。但我决定让 MWE 保持简单)。
或者,如果这是不可能的,或者这不是明智的,我有兴趣了解原因。
\documentclass{article}
\begin{document}
\section{Immanuel Kant}
\cite{Kint} said it all far better than I could.
\begin{thebibliography}{1}
\bibitem{Kant} Kant, I.\ \textit{My Booky Wook} 2004.
\end{thebibliography}
\end{document}
答案1
您基本上可以使用任何符号来实现这一点,我决定使用一组+
不经常出现的字符并将其存储到命令中,然后在重新定义的\@citex
命令中使用,该命令由 调用\cite
。
该\@citex
命令取自latex.ltx
,即 LaTeX 内核。当然,任何使用不同\cite
定义的包都会破坏这种“黑客行为”。
\documentclass{article}
\newcommand{\myunknownrefsymbol}{++++++}
\makeatletter
\def\@citex[#1]#2{\leavevmode
\let\@citea\@empty
\@cite{\@for\@citeb:=#2\do
{\@citea\def\@citea{,\penalty\@m\ }%
\edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
\if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
\@ifundefined{b@\@citeb}{\hbox{\reset@font\bfseries \myunknownrefsymbol}%
\G@refundefinedtrue
\@latex@warning
{Citation `\@citeb' on page \thepage \space undefined}}%
{\@cite@ofmt{\csname b@\@citeb\endcsname}}}}{#1}}
\makeatother
\begin{document}
\section{Immanuel Kant}
\cite{Kint} said it all far better than I could.
\cite{Kant}
\cite{Kont}
\cite{Einstein}
\begin{thebibliography}{1}
\bibitem{Kant} Kant, I.\ \textit{My Booky Wook} 2004.
\end{thebibliography}
\end{document}