使用 enotez 识别真正的 biblatex 警告

使用 enotez 识别真正的 biblatex 警告

正如评论中提到的Biblatex,引用尾注,ibid 跟踪器被丢弃,接下来 biblatex 就会发出“狼来了”的警报,警告说有些引用没有定义。

\documentclass{scrartcl} 
\usepackage{enotez} 
\usepackage[style=authoryear-icomp,autocite=footnote,backend=biber]{biblatex} 
\addbibresource{biblatex-examples.bib} 
\let\footnote\endnote% 

\begin{document} 
Lorem\footcite{malinowski} 
\printendnotes 
\printbibliography 
\end{document}

我如何辨别真正的警告?

我考虑过不运行\let\footnote\endnote,检查没有 biblatex 警告,然后再改回来。我担心改回来后可能会pdflatex多次运行不充分。

一个合理的解决方案是重新定义行为,biblatex以便将未定义的引用打印为??(或其他一些独特的词),我可以在pdf中搜索。

答案1

此问题已在 3.11 版中得到解决biblatex。请参阅https://github.com/plk/biblatex/issues/707

这里的问题是enotez将尾注的内容写入外部文件。通常,biblatex引用命令会将条目键去标记化,但这发生在早期步骤中,当尾注写入文件时,其结果已经扩展。从文件中读取时,引用键不会再次去标记化。这会导致重新运行警告检查给出不正确的结果,因为标记具有错误的类别代码。解决方案是更积极地对键去标记化,以便从文件中读回时它们也会被去标记化enotez


如果你正在使用旧版本,biblatex并且希望能够在文档中搜索真正未定义的引用键,你可以尝试

\makeatletter
\def\blx@citeadd#1{%
  \ifcsdef{blx@keyalias@\the\c@refsection @#1}
    {\edef\blx@realkey{\csuse{blx@keyalias@\the\c@refsection @#1}}}
    {\def\blx@realkey{#1}}%
  \expandafter\blx@getrefcontext\expandafter{\blx@realkey}% needed for \ifdata
  \expandafter\blx@citation\expandafter{\blx@realkey}\blx@msg@cundefon
  \expandafter\blx@ifdata\expandafter{\blx@realkey}
    {\advance\blx@tempcnta\@ne
     \listeadd\blx@tempa{\blx@realkey}}
    {\ifnum\blx@tempcntb>\z@\multicitedelim\fi
     \expandafter\abx@missing\expandafter{\blx@realkey{} ???}%
     \advance\blx@tempcntb\@ne}}
\makeatother

这将添加“???” 到未定义的引用标签,使它们更容易搜索。

相关内容