这是这个问题。
上面的点看起来会怎么样?也就是说,的标准定义是什么\.
?
或者是否有人同时知道整个问题的更好解决方案?(有趣的是,整个问题在从 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
一些特殊组合被映射到特定的字形。例如\.e
Unicode 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}