对于拼音(中文罗马化),我非常喜欢随我的 TeX 系统安装的字体 TeXGyreTermes-Regular 的外观。
但是,它似乎缺少我需要的一个拼音符号:ǖ ([U+01d6])。TeX 和标准文字处理器中都没有出现这个字符。
除了使用其他字体外,有人知道是否有其他方法可以解决这个问题?
(OP 添加了以下内容作为对 Villemoes 答案的建议修改。我将其移至问题中。—Caramdir)
稍等片刻后回来;非常感谢您的帮助。
首先,我在 LaTeX 中尝试了您的代码,它对 ǖ 运行良好,尽管似乎其他一些带变音符号的元音也需要像 ǖ 那样指定。事实上,它们会产生 inputenc 错误。
其次,关于 ǖ 和其他带长音符号的元音之间的区别,我是这样解释的:添加
\DeclareUnicodeCharacter{0101}{\={a}}
对于您的代码,长音符没问题:我最初遇到的问题是,\={ü}
在 XeLaTex 中尝试但没有您的添加时,长音符看起来像这样:
第三:然而,更令人不安的是,你的代码似乎无法在 XeLaTeX 下工作,而我使用的是 XeLaTeX 来完全支持中文脚本。虽然 Termes 看起来很漂亮,但使用 Times New Roman 可能工作量更少。
再次感谢你的帮助。
答案1
首先:如果不存在此类缺失的重音字符,总是可以构造它们的,毕竟您想要的只是一个上面带有横线的 ü。
主要问题是如何构造它们。查看 xunicode.sty 会显示\=
和\textdieresisoverline
。默认情况下,它们被映射到字符 U+01D6,但可以取消声明它们并测试会发生什么。实际上,它们的结果与您的字体看起来不太好,所以我想您必须坚持使用类似下面的方法\mybar
\documentclass{article}
\makeatletter
\DeclareTextCommand{\mybar}{EU1}[1]
{\leavevmode\setbox\z@\hbox{#1}\dimen@\ht\z@%
\rlap{\raise1.1\dimen@\hbox{\kern0.1\wd\z@\rule{0.8\wd\z@}{0.4pt}}}#1}
\makeatother
\usepackage{fontspec}
\UndeclareUTFcomposite[\UTFencname]{x01D6}{\textdieresisoverline}{u}
\UndeclareUTFcomposite[\UTFencname]{x01D6}{\=}{\"u}
\setmainfont{TeX Gyre Termes}
\setsansfont{Times New Roman}
\setmonofont{Linux Libertine O}
\begin{document}
%Tex Gyre
\noindent
direct: ^^^^01d6\\
mybar: \mybar{ü}\\
textdieresisoverline: \textdieresisoverline{u}\\
\textbackslash=: \={ü}
%Times
\sffamily
\noindent
direct: ^^^^01d6\\
mybar: \mybar{ü}\\
textdieresisoverline: \textdieresisoverline{u}\\
\textbackslash=: \={ü}
\ttfamily %Linux
\noindent
direct: ^^^^01d6\\
mybar: \mybar{ü}\\
textdieresisoverline: \textdieresisoverline{u}\\
\textbackslash=: \={ü}
\end{document}
答案2
您可以通过将长音符号与字形 ü 组合来自己构建它(根据 Unicode,这确实是一种合法的分解,尽管如果字体包含字形本身,结果可能会稍微好一些)。
然后,您可以用来\DeclareUnicodeCharacter
告诉 LaTeX 当遇到 U+01D6 时该做什么。
我认为包含此字符的单词将禁用连字符,但我不知道拼音中是否有连字符。无论如何,您始终可以插入 \-
以手动允许连字符。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{tgtermes}
\DeclareUnicodeCharacter{01D6}{\={ü}}
\begin{document}
% This should give the desired output.
ü ǖ
\end{document}