我正在使用 biblatex,想将作者 Kruzhkov 添加到我的参考书目中。据我所知,他写的Kru\u{z}kov
以这种方式编写会导致错误,如下所示:inputenc 错误:Unicode 字符 \u8:未设置为与 LaTeX 一起使用
如果我Kru\v{z}kov
改为写,一切都会正常。我正在使用带有 [utf8] 选项的 inputenc 包。有什么想法吗?
答案1
如果不使用 LuaTeX/XeTeX 进行编译,则 MWE 和显示问题的测试文件:
\documentclass{article}
\usepackage{ifluatex,ifxetex}
\ifluatex
\usepackage{fontspec}
\else
\ifxetex
\usepackage{fontspec}
\else
\usepackage[utf8]{inputenc}
\fi
\fi
\usepackage[
backend=biber,
]{biblatex}
\begin{filecontents}{\jobname.bib}
@book{foobar,
author = {Kru\u{z}kov and Kru\v{z}kov},
title = {About foobar},
year = {1970},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\cite{foobar}
\printbibliography
\end{document}
该程序biber
将数据输入标准化为 NFD UTF-8,其中所有重音字符均被分解。摘自其文档:
3.2 Unicode
Biber 内部使用 NFD UTF-8。读取时所有数据均转换为 NFD UTF-8。如果请求 UTF-8 输出(例如 .bbl),UTF-8 将始终 > NFC。
在最终文件中\jobname.bib
,分解内容将被等效的预组合字符所取代(如果存在的话)。
LaTeX → 内部 biber (NFD UTF-8) → biber 输出 (NFC UTF-8)
\v{z}
→ U+007A
(z) U+030C
(结合卡龙)→ U+017E
(拉丁小写字母 z 和卡龙)
\u{z}
→ U+007A
(z) U+0306
(结合短音)→U+007A
U+0306
因此\u{z}
仍处于分解状态,这是一个严重的问题,因为如果重音符号跟在符号后面,TeX 就无法轻松处理组合重音符号。此时重音符号可见,符号通常已设置,重音符号无法再修改基本符号。更糟糕的是,它甚至不知道基本符号。
软件包ucs
可以通过提前查看组合口音来在一定程度上处理组合口音。但此软件包与软件包不兼容biblatex
。此外,它可能无法正常\u{z}
工作,可能是因为不存在预组合字符。
LaTeX 的utf8.def
包inputenc
无法处理它们。
保留以下选项:
根据评论,使用
\v{z}
而不是可能是正确的拼写。\u{z}
该示例使用可以处理 Unicode 组合重音符号的 LuaTeX 和 XeTeX 运行。
safeinputenc
包选项,biblatex
请参阅 pst回答。使用
bibtex
而不是biber
作为后端。
答案2
错误在于首先使用了短音符。没有语言使用z̆
短音符,Unicode 没有为其留出位置就证明了这一点。另请参阅短音符 (维基百科). 雕文z̆
只能通过
U+007A(拉丁小写字母 Z)U+0306(结合短音符)
而不是预先组合的字符。
如果这位作者名字的“美国”音译是 Kruzhkov,那么正确的变音符号是 卡龙:Kružkov
。错误可能导致打字员或 OCR 软件的错误解释。所有用拉丁字母或其音译书写的斯拉夫语都使用 卡龙。
不管怎样,唯一的解决办法就是修复源头\v{z}
。
我认为你所引用的作者是(美式音译)斯坦尼斯拉夫·尼古拉耶维奇·克鲁日科夫;他的名字在俄语中写为Станислав Николаевич Кружков(见mathru.net 中的此条目和对应的英文)。该名称的“科学”音译,最好称为 ISO 9,是
斯坦尼斯拉夫·尼古拉耶维奇·克鲁日科夫
并且不可能用短调代替卡隆。请参阅相关维基百科页面。
答案3
问题
以下是所需的 MWE:
\begin{filecontents}{\jobname.bib}
@book{withbreve,
author = {Kru\u{z}kov},
title = {With Breve},
year = 2014}
@book{withcaron,
author = {Kru\v{z}kov},
title = {With Caron},
year = 2014}
\end{filecontents}
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{biblatex}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
结果! Package inputenc Error: Unicode char \u8:̆ not set up for use with LaTeX.
是,biber 将所有内容转换为 Unicode,并将转换后的版本发送回 LaTeX(在 bbl 文件中)。此处 Caron 和 Breve 之间的区别在于,有一个预组合的 Unicode 字符 LATIN SMALL LETTER Z WITH CARON,而 LaTeX 可以处理它。对于 breve 情况,则会发送分解形式,而 LaTeX 无法处理这种情况。
修复
对此示例的修复方法是使用\usepackage[safeinputenc]{biblatex}
。
Biber 需要对很多事情进行转换,比如排序和识别同名的多次出现。我认为如果这是 Biber 仅使用的内部形式而不是它返回的东西会更好。我已将此报告为一个问题针对 biber。尽管 plk 不同意,但他在开发版本中添加了一些相关选项。(有关详细信息,请参阅该问题。)