我正在编写 BibTeX 解析器,我想知道是否需要保留输入文件中的空格,或者是否可以安全地忽略它。更具体地说:
- 与和
title={Title}
相同吗?title={ Title }
title=" Title "
- 等同
title={The title}
于title={The title}
? - 如果我首先将所有空格序列替换为单个空格,BibTeX 是否会在任何输入文件中产生不同的输出?
答案1
与和
title={Title}
相同吗?title={ Title }
title=" Title "
是的。请参阅下面的示例.bib
文件及其通过 BibTeX 运行的结果,即相应的.bbl
文件。该.bbl
文件由 BibTeX 创建,并在后续编译期间由 LaTeX 读取;LaTeX(而不是 BibTeX)对格式化的参考书目进行实际排版。因此,要研究 BibTeX 的作用,就必须检查该.bbl
文件。
等同
title={The title}
于title={The title}
?
是的。同样,请参见下文。
有没有任何输入文件中,如果我先将所有空格序列替换为单个空格,BibTeX 会产生不同的输出吗?[强调]
我可以想象,如果有人编造出一些极其巧妙的 LaTeX 宏,扩大至各种形式的空白,和title
如果在字段(或任何其他字段)中插入此类宏,BibTeX可能最终会根据输入中存在的任何硬编码空白组是否被单个空白字符替换而产生不同的结果。(我假设您正在构建的 bib 文件解析器不会处理,即扩展字段中可能存在的 LaTeX 宏。)相反,如果没有这样的恶魔般的宏,即,如果给定字段中存在的所有空白都被“硬编码”为空格、制表符或换行符,则用单个空白字符替换空白字符序列应该是完全无害的。
这是一个包含五个条目的测试 bib 文件。前三个条目用于测试在字段的开头和结尾插入不同数量的空格的效果title
;后两个条目用于测试字段中单词之间插入不同数量的单词间空格的效果title
。
@article{test1,
author = "xyz",
title = {Title},
journal= "Test",
year = 3001,
}
@article{test2,
author = "xyz",
title = { Title },
journal= "Test",
year = 3002,
}
@article{test3,
author = "xyz",
title = " Title ",
journal= "Test",
year = 3003,
}
@article{test4,
author = "xyz",
title = {The Title},
journal= "Test",
year = 3004,
}
@article{test5,
author = "xyz",
title = {The Title},
journal= "Test",
year = 3005,
}
加载natbib
包并使用参考书目样式处理 bib 文件plainnat
将生成以下.bbl
文件:
\begin{thebibliography}{5}
...
\bibitem[xyz(3001)]{test1}
xyz.
\newblock Title.
\newblock \emph{Test}, 3001.
\bibitem[xyz(3002)]{test2}
xyz.
\newblock Title.
\newblock \emph{Test}, 3002.
\bibitem[xyz(3003)]{test3}
xyz.
\newblock Title.
\newblock \emph{Test}, 3003.
\bibitem[xyz(3004)]{test4}
xyz.
\newblock The title.
\newblock \emph{Test}, 3004.
\bibitem[xyz(3005)]{test5}
xyz.
\newblock The title.
\newblock \emph{Test}, 3005.
\end{thebibliography}
您可以看到,title
前三种情况下格式化字段的内容是相同的,最后两种情况下格式化字段的内容也是相同的。
如果您扩展前面的示例以在其他字段的开头和结尾以及其他字段中的单词之间包含不同数量的空格,您会发现上面显示的字段行为title
也会延续到其他字段。