如何定义新的 cite 命令(就像 \nocite 一样)但打印缺少的引用条目?

如何定义新的 cite 命令(就像 \nocite 一样)但打印缺少的引用条目?

我想要一个引用\mycite命令

  1. \mycite{exist-entry}就像nocite{exist-entry}
  2. \mycite{not-exist-entry}将显示不存在条目在文档中

但我不知道如何定义这样的命令。

答案1

.log即使使用了,您已经在文件中获得了有关缺少引用的良好警告\nocite,但这里有一个定义,它具有与输入键存在时几乎相同的属性,\nocite并且如果不存在则以粗体打印该键。

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[backend=biber, style=authoryear]{biblatex}

\makeatletter
\newcommand*{\mynocite}[1]{%
  \blx@xsanitizeafter{\forcsvlist\mynocite@do}{#1}}
  
\newcommand*{\mynocite@do}[1]{%
  \nocite{#1}%
  \blx@ifdata{#1}
    {}
    {\abx@missing@entry{#1}}}
\makeatother

\addbibresource{biblatex-examples.bib}

\begin{document}
\mynocite{sigfridsson}

\mynocite{does-not-exist}

\printbibliography
\end{document}

不存在

答案2

以下内容将取代在引用未定义的 bib 标签时使用标签文本\cite

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

作为一种不太具侵入性的方法,您可以随时采取一些措施,例如grep 'Citation.*undefined' yourdocument.log获取文档中未定义的引用列表。

相关内容