![Cedilla 在 XeLaTeX 中失败](https://linux22.com/image/468152/Cedilla%20%E5%9C%A8%20XeLaTeX%20%E4%B8%AD%E5%A4%B1%E8%B4%A5.png)
此 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
答案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}