![为什么所有黑体字体都出现在 ConTeXt 基线以下?](https://linux22.com/image/249256/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%89%80%E6%9C%89%E9%BB%91%E4%BD%93%E5%AD%97%E4%BD%93%E9%83%BD%E5%87%BA%E7%8E%B0%E5%9C%A8%20ConTeXt%20%E5%9F%BA%E7%BA%BF%E4%BB%A5%E4%B8%8B%EF%BC%9F.png)
使用中文时,黑体字体相当于无衬线字体。它们通常线条简单。
我想对文档中的所有标题和描述标签使用黑体字体,但是,我发现使用任何黑体字体时,单词都无法正确显示在基线上。
此来源使用 OS X 计算机上可用的 STSong、STHeiti 和 STKaiti 字体演示了该问题:
\setscript[hanzi]
\mainlanguage[cn]
\starttypescript[serif][stsong]
\definefontsynonym[Serif][name:stsong][features=chinese]
\stoptypescript
\starttypescript[sans][stheiti]
\definefontsynonym[Sans][name:stheitijlight][features=chinese]
\stoptypescript
\starttypescript[mono][stkaiti]
\definefontsynonym[Mono][name:stkaiti][features=chinese]
\stoptypescript
\definetypeface[stsong][rm][serif][stsong]
\definetypeface[stheiti][ss][sans][stheiti]
\definetypeface[stkaiti][tt][mono][stkaiti]
\setupbodyfont[stsong, 12pt]
\setuppapersize[A5]
\setuplayout[grid=yes]
\showgrid
\setupdescriptions[headstyle=\stheiti, width=2em, align=right]
\definedescription[descr]
\starttext
\language[en]{
{\stsong This is some text in STSong.}
{\stheiti This is some text in STHeiti.}
{\stkaiti This is some text in STKaiti.}
}
\language[cn]{
{\stsong 这是一个句子。}
{\stheiti 这是一个句子。}
{\stkaiti 这是一个句子。}
}
\startdescr{\language[cn]{标签}}
\language[en]{This is some text.}
\stopdescr
\stoptext
编译后,我发现 STHeiti 文本不在第 2 行和第 7 行的基线上:
- 第 2 行,STHeiti 文本出现在基线上方的很大一部分。这在 PDF 中更加明显。
- 第 5 行没有任何问题。这些字符中的大多数都有正确延伸到基线以下的部分。
- 在第 7 行,中文的描述标签比英文文本的位置低得多。
我尝试用其他 Heiti 字体(例如 Adobe Heiti Std 和 STXihei)替换 STHeiti,但这些字体也出现了同样的问题。
为什么文本会出现在不同的层次上?如何确保不同的字体(特别是在描述环境中)出现在同一基线上?
答案1
至于偏离基线的问题,我相信这是字体的“问题”,或者是他们试图将拉丁字符和中文字符放在同一基线上的方式的问题。您可以在纯 XeTeX 中尝试以下示例,您将得到相同的结果:
\font\a="[STHeiti Light.ttc]"
hello \a hello 这是一个句子
\bye
您可能会提出功能请求来手动调整某些字体的基线,但最终中文字符可能会低于基线。
其余答案来自 Hans Hagen。使用以下输入会遇到同样的问题:
\definefont[BigOne][SerifBold at 30pt]
\definedescription[descr][headstyle=\BigOne, width=2em, align=right]
\starttext
\startdescr{bla}
\language[en]{This is some text.}
\stopdescr
\stoptext
2012.05.24 15:18 版本应该可以解决这个问题。你可以试试吗?