BibTeX 标签(又称引用键)中哪些字符是安全的?我所说的安全是指广泛的应用程序,包括 BibTeX 和 biber、各种 BibTeX 或 BibLaTeX 样式文件,还包括书目数据库等实用程序和用于处理 .bib 文件的常用工具。
基于实验的部分答案在这个问题的答案,但我过去遇到了一些那里未提及的字符的问题(例如下划线,甚至是某些工具(如 bibmerge)的正斜杠),所以我正在寻找更明确的答案。
答案应该“谨慎行事”,我宁愿排除在大多数情况下没有问题并且仅在某些情况下会引发错误的字符,也不愿将其包括在内。
答案1
由于各种原因,各种字符被禁止,但要提出一个适用于所有可能工具的简单列表却很棘手(并非所有.bib
与文件相关的工具都使用相同的库来解析.bib
文件,最值得注意的是 Biber 的要求比 BibTeX 严格得多,但还有许多其他工具,谁知道有哪些限制)。
BibTeX
在 BibTeX 方面,条目键中唯一被禁止的字符是空格,
}
并且,
由于.bib
条目的语法
@<type>{<entry key>,
<field> = {<contents>},
}
一般来说,非 US-ASCII 字符不能保证被正确处理,但由于它们通常按原样传递,因此在 BibTeX 端大部分都可以正常工作。
比贝尔
Biber 对输入键有点挑剔,不允许
" # ' ( ) , = { } %
乳胶
当处理后的数据传回 LaTeX 或 LaTeX 需要告诉 BibTeX 要获取哪些条目时,许多字符在 LaTeX 端是不允许的.bib
。请注意,禁止使用的确切字符可能取决于您加载的确切引文/参考书目包。
例如,BibTeX 接受{
一个输入键,但这很可能会在 LaTeX 端出错,因为它{
会打开一个无法正确关闭的组。
类似地,#
对于 LaTeX 来说具有特殊含义,并且通常不能出现在宏定义之外。
%
开始评论,因此有问题。
由于\
启动命令序列这也是危险的
这给了我们
{ } # % \
另一个可能的问题来源是像这样的活动字符~
,因为它们可能会扩展为无法干净地写入.aux
文件中的内容。
pdfLaTeX 的工作方式意味着非 US-ASCII 字符也通过活动字符实现,因此使用 pdfLaTeX 时最好也避开非 US-ASCII 字符。
所有这些都表明,在 LaTeX 方面A-Za-z0-9
,安全标点符号.:;-_!?"'+=*/
可能是可以接受的。一些语言模块会激活某些标点符号babel
。通常,这种情况会以仍然允许在输入键中使用这些标点符号的方式发生。
但没有保证。babel-german
使 处于"
活动状态,因此可以将其用作简写(例如"a
)ä
。然后 的行为"
取决于以下字符。
\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{natbib}
\begin{filecontents}{\jobname.bib}
@book{".,
author = {Anne Elk},
title = {A Theory on Brontosauruses},
year = {1972},
publisher = {Monthy \& Co.},
location = {London},
}
\end{filecontents}
\begin{document}
Lorem \citep{".}
\bibliographystyle{plainnat}
\bibliography{\jobname}
\end{document}
有效,但是
\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{natbib}
\begin{filecontents}{\jobname.bib}
@book{"',
author = {Anne Elk},
title = {A Theory on Brontosauruses},
year = {1972},
publisher = {Monthy \& Co.},
location = {London},
}
\end{filecontents}
\begin{document}
Lorem \citep{"'}
\bibliographystyle{plainnat}
\bibliography{\jobname}
\end{document}
没有。
标签中常见的字符是,如果您不听从 发出的警告,则:
它不起作用babel-french
natbib
\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{natbib}
\begin{filecontents}{\jobname.bib}
@book{elk:bronto,
author = {Anne Elk},
title = {A Theory on Brontosauruses},
year = {1972},
publisher = {Monthy \& Co.},
location = {London},
}
\end{filecontents}
\begin{document}
Lorem \citep{elk:bronto}
\bibliographystyle{plainnat}
\bibliography{\jobname}
\end{document}
:
如果你加载natbib
前 babel
按照警告所建议的那样。
LaTeX 为你提供了许多让你自讨苦吃的方法。例如,在以下k
输入键中不再允许使用MWE
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\begin{filecontents}{\jobname.bib}
@book{elk,
author = {Anne Elk},
title = {A Theory on Brontosauruses},
year = {1972},
publisher = {Monthy \& Co.},
location = {London},
}
\end{filecontents}
\begin{document}
{\catcode`k=\active
\def k{\_}
Lorem \cite{elk}}
\bibliographystyle{plain}
\bibliography{\jobname}
\end{document}
其他工具
正如开头所提到的,有几种操作.bib
文件的工具,并且根据它们用来解析.bib
条目的库或方法,它们可能有自己的限制。
好的,告诉我哪些角色已经安全了
尽管有相反的例子,但如果你想要一个安全角色列表,我肯定会包括
A-Za-z0-9
因为一旦这些字符被激活,LaTeX 将变得几乎无法使用。
我更喜欢只使用小写字符,因为我不相信区分大小写,但这只是我的怪癖。我相信a-z0-9
已经让你走得很远了,不过我认为至少一个额外的字符用于视觉分离可能会有用。
但之后它就变得很棘手了。.
看起来相当安全,因为我认为它通常不会被激活。许多其他标点符号命令最终可能会被激活并可能中断。