biber
抱怨 BibTeX 文件中本应被视为注释行的内容中有“垃圾”。我想知道 BibTeX 是否根本不鼓励注释。
\documentclass {article}
\usepackage {filecontents}
\begin {filecontents} {ref.bib}
@book {book1,
author={author 1},
title={title 1}}
book {book2,
author={author 2},
title={title 2}}
@book {book3,
author={author 3},
title={title 3}}
\end{filecontents}
\usepackage [backend=biber] {biblatex}
\addbibresource {ref.bib}
\begin {document}
\nocite{*}
\printbibliography
\end {document}
以下是biber
的输出:
INFO - This is Biber 2.1
INFO - Logfile is 'mwe.blg'
INFO - Reading 'mwe.bcf'
INFO - Using all citekeys in bib section 0
INFO - Processing section 0
INFO - Looking for bibtex format file 'ref.bib' for section 0
INFO - Decoding LaTeX character macros into UTF-8
INFO - Found BibTeX data source 'ref.bib'
WARN - BibTeX subsystem: /tmp/No7MbpTruX/ref.bib_31209.utf8, line 13, warning: 43 characters of junk seen at toplevel
INFO - Overriding locale 'en-US' defaults 'variable = shifted' with 'variable = non-ignorable'
INFO - Overriding locale 'en-US' defaults 'normalization = NFD' with 'normalization = prenormalized'
INFO - Sorting list 'nty' of type 'entry' with scheme 'nty' and locale 'en-US'
INFO - No sort tailoring available for locale 'en-US'
INFO - Writing 'mwe.bbl' with encoding 'ascii'
INFO - Output to mwe.bbl
INFO - WARNINGS: 1
答案1
我们绝不会阻止你对任何你写过的文件进行评论。你遇到的只是对评论的处理上的轻微分歧,或者你对评论的构成存在分歧。
根据btxdoc
,§4,第 7 项,第 13 页
BibTeX 允许在数据库文件中添加任何不在条目内的注释。如果要注释掉某个条目,只需删除
@
条目类型前面的字符即可。
这意味着不在@<entrytype>{...}
条目块内的任何内容都必须被解析器视为注释。
此外,在第 14 页第 4 项中,我们发现
LaTeX 的注释字符
%
不是数据库文件中的注释字符。
因此从技术上来说(如果你愿意的话,从法律上来说),你使用的阻止book2
确实是一条评论。
不过,Biber 警告它提到了“垃圾字符”。您可以放心地忽略此警告,就像 Biber 忽略这些字符一样。相反,您可以将这些警告视为 Biber 的一项附加服务,以警告您可能出现问题。有时人们真的会忘记@
或文件中确实有一些垃圾。
与上面引用的摘录相反,Biber 认为以 开头的行%
是真正的注释,并且在这些情况下不会发出垃圾字符警告。因此,如果您同意%
在文件中的注释开头使用.bib
,Biber 不会再打扰您,尽管从技术上讲,块外的行如果没有也@
应该被视为注释。%
由于 biber 认为%
这是一个真正的注释符号,因此它处理注释条目的方式与 BibTeX 不同。以
%@article{A,
将被 biber 忽略(其余的将成为垃圾),但 bibtex 仍会看到它。
由于%
BibTeX 不认为是注释字符,但会逐字传递到 LaTeX(它会被识别为注释,可能会造成灾难性的后果),所以最好不要使用%
里面一个条目。(外面的条目无关紧要,因为它会与所有其他条目一起被忽略)。
入口
@ARTICLE{auchunbekannt,
title = {Beispielaufsatz},
journal = {Zeitschrift},
year = {2001},
%volume = {7},
pages = {1--35, 99--291},
annotation = {lorem},
}
用 Biber 编译会很好(当然,输出中不会出现volume
字段),但 BibTeX 会抛出错误。因此,排除字段的更安全方法是重命名它:
xxxvolume = {7},
相似地,
@article{B,
author = {Uthor, A.}, % her full name is Anne Uthor
journal = {Journal 1},
title = {Title},
year = {2015},
}
可以使用 Biber 编译,但会抛出错误
You're missing a field name---line 6 of file biblio.bib
: author = {Uthor, A.},
: % her full name is Anne Uthor
I'm skipping whatever remains of this entry
使用 BibTeX。
另一方面
@article{A,
author = {Author, A.},
journal = {Journal 1},
title = {Title %1
},
year = {2014},
}
可以与 BibTeX 一起使用,但使用 biber 你会在 bbl 中得到这个:
\field{title}{Title %1}
这导致争论失控。
如果您的目标是带注释的参考书目,您还可以在 Biber/BibTeX 未知的字段中注释条目内的条目,这样就可以选择在文档中输出(如果需要)。biblatex
甚至有一个annotation
字段可以由样式随意显示reading
,所有其他标准样式都会忽略它,但它会传递给文件.bbl
。诸如这样的新字段myann
将被 Biber 和 BibTeX 完全忽略,因此也可以用您的注释填充。