我让我的女朋友用 LaTeX 写她的本科毕业论文,她非常喜欢它。然而她还是会犯一些错误。通常我可以很容易地帮她改正。但这个错误让我抓狂:
WARN - I didn't find a database entry for '[' (section 0)
WARN - I didn't find a database entry for '1' (section 0)
TEX 文件非常大,因此偶然发现这一点并不容易。我尝试使用比文字搜索更智能的正则表达式在整个文档中搜索、和。我只找到了几个{1}
正确的,但除此之外,绝对没有任何东西可以解释警告。{[}
[1]
BLG 文件也没有提供太多信息:
[786] Utils.pm:304> WARN - I didn't find a database entry for '[' (section 0)
[787] Utils.pm:304> WARN - I didn't find a database entry for '1' (section 0)
输出:pdflatex, 这日志, 这巴比伦, 这血红蛋白和基础型。
我也尝试过如何让 biber 告诉我要查看的行号。但我就是找不到任何方法来生成它。
有人有办法吗?
答案1
bcf 文件相当长,但结构良好,并且您只对引用键感兴趣。
因此,如果你搜索,bcf:citekey
你很快就能找到以
<bcf:citekey order="1">goepel:2020</bcf:citekey>
<bcf:citekey order="2">boyd:un:2019</bcf:citekey>
您只需在那里搜索>1<
,>[
您就会找到
<bcf:citekey order="100">lay:2015</bcf:citekey>
<bcf:citekey order="101">[</bcf:citekey>
<bcf:citekey order="102">umweltbundesamt:kyoto</bcf:citekey>
....
<bcf:citekey order="137">cusato:2017</bcf:citekey>
<bcf:citekey order="138">1</bcf:citekey>
<bcf:citekey order="139">cusato:2017</bcf:citekey>
这意味着有问题的键位于 {lay:2015} 和 {cusato:2017} 之后,应该不难找到。
查找引文的第二个选项是删除 bbl 文件。然后 LaTeX 会对每个未定义的引文发出警告,您应该在日志文件中看到
LaTeX Warning: Citation '1' on page 1 undefined on input line 13.
答案2
更新
从biblatex
v3.17 开始,行号警告即使在 Biber 运行后仍然有效,并且应该能够更具体地告诉您有问题的引用在哪里。另请参阅https://github.com/plk/biblatex/issues/1117。
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[backend=biber, style=authoryear]{biblatex}
\addbibresource{biblatex-examples.bib}
\begin{document}
\parencite[vgl.][][254]{sigfridsson}[.]
\parencite[vgl.][]16{worman}
\autocite{geer}
\parencite[vgl.][][254]{sigfridsson}[.]
\printbibliography
\end{document}
现在生产
Package biblatex Warning: The following entry could not be found
(biblatex) in the database:
(biblatex) 1
(biblatex) Please verify the spelling and rerun
(biblatex) LaTeX afterwards.
Package biblatex Warning: The following entry could not be found
(biblatex) in the database:
(biblatex) [
(biblatex) Please verify the spelling and rerun
(biblatex) LaTeX afterwards.
)
LaTeX Warning: Citation '[' on page 1 undefined on input line 11.
LaTeX Warning: Citation '1' on page 1 undefined on input line 13.
LaTeX Warning: Citation '[' on page 1 undefined on input line 17.
旧答案
biblatex
目前没有提及 Biber 标记为缺失的条目的行号。如果在这种情况下您想要获取行号,请将以下重新定义应用于\blx@citation@entry
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[backend=biber, style=authoryear]{biblatex}
\makeatletter
\def\blx@citation@entry#1#2{%
\blx@bibreq{#1}%
\ifinlist{#1}\blx@cites
{}
{\listgadd{\blx@cites}{#1}}%
\blx@auxwrite\@mainaux{}{\string\abx@aux@cite{#1}}%
\ifinlistcs{#1}{blx@segm@\the\c@refsection @\the\c@refsegment}
{}
{\listcsgadd{blx@segm@\the\c@refsection @\the\c@refsegment}{#1}}%
\blx@auxwrite\@mainaux{}{\string\abx@aux@segm{\the\c@refsection}%
{\the\c@refsegment}%
{\detokenize{#1}}}%
\blx@ifdata{#1}
{}
{\ifcsdef{blx@miss@\the\c@refsection}
{\ifinlistcs{#1}{blx@miss@\the\c@refsection}
{\@latex@warning{#2{#1}}}
{\blx@logreq@active{#2{#1}}}}
{\blx@logreq@active{#2{#1}}}}%
\blx@hook@entrykey{#1}}
\makeatother
\addbibresource{biblatex-examples.bib}
\begin{document}
\parencite[vgl.][][254]{sigfridsson}[.]
\parencite[vgl.][]16{worman}
\autocite{geer}
\parencite[vgl.][][254]{sigfridsson}[.]
\printbibliography
\end{document}
然后.log
输出有
Package biblatex Warning: The following entry could not be found
(biblatex) in the database:
(biblatex) 1
(biblatex) Please verify the spelling and rerun
(biblatex) LaTeX afterwards.
Package biblatex Warning: The following entry could not be found
(biblatex) in the database:
(biblatex) [
(biblatex) Please verify the spelling and rerun
(biblatex) LaTeX afterwards.
)
LaTeX Warning: Citation '[' on page 1 undefined on input line 34.
LaTeX Warning: Citation '1' on page 1 undefined on input line 36.
LaTeX Warning: Citation '[' on page 1 undefined on input line 40.
答案3
我也想过用二分查找法,只是反过来玛丽金的建议。
我在文档中间放置了一个不存在的标记引用,并根据 biber 警告的顺序变化,以减少对数2步的方式向前或向后移动。这样,我就能找出有错误的两个段落:
\parencite[vgl.][][254]{key1}[.]
和
\parencite[vgl.][]16{key2}
如果您不想重新实现 LaTeX 语法,则使用正则表达式很难找到平衡括号。
我仍然感到难过,因为没有一个参数/工具可以帮助你解决这个问题。