在大型 .bib 文件中查找印刷错误

在大型 .bib 文件中查找印刷错误

正如您所见,由于所有文件都很大,我无法提供最小工作示例。

我正在写一本非常大的书(TeXShop 3.0 下的 tufte-book),其中包含九个章节和一个附录,其中包含数百条引文。文本排版正确,但当我运行 BibTeX 时,我在控制台中收到以下报告:

This is BibTeX, Version 0.99d (TeX Live 2018)
The top-level auxiliary file: PaP.aux
A level-1 auxiliary file: PaPCh1.aux
A level-1 auxiliary file: PaPCh2.aux
A level-1 auxiliary file: PaPCh3.aux
A level-1 auxiliary file: PaPCh4.aux
A level-1 auxiliary file: PaPCh5.aux
A level-1 auxiliary file: PaPCh6.aux
A level-1 auxiliary file: PaPCh7.aux
A level-1 auxiliary file: PaPCh8.aux
A level-1 auxiliary file: PaPCh9.aux
A level-1 auxiliary file: PaPApp.aux
The style file: plainnat.bst
Database file #1: Art.bib
Your field is more than 20000 characters---line 1543 of file Art.bib
 :          YEAR = "
 :                  2005"
I'm skipping whatever remains of this entry
Warning--I didn't find a database entry for "CriminisiKempZisserman:05"
Warning--I didn't find a database entry for "CriminisiStork:04"

以及随后的许多其他类似的“警告”条目。

Art.bib 文件中的错误行(第 1543 行)是此条目的最后一行:

@ARTICLE{Fiorentini:05,
       EDITOR = "Erna Fiorentini",
        TITLE = "Drawing with optical instruments.  {D}evices and Concepts of Visuality and Representation",
        JOURNAL = "{ECHO} Open Digital Library",
      ADDRESS = "{\tt echo.mpiwg-berlin.mpg.de/content/optics}",
         YEAR = "2005"
}

据我所知,该条目的格式正确。我甚至重新输入了它来检查。鉴于控制台报告中的警告“您的字段超过 20000 个字符”,似乎错误必须位于 Art.bib 文件中更早的位置(可能是不匹配的双引号或花括号?)。但这真的是 BibTeX 错误的根源吗?我如何找到(当然使固定)这个错误?

我的 Art.bib 中有按键字母顺序列出的条目,而且我有一个正确引用的条目列表。所以我猜我的错误一定是在最后一个正确排版的条目之后(不久?)出现的。

答案1

唉,20 世纪的错误处理并不总是我们所希望的。我发现在这种情况下有用的方法是开始删除 .bib 文件的大块内容以缩小范围。我会从删除从第 500 行开始的每个条目开始,看看错误是否仍然存在。如果是,则使用二分搜索算法继续向后删除(例如,尝试删除第 ~250、~125、~60 行等之后的所有内容),如果没有,则错误在于剩余的内容,因此开始添加您删除的内容的大约一半,并使用二分搜索逻辑来缩小范围。

我的猜测是它可能缺少了}。

答案2

尽管已经使用久经考验的“分而治之”方法回答了这个问题,但我刚刚想起一种可以通过加快搜索速度来帮助解决的方法。

使用能够计算特定字符实例的编辑器(我使用 emacs),从最开始开始并要求提供两份报告:

  • 多少{
  • 多少}

如果没有错误,答案应该是相同的值;换句话说,左括号和右括号的数量完全相同,以便所有内容都具有正确的范围。如果这些值不匹配,您就知道问题出在哪里;现在您需要找出问题所在。

接下来,转到报告所谓错误的点,并向后退一段合理的距离,直到完整条目之间的某个点。再次询问“有多少”。如果值相同,则问题更早;如果不相同,则问题更晚。

根据需要继续在文件中向前或向后移动。它仍然是分而治之,但比重新运行 BibTeX 更快。

答案3

我(本质上)遵循了 @DonaldHosek 的建议,对 Art.bib 文件进行了分而治之的搜索,并找到了错误的缺失}(实际上是")。真是痛苦!应该有一种有效的方法来排版整个 .bib 文件,这样(我猜)更容易发现错误。

无论如何,非常感谢唐纳德!

相关内容