Cedilla 在 XeLaTeX 中失败

Cedilla 在 XeLaTeX 中失败

此 MWE 与 pdflatex 配合使用时可以正常工作,但即使取消注释 fontspec,也无法使用 xelatex 生成 o-cedilla (o̧)。

\documentclass{article}
%\usepackage{fontspec}
\begin{document}
Here is a c-cedilla: \c{c} and an o-cedilla: \c{o}
\end{document}

我忽略了一些东西,但是是什么呢?

答案1

这是字体的问题,四十年前的错误设计决策加剧了这一问题。

默认情况下,当文档尝试使用当前字体没有的字符时,TeX 会将其替换为空格。你应该仔细校对每一行并发现这一点。

如果添加命令\tracinglostchars=3,这将成为一个错误,并且 TeX 引擎将崩溃并显示以下消息:

! 缺少字符:字体 [lmroman10-regular]:mapping =tex-text; 中没有 ̧ (U+0327)。

我建议您将其添加\tracinglostchars=3到所有文档中。(我发现默认行为现在是至少将警告消息打印到控制台,而不是默默失败,这曾经需要不同的命令。)

这告诉我们问题是什么:fontspec加载的默认字体没有组合变音符。要解决这个问题,请加载有组合变音符的字体,例如 New Computer Modern。使用软件包fontsetup是最简单的方法:

\documentclass{article}
\tracinglostchars=3
\usepackage[default]{fontsetup}

\begin{document}
Here is a c-cedilla: \c{c} and an o-cedilla: \c{o}
\end{document}

新计算机现代样本

Unicode 中没有预组合的 o̧,但有一个 ǫ (U+01EB),拉丁现代语中也有。你很可能真的想要一个 ogonek,而不是一个 cedilla。

\documentclass{article}
\usepackage{fontspec}

\DeclareRobustCommand\oogonek{\symbol{"01EB}}

\begin{document}
Here is a c-cedilla: \c{c} and an o-ogonek: \oogonek
\end{document}

这更多的是作为一个例子,但是:David Carlisle 指出这\k{o}适用于 ǫ。因此,将预组合的 UTF-8 字符直接输入到源文件中即可。

答案2

你可以制作一个变音符,但\textcommabelow它是现成的,可能(也可能不)适合

\documentclass{article}
%\usepackage{fontspec}
\DeclareTextCompositeCommand{\c}{TU}{o}{\textcommabelow{o}}
\begin{document}
Here is a c-cedilla: \c{c} and an o-cedilla: \c{o}
\end{document}

在此处输入图片描述

答案3

取消声明文本复合体并重新声明它;但是您很可能想要“o with ogonek”而不是带有变音符的。

问题是拉丁现代语没有“组合变音符”字符 U+0327。

\documentclass{article}
\usepackage{fontspec}

% https://tex.stackexchange.com/a/58115/4427
\providecommand*\UndeclareTextComposite[3]{%
  \expandafter\let\csname\expandafter\string\csname
  #2\endcsname\string#1-#3\endcsname\relax}

\UndeclareTextComposite{\c}{TU}{o}
\DeclareTextCompositeCommand{\c}{TU}{o}{\accent"B8 o}

\begin{document}

Here is a c-cedilla: \c{c} and an o-cedilla: \c{o}

Probably you want \k{o} (o with ogonek)

\end{document}

在此处输入图片描述

相关内容