如何替换默认缺失的参考符号

如何替换默认缺失的参考符号

是否可以将?未找到的 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}

相关内容