19

当 .bib 文件的编码与 .tex 文件不同时,LaTeX 会处理这种情况吗?例如,.tex 在 ISO-8859-2 中,.bib 在 UTF-8 中。可以通过 LaTeX 即时转换编码吗?还是唯一的方法是手动?

4

4 回答 4

16

首先,根据LyX wiki BibTeX 不能使用 UTF-8:

BibTeX 不支持以 UTF-8(即 Unicode)编码的文件,这是当今大多数操作系统上的默认文件编码。原因是当前的 BibTeX (v. 0.99c) 是在 1988 年发布的,因此早于 unicode 的出现。除非长期宣布的 BibTeX v. 1.0 或许多计划中的潜在成功应用程序之一已准备好,否则必须为 bib 文件使用 latin1 (ISO-8859-1) 或其他 8 位编码(这不会影响 LaTeX编码,仍然可以是 utf8)。

通常,BibTeX 文件中的任何内容都会被逐字复制到 LaTeX 源代码(可能有一些格式和大小写更改等),例如书名、作者等。

因此,您的 BibTeX 文件编码必须与您的 LaTeX 文件使用的编码相匹配,否则事情会变得很有趣。除非您的文档包含正确的包,否则您也不能在 BibTeX 中使用 babel 提供的命令(例如"afor ä,由 n?german 提供)。

规范的方法是通过始终使用适当的命令指定特殊字符来使 BibTeX 文件不受任何编码或包问题的影响。

这基本上意味着,如果您想绝对确定它是否有效,则ä必须使用而不是编写。{\" a}似乎是相当标准的做法。

Oren Patashnik的 BibTeX 手册BibTeXing也详细说明了这一点:

BibTeX 现在处理重音字符。例如,如果您有一个包含两个字段的条目

author = "Kurt G{\"o}del",
year = 1931,

如果您使用的是 alpha 参考书目样式,那么 BibTeX 将[Göd31]为该条目构建标签,这正是您想要的。要使此功能起作用,您必须将整个重音字符放在大括号中;在这种情况下,要么{\"o}{\"{o}}将做。此外,这些大括号本身不得包含在大括号中(除了可能分隔整个字段或整个条目的大括号);并且必须有一个反斜杠作为大括号内的第一个字符。因此既不 {G{\"{o}}del}也不{G\"{o}del}将适用于这个例子。此功能处理 LaTeX 书的表 3.1 和 3.2 中的所有重音字符和除非反斜杠外的所有符号。对于您可能定义的“口音”,此功能的行为类似;我们很快就会看到一个例子。为了计算标签中的字母,BibTeX 将大括号内的所有内容视为单个字母。

于 2009-10-28T08:16:29.620 回答
8

您可以即时更改输入编码:

\inputencoding{latin2}
\bibliography{mybib}
\inputencoding{utf8}

\inputencoding命令由inputenc软件包提供。

于 2013-01-08T15:37:38.610 回答
3

BibTeX 在非 ASCII 字符方面存在巨大问题,即使在最新版本中也是如此。如果您更喜欢现代系统,我想推荐biblatexbiber的组合。两者仍处于测试阶段,但即使在生产环境中也能很好地工作。通过这种组合,大多数与 LaTeX 书目相关的问题都会消失。作为旁注,biblatex 文档还包含有关传统 BibTeX 编码问题的部分(第 2.4.3 节)。

于 2009-10-28T17:46:33.500 回答
0

Bibtex 随机支持任何非标准字符编码 - 基本上有时它可以工作,大多数时候它不支持并且正式不支持(更多细节)。

就个人而言,在 .bib 中,我坚持使用基本的 ASCII 和 LaTeX 魔法,例如 \"o。对于 .tex,如果我不使用英文书写,我会使用 \usepackage[utf8]{inputenc} 将 .tex 保留为 UTF-8 .

于 2009-10-28T08:22:57.780 回答