令人惊讶的是,我找不到可用于分隔 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 运行时没有任何警告或错误。