Biber 在读取 bib 条目时似乎会写入一些奇怪的 unicode 字符,其中重音字符í
已输入为\'\i
。这会导致使用 pdflatex(和 utf8 输入)时编译中断,并在 xelatex 中使用某些字体时产生奇怪的字符或随机错误。我怎样才能让 biber 产生正确的字符?
下面是最小示例
\documentclass{article}
\begin{filecontents}{test.bib}
@article{sample,
Author = {Ver{\'o}nica Mac{\'\i}as},
Title = {My Sample Paper},
Journal = {Journal of Sample Documents},
Year = {2011}}
\end{filecontents}
\usepackage{iftex}
\ifXeTeX
\usepackage{fontspec}
\setromanfont[Mapping=tex-text]{Minion Pro}
\else
\usepackage[utf8]{inputenc}
\fi
\usepackage[backend=biber]{biblatex}
\addbibresource{test.bib}
\begin{document}
Verónica Macías \cite{sample}
\printbibliography
\end{document}
如果我跑
pdflatex test
biber test
pdflatex test
我得到了错误
! Package inputenc Error: Unicode char \u8:́ not set up for use with LaTeX.
如果改为(清理辅助文件之后)我运行:
xelatex test
biber test
xelatex test
xelatex test
然后我会随机得到
** ERROR ** Charstring too long: gid=1679
或者编译成功,但输出如下
我怎样才能说服 biber 生成正确的 unicode 字符í
?
PS:是的,我知道我可以通过改变 bib 文件的编码来解决问题,但假设我不想这样做,因为该文件是在其他地方自动生成的,这就是我得到的结果。
答案1
使用正确的语法:
Author = {Ver{\'{o}}nica Mac{\'{i}}as}
或者直接
Author = {Verónica Macías}
确保文件是 UTF-8 编码的。在 pdflatex 和 xelatex 中均可使用。\i
多年来,LaTeX 不再要求在主要重音符号后加上括号,但重音字母周围的括号从起源上来说就是 BibTeX 语法。
如果确实无法修改文档,以下方法似乎有效
XeLaTeX:
\begingroup\lccode`\~=\string"0131
\lowercase{\endgroup\protected\def~}#1{\char\string"00ED}
\catcode\string"0131=\active
或者更简单地说,
\catcode`ı=13 \protected\defı#1{í}
PDFLaTeX:
\DeclareUnicodeCharacter{0131}{í}
\DeclareUnicodeCharacter{0301}{}
如果您也有某个地方,则需要更复杂的东西\`\i
。
答案2
你必须这样写作者条目:
Author = {Ver{\'o}nica Mac{\'{\i}}as},
那么它可以工作,至少对于 XeLaTeX 来说