后续问题:TeX 重音符号似乎不适用于 fontspec 和 xe/lua/latex

后续问题:TeX 重音符号似乎不适用于 fontspec 和 xe/lua/latex

这是这个问题

上面的点看起来会怎么样?也就是说,的标准定义是什么\.

或者是否有人同时知道整个问题的更好解决方案?(有趣的是,整个问题在从 Ubuntu 11.04 附带的版本切换到 TeX Live 2011 时出现。飞行口音曾经与该版本一起使用fontspec。)

一个简单的例子:

\documentclass{minimal}
\usepackage{fontspec}
\defaultfontfeatures{Mapping=tex-text}
\setmainfont{Garamond Premier Pro}
\begin{document}
\.m ṁ
\end{document}

使用 texlive-2011 时,会出现两个缺失字符,而使用 Ubuntu 11.04 版本时,带有飞扬重音的字符会正确显示。我知道 Ubuntu 11.04 版本fontspec没有引入xunicode,但我在那里单独包含了它,所以问题应该与此无关。

答案1

标准定义取决于字体编码:对于 OT1 和 T1,它是一个重音符号(您可以在OT1enc.def和中找到定义T1enc.def)。当您使用较新的字体fontspec(加载xuniode)时,EU1(xelatex)或 EU2(lualatex)字体编码的一般定义是\.它是一个“组合点”:

\DeclareEncodedCompositeCharacter{\UTFencname}{\.}{0307}{02D9}  % Combining dot above

一些特殊组合被映射到特定的字形。例如\.eUnicode U+0117:

\DeclareUTFcomposite[\UTFencname]{x0117}{\.}{e}

理论上,应该可以重写命令,以便它们检查字形是否可用,如果不可用则使用一些后备。实际上,我怀疑这是否合理。如果直接输入字形而不是使用重音命令,那将没有帮助,它会减慢编译速度,这意味着在 xunicode 中决定和实现合理的后备需要做大量工作(并且会使 xunicode 变得更大)。如果您想在 xelatex 中使用非标准字符,最好使用具有字形的字体。如果缺少少量字形,请根据您链接到的问题中建议的方法添加后备。

编辑:实际上,您链接到的问题建议用 重新定义\d\renewcommand这不是一个好主意,因为它也会影响其他编码中的 的定义。应该始终使用各种编码相关声明之一。在下面的示例中,您应该比较在 OT1 编码部分上使用和\d行之间的差异。要解决您的实际问题,您可以尝试行。如果您的字体有点音符,它应该可以工作。\renewcommand\DeclareTextCommand\DeclareTextAccent

\documentclass{article}
\usepackage{fontspec}
\setmainfont{Garamond}
%\DeclareTextCommand{\.}{\UTFencname}[1]{(#1)}
%\renewcommand\.[1]{(#1)}
%\DeclareTextAccent{\.}{\UTFencname}{"02D9}

\begin{document}
\.C \.a, \.w \.W

\fontencoding{OT1}\selectfont  \.w

\end{document}

相关内容