我使用 Mendeley 管理我的参考书目,并让它自动更新 .bib 文件。不幸的是,这经常导致编译时出现“Package inputenc Error”。
我把我的问题缩小到这个 MWE(虽然不起作用,但可以删除 .bib 中的 \c{e}):
特殊.tex:
\documentclass{report}
\usepackage[T1]{fontenc} % necessary for "old text encoding" apparently (like for \k{a} (ogonek used in Polish))
\usepackage[utf8]{inputenc}
\usepackage[backend=biber]{biblatex}
\addbibresource{special.bib}
\begin{document}
text:
\c{c}
\k{e}
\k{a}
\^{o}
\c{e}
\cite{foo2016}
\printbibliography
\end{document}
特殊.bib:
@article{foo2016,
title = {{title}},
author = {
\c{c}
\k{e}
\k{a}
\^{o}
\c{e}
},
}
problematic characters:
{\c{e}}
我编译如下:
pdflatex special.tex
biber special
pdflatex special.tex
当从 bib 条目中删除 \c{e} 时,编译仍然有效,尽管 .tex 文件中存在相同的字符,并且在主文本中呈现没有问题。
虽然我可能在这里只使用 \k{e},这样就行了,但这只是众多条目中的一个,每当我在 Mendeley 或类似软件中进行 DOI 查找时,这些条目都会经常出错。如果可能的话,我宁愿根本不担心编码问题。
版本:
- biber:v1.9
- pdflatex:pdfTeX 3.14159265-2.6-1.40.15(TeX Live 2014/Debian)
- biblatex:v2.9a
(但我在安装了较新软件包的 ubuntu 16.04 上也遇到了同样的问题,尽管我目前无法在那里进行测试)
编辑:这是 Mendeley 中的 DOI 查找生成的完整条目(我创建了一个新条目以确保这不是我自己的错误):
@article{new_test_entry,
author = {Reithmaier, J. P. and S{\c{e}}k, G. and L{\"{o}}ffler, A. and Hofmann, C. and Kuhn, S. and Reitzenstein, S. and Keldysh, L. V. and Kulakovskii, V. D. and Reinecke, T. L. and Forchel, A.},
doi = {10.1038/nature02969},
issn = {0028-0836},
journal = {Nature},
mendeley-groups = {Personal},
month = {nov},
number = {7014},
pages = {197--200},
title = {{Strong coupling in a single quantum dot–semiconductor microcavity system}},
url = {http://www.nature.com/doifinder/10.1038/nature02969},
volume = {432},
year = {2004}
}
答案1
biber 会(并非总是,但经常)将重音命令转换为分解的 unicode 表示“字符 + 组合重音”。但 pdflatex 无法处理组合重音。因此,只要您使用 pdflatex,就必须避免发生这种情况。
为此,您可以
--output-safechars
使用类似选项告诉 biber 不要以 utf8 格式输出所有内容- 或者直接在 bib 中输入正确的 utf8 字符,在您的情况下为拉丁小写字母 E 带下划线' (U+0229) 作为 ȩ。有时您必须为此类字符添加定义。
- 或者,如果您想使用 bib 中的命令,请使用不同的名称(例如 \cedilla{e})来欺骗 biber,然后在文档中执行
\let\cedilla\c
。但请注意,biber 不再能识别所需的字形,因此排序可能会出错。
编辑:
其实这是其中一个案例没有输出一个组合重音符。问题很简单,U+0229 没有声明。只需在 bib 中添加\DeclareUnicodeCharacter{0229}{\c{e}}
和即可。\c{e}
为了演示最后两条建议。此 bib 文件
@article{foo2016,
title = {{title}},
author = {
\c{c}
\k{e}
\k{a}
\^{o}
\cedilla{e}
ȩ
},
}
有了这个文件
\documentclass{report}
\usepackage[T1]{fontenc} % necessary for "old text encoding" apparently (like for \k{a} (ogonek used in Polish))
\usepackage[utf8]{inputenc}
\usepackage[backend=biber]{biblatex}
\addbibresource{special.bib}
\newcommand\cedilla{}
\let\cedilla\c
\DeclareUnicodeCharacter{0229}{\c{e}}
\begin{document}
\cite{foo2016}
\printbibliography
\end{document}
将给出这个结果
答案2
我想指出的是xelatex
,只要字体包含所有字符,它就可以很好地与 配合使用。它似乎lmodern
没有。使用(默认使用,和(的扩展)的ȩ
演示):lmodern
xelatex
erewhon
Adobe Utopia
\documentclass{report}
\usepackage{fontspec}
\setmainfont{erewhon}
\usepackage{csquotes} \usepackage[backend=biber]{biblatex}
\addbibresource{special.bib}
\begin{document}
text:
ç
ę
ą
ô
ȩ
\cite{foo2016}
\printbibliography
\end{document}
围兜文件:
@article{foo2016, title = {{title}}, author = {
ç
ę\k{e}
ą\k{a}
ô
ȩ\c{e}
}, }
结果为lmodern
:
结果为erewhon
: