TeXGyreTermes 字体中缺少字形

TeXGyreTermes 字体中缺少字形

对于拼音(中文罗马化),我非常喜欢随我的 TeX 系统安装的字体 TeXGyreTermes-Regular 的外观。

但是,它似乎缺少我需要的一个拼音符号:ǖ ([U+01d6])。TeX 和标准文字处理器中都没有出现这个字符。

除了使用其他字体外,有人知道是否有其他方法可以解决这个问题?


OP 添加了以下内容作为对 Villemoes 答案的建议修改。我将其移至问题中。—Caramdir

稍等片刻后回来;非常感谢您的帮助。

首先,我在 LaTeX 中尝试了您的代码,它对 ǖ 运行良好,尽管似乎其他一些带变音符号的元音也需要像 ǖ 那样指定。事实上,它们会产生 inputenc 错误。

其次,关于 ǖ 和其他带长音符号的元音之间的区别,我是这样解释的:添加

\DeclareUnicodeCharacter{0101}{\={a}}

对于您的代码,长音符没问题:马克龙超过 ǔ 和 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}

相关内容