当 bibitem 尚未定义时更改命令 \cite 的行为

当 bibitem 尚未定义时更改命令 \cite 的行为

当我使用\cite[p. 114]{Smith}并且 bibitemSmith未在参考书目中定义时,会收到警告there were unresolved citations。因此,编译后会出现类似的输出[?, p. 114]。是否可以更改命令的定义,\cite以便在尚未定义 bibitem 时 \cite[p. 114]{Smith} 生成[Smith, p. 114]

我没有使用特定的包。文档大致如下:

\documentclass{article}

\begin{document}

\cite[p. 114]{Smith}

\begin{thebibliography}{99}
\bibitem{John}
\end{thebibliography}

\end{document}

答案1

您可以重新定义内部命令。请注意,如果您加载更改引用命令的软件包(如 natbib、jurabib 等),这可能会中断。下划线需要 T1 编码。

\documentclass{article}
\usepackage[T1]{fontenc}

\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 \detokenize\expandafter{\@citeb}}%
       \G@refundefinedtrue
       \@latex@warning
         {Citation `\@citeb' on page \thepage \space undefined}}%
       {\@cite@ofmt{\csname b@\@citeb\endcsname}}}}{#1}}

\makeatother
\begin{document}

\cite[p. 114]{Smith}

\cite[p. 114]{Smith_blub}

\begin{thebibliography}{99}
\bibitem{John}
\end{thebibliography}
\end{document}

在此处输入图片描述

相关内容