在我的参考书目数据库中,有几个参考文献的作者姓名中有重音字符,例如Chagn\'e
。该inputenc
包似乎对此有问题。我的设置是:
\usepackage[latin9]{inputenc}
这会产生与数据库中特定行号相关的错误.bib
。在生成最终 PDF 之前,错误重复了数十次。有人可以推荐我应该使用什么设置吗inputenc
?
以下是 bib 文件中的一个例子:
@article{Chagne2003a,
author = {Chagn\'e, David and Brown, Garth and Lalanne, C\'eline and Madur, Delphine and Pot, David and Neale, David and Plomion, Christophe},
title = {Comparative genome and QTL mapping between maritime and loblolly pines},
journal = {Molecular Breeding},
pages = {185--195},
volume = {12},
issue = {3},
url = {http://dx.doi.org/10.1023/A:1026318327911},
year = {2003}
}
PDF 中的参考文献和引文均正确打印。然而,在编译过程中,至少发生了 6 次错误,需要用户干预。
编辑#2 - 我的参考书目包是“Biblatex”,它直接访问 .bib 文件。错误是在编译过程中生成的。我将它粘贴在这里。
l.132
?
! Package inputenc Error: Keyboard character used is undefined
(inputenc) in inputencoding `latin9'.
See the inputenc package documentation for explanation.
Type H <return> for immediate help.
...
l.132
?
行号 132 是 bib 数据库中所讨论的参考文献的位置。
编辑# 3
这里有一件奇怪的事情。我从 .bib 文件中删除了重音设置。因此,Chagn\'e 现在是 Chagne。然后我从编译文件夹中删除了所有 aux、.bbl 和 .blg 文件。我仍然收到完全相同的错误。现在我不太确定 1.132 是否指的是 .bib 中的第 132 行。
编辑# 4 —— 一个最小的例子:
\documentclass[12pt]{article}
\usepackage[bibstyle=authoryear,
citestyle=authoryear,
natbib=true]{biblatex}
\usepackage{filecontents}
\usepackage[latin9]{inputenc}
\begin{filecontents}{genetics.bib}
@article{Chagne2003a,
author = {Chagn\'{e}, David and Brown, Garth and Lalanne, C\'{e}line and Madur, Delphine and Pot, David and Neale, David and Plomion, Christophe},
title = {Comparative genome and QTL mapping between maritime and loblolly pines},
journal = {Molecular Breeding},
pages = {185--195},
volume = {12},
number = {3},
doi = {10.1023/A:1026318327911},
year = {2003}
}
\end{filecontents}
\addbibresource{genetics.bib}
\begin{document}
\section{Introduction}
This was first reported by \citet{Chagne2003a}.
\printbibliography
\end{document}
答案1
免责声明:这个答案没有漂亮的图片,抱歉。
因此,总结一下问题评论中的对话,并提供一些额外的解释:
- 该错误是由 引起的
inputenc
,它抱怨在 的第 132 行发现一些字符main.tex
。 - 该行只有
\printbibliography
在包中实现的命令biblatex
。 - 因此,有问题的字符一定在宏的扩展中
\printbibliography
,但很难找到该字符的来源。
一些诊断工具:
iconv
程序可以从一种编码转换为另一种编码。如果在转换过程中发现某些无效字符,程序将停止并输出有关有问题的字符的错误,并显示发现该字符的行号和该行中的列号。因此,我们可以在文件上运行
iconv
,main.tex
要求.bib
它将 转换为latin9
的超集latin9
(例如utf8
)的任何其他编码,并查看是否找到 中没有的某些字符latin9
。命令可以是:iconv -f latin-9 -t utf-8 < main.tex > /dev/null
请注意,
iconv
从标准输入(从 重定向main.tex
)读取并将转换结果写入标准输出(我们重定向到标准输出,/dev/null
因为我们对输出并不感兴趣,而是对可能的错误感兴趣)。如果发现错误,它将输出到标准错误,标准错误未重定向,因此它将显示在终端中。- 上述测试没有产生任何输出,因此没有发现错误。
此时有两种可能性:
- 我们仍然没有对包含无效字符的文件运行测试
latin9
。也许它位于由 读取的某个辅助文件中\printbibliography
。 - 也许的
latin9
定义文件inputenc
不完整,而所谓的违规字符实际上是一个有效的字符,只是它inputenc
不知道而已。
为了验证 1.,iconv
应该在编译时输入的所有文件中运行测试main.tex
。要分辨出哪些是全部可能有点困难。
无论如何,删除该行\usepackage[latin9]{inputenc}
将使错误消息消失,因此这是一个有吸引力的“解决方案”,但请注意,抑制症状并不是治愈疾病的方法。如果最终有一个无效字符怎么办?
好吧,在没有inputenc
软件包的情况下,TeX 被配置为忽略所有非 ASCII 字符,因此如果有任何latin9
字符(有效或无效),它将在输出中被默默抑制。所以你能想到的最坏情况就是这里或那里缺少一些字符。这可能很难发现,所以为了安全起见,我将继续进行测试iconv
。
最后说明:
- 当您使用标准 TeX 重音宏输入重音字符时,例如
\'e
您在输入中仅使用 ASCII 字符,因此inputenc
不需要任何包。仅当您想“直接”输入重音字符时才需要这样做(即é
:)。 - 如果您可以直接输入
é
,则需要确定编辑器使用哪种编码来保存文件。欧洲语言(法语、西班牙语、意大利语等)的最常见编码是 ISO-8859-1(也称为latin1
)、ISO-8859-15(也称为latin9
)和utf8
。最后一种编码实际上是对整个 Unicode 字符集进行编码的一种方式,因此涵盖了所有字母表。 - 对于重音元音,
latin1
和都latin9
使用相同的代码,因此您可以将其中任何一个作为 的选项inputenc
。这些编码之间的主要区别在于latin9
有欧元符号 (€) 的代码,而latin1
没有。
出于好奇,我会做额外的测试。带回inputenc
包,但使用latin1
而不是latin9
。如果实施过程中存在某种错误latin9
,那么错误可能不存在于latin1
和 中(除非您需要欧元符号或其他罕见字符,例如 Š、š、Ž、ž、Œ、œ 或 Ÿ,否则根本没有区别。
答案2
建议这里是始终使用{\' e}
等(即 、{
、\command
<stuff> }
)来表示参考书目中的非 ASCII 字符。BIBTeX 将除字母(或 <stuff> )之外的所有内容视为重音符号,并在排序等时忽略它。
答案3
使用{\' e}
等,这是最安全的路线。
===========
但为了调查这个问题,我测试了放入latin1
而不是latin9
放入包中inputenc
,但出现了同样的错误
我已经测试过了utf8
,结果弹出了更多信息:
package inputenc error: Unicode char \u8:Â not set up for use with latex
这告诉我Â
我的 .bib 文件中有虚假字符,确实有(从 IEEE 网站复制粘贴的)!
但是也:
package inputenc error: Unicode char \u8:€ not set up for use with latex
和
package inputenc error: Unicode char \u8:嫫 not set up for use with latex
通过反复试验,我确定这是由以下行引起的
booktitle={Computer Vision ECCV 2012. Workshops and Demonstrations},