BibTeX

BibTeX

令人惊讶的是,我找不到可用于分隔 BibTeX 键中字段的符号列表。许多编程语言都有自己的例外列表,但似乎没有,无论是 BibLaTeX 还是 Biber。

请考虑以下示例:

@article{Doe1970,
  author = {Doe, John},
  title = {Lorem ipsum},
  volume = {42},
  date = {1970-01-01},
  pages = {123--456},
}

常见且广泛使用的模式是[auth][year](例如Doe1970),但如果我想包含一系列同类描述符(一个接一个的文本或数字字段),该怎么办?例如,[auth][year][volume][firstpage]会导致Doe197042123,看起来笨重且难以阅读;或[auth][shorttitle][year] DoeLoremipsum1970,看起来也不太好。我可以使用类似Doe+1970-42:123或 的东西Doe_Loremipsum;1970来代替吗?

据我所知,非 ASCII 符号、空格和逗号是不允许的,尽管 Biber 可以处理非 ASCII 字符,但为了更好的兼容性,通常会省略这些字符。但是,最好有一个完全不允许使用的字符列表,以及一个推荐使用的符号列表,这些符号可以安全使用,不会在编译时造成任何问题。

答案1

首先,键名中不允许有空格,因此我们可以集中精力于其他特殊字符。

BibTeX

我准备了以下测试文件:

@article{a{}b$,
  author={A. Uthor},
  title={With curly braces and dollar},
  journal={Journal},
  year=2011,
}
@article{a-b;^,
  author={A. Uthor},
  title={With hyphen and caret},
  journal={Journal},
  year=2012,
}
@article{a&#,
  author={A. Uthor},
  title={With ampersand and hashmark},
  journal={Journal},
  year=2013,
}
@article{a@_,
  author={A. Uthor},
  title={With at and underscore},
  journal={Journal},
  year=2014,
}
@article{a;:",
  author={A. Uthor},
  title={With semicolon, colon and double quote},
  journal={Journal},
  year=2015,
}
@article{a?!,
  author={A. Uthor},
  title={With question and exclamation marks},
  journal={Journal},
  year=2016,
}
@article{a([)/*],
  author={A. Uthor},
  title={With parentheses, brackets, slash and asterisk},
  journal={Journal},
  year=2017,
}
@article{a+='`,
  author={A. Uthor},
  title={With plus, equals and quotes},
  journal={Journal},
  year=2018,
}
@article{a.<>,
  author={A. Uthor},
  title={With period, less and greater},
  journal={Journal},
  year=2019,
}

\cite以及每个条目都有一个小测试文件。使用 LaTeX 进行编译时会显示问题,a&#因为

! Illegal parameter number in definition of \@fortmp.
<to be read again> 
                   }
l.7 \cite{a&#}

这并不奇怪。忽略这两个相关错误并运行 BibTeX 会显示

Stuff after "}"---line 2 of file strange.aux
 : \citation{a{
 :             }b$}

Warning--I didn't find a database entry for "a&##"

这也并不出乎意料。因此我得出结论,即使花括号是对称的,也是#不允许的(但如果花括号#在 LaTeX 文档中由类别代码 12 组成,它就会通过)。

现在我从相关键中删除了花括号和#。编译成功了。

下一个实验是添加\usepackage[czech,turkish,ngerman,french]{babel}到 LaTeX 文档中,这将使几个字符活跃起来,但我没有遇到任何问题。请注意,该.aux文件包含

\catcode `"\active 
\catcode `-\active 
\catcode `:\active 
\catcode `!\active 
\catcode `=\active 
\catcode `;\active 
\catcode `?\active 

下一个实验是将\cite命令作为另一个命令的参数,我使用了\emph。同样没有问题。

结论

七位 ASCII 范围内的禁用字符是{ } , ~ # % \。我没有添加逗号、百分号和反斜杠,因为它们显然是不可接受的:第一个在 BibTeX 端,其他两个在 LaTeX 端。

也是~不允许的(自己做个测试)。

比贝尔

https://tex.stackexchange.com/a/96918/2388其中指定

" # ' ( ) , = { } %

是不允许的。我猜那也不~能用(对于 LaTeX 方面的问题,比如 BibTeX)。不用说,反斜杠也不行。

答案2

还要注意,在原始 BibTeX 中,{ } ~ # % \键中包含字符的条目可以crossref从另一个条目中进行编辑(参见以下测试),尽管在实际中这种情况不太可能发生。

如果我们只考虑.bib阅读过程,那么大括号样式条目的禁止字符是, }加空格,,圆括号样式条目的禁止字符是加空格。

@misc(!"$&')(*+-./123:;<=>?@ABC[]^_`abc|,
  author = {John Doe},
  title = {Item 1},
  crossref = {!"#$%&')(*+-./123:;<=>?@ABC[\]^_`abc{|}~},
)

@misc(!"#$%&')(*+-./123:;<=>?@ABC[\]^_`abc{|}~,
  author = {Jane Roe},
  title = {Item 2},
  howpublished = {Item 2},
)

@misc{!"#$%&'()*+-./123:;<=>?@ABC[\]^_`abc{|~,
  author = {John Doe},
  title = {Item 3},
}
\cite{!"$&')(*+-./123:;<=>?@ABC[]^_`abc|}

BibTeX 运行时没有任何警告或错误。

相关内容