![从 Biber 1.9 升级到 Biber 2.1 后出现输入编码错误](https://linux22.com/image/313668/%E4%BB%8E%20Biber%201.9%20%E5%8D%87%E7%BA%A7%E5%88%B0%20Biber%202.1%20%E5%90%8E%E5%87%BA%E7%8E%B0%E8%BE%93%E5%85%A5%E7%BC%96%E7%A0%81%E9%94%99%E8%AF%AF.png)
在 biber 2.1 下,我的 biblatex 产生输入编码错误。同样的程序在 biblatex 2.9a/biber 1.9 下运行顺利,现在我升级到 biblatex 3.0/biber 2.1,在 biber 之后运行 pdflatex 时,我收到以下消息:
包 inputenc 错误:Unicode 字符 \u8:╠ü 未设置为用于 LaTeX。
这是一个最小工作示例:
\documentclass{article}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[backend=biber]{biblatex}
\bibliography{test.bib}
\usepackage{filecontents}
\begin{filecontents}{test.bib}
@article{rodr,
author = {Rodr{\'{\i}}guez, A},
year = {1999} }
\end{filecontents}
\begin{document}
Rodr\'{\i}guez
\textcite{rodr}
\printbibliography
\end{document}
任何帮助都值得感激!
答案1
运行biber
biber --output-safechars <file>
答案2
书写Rodr{\'{\i}}guez
似乎没有必要那么复杂。我建议你直接书写Rodr{\'i}guez
。这样做不仅更容易,而且还会让biber
/inputenc
问题自动消失。
顺便,外部该bib
文件,即在 tex 文件正文中,我会写入Rodr\'iguez
。
答案3
这是 biber 2.1 中特别的更改\i
。现在 biber 正确地将其编码为无点 i (ı - 0x0131) 并带有组合重音符。尽管 biber 总是在输出时转换为预组合 (NFC) 形式,因此通常对 inputenc 尽可能友好,但这种组合没有预组合形式。对于普通的“i”后跟相同的组合字符,有一种预组合形式,但这是错误的,而且是完全不同的东西,在某些字体中会导致问题,并且在解码时需要特殊情况。\'i
通常是更好的选择,因为大多数字体都知道其中的“i”不应该同时带有点和重音符(或者,如果您幸运的话,您只是因为重音符而看不到点)。inputenc 还知道普通的 ISO8859-1 文字í
字符,因此您可以直接使用这些字符而无需任何宏。
如果您从某个外部来源获取数据,因此无法选择获取带重音符的“i”的形式,请放入 biber 源映射以修复代码(如果您遇到无点“i”的输入或字体问题):
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite]{
\step[fieldsource=author,
match=\regexp{\x{0131}\x{0301}},
replace=\regexp{\x{00ED}}]
}
}
}
由于宏解码为 UTF8 是在源映射之前完成的,因此在应用映射时它已经是 UTF-8 NFD 格式了。上面的代码只是将无点 i (U+0131) 更改为带有尖音符 (U+0301) 的标准 ISO 8859-1 小写 i,并由 inputenc 支持尖音符 (U+00ED)。
--output-safechars
或者您可以在编写 .bbl 时使用 biber选项强制将 UTF-8 编码到 LaTeX 宏中。
答案4
如果直接输入í
,它可以正常运行:
\documentclass{article}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[backend=biber]{biblatex}
\bibliography{test.bib}
\usepackage{filecontents}
%
\begin{filecontents}{test.bib}
@article{rodr,
author = {Rodríguez, A},
year = {1999} }
\end{filecontents}
\begin{document}
Rodríguez
\textcite{rodr}
\printbibliography
\end{document}