为什么卡隆和短音的处理方式不同

为什么卡隆和短音的处理方式不同

我正在使用 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.definputenc无法处理它们。

保留以下选项:

  • 根据评论,使用\v{z}而不是可能是正确的拼写。\u{z}

  • 该示例使用可以处理 Unicode 组合重音符号的 LuaTeX 和 XeTeX 运行。

  • safeinputenc包选项,biblatex请参阅 pst回答

  • 使用bibtex而不是biber作为后端。

结果

答案2

错误在于首先使用了短音符。没有语言使用短音符,Unicode 没有为其留出位置就证明了这一点。另请参阅短音符 (维基百科). 雕文只能通过

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 不同意,但他在开发版本中添加了一些相关选项。(有关详细信息,请参阅该问题。)

相关内容