XeTeX 在“垂直”时如何旋转字形?

XeTeX 在“垂直”时如何旋转字形?

我正在研究如何排版垂直中文文本。我无法理解当字体使用说明符加载时 XeTeX 如何旋转字形vertical。以下纯 XeTeX MWE 说明了我的问题:

\font\chinesefont="Source Han Serif SC:vertical" at 10pt
\setbox0\hbox{\chinesefont \char"4E00 }% CJK ideograph `one'
\the\wd0\ %
\the\ht0\ %
\the\dp0\ %
\box0 %
\setbox0\hbox{\chinesefont AHIO\char"5B57 }% CJK ideograph `letter'
\box0 %
\bye

垂直的

上面的截图需要一些解释:

  1. 画一条红色直线来标记基线。
  2. 表意文字 U+4E00 被正确地逆时针旋转了 90 度,并且明显延伸到了基线以下。然而,包含它的框的深度为零。事实上,如果我们查看旋转前的 U+4E00 字形,我们会看到它位于基线上方,高度为 5.14pt。这意味着,当 XeTeX 完成字形旋转时,生成的框的高度和深度与旋转前的字形相同。
  3. 字符 U+4E00、cap A、cap H、cap I、cap O 和 U+5B57 均以 呈现Source Han Serif SC:vertical。它们都具有相同的 10.0pt“水平”前进,并且它们围绕红色基线居中对齐(我故意选择对称且比例匀称的大写字母来显示这种效果)。

我的问题如下:

  • 关于第 2 项,“错误”的框尺寸是错误/功能吗?我应该向 XeTeX 存储库报告此问题吗?如果引擎没有修复此问题,是否可以在宏级别修复?
  • 关于第 3 项,我应该指出将所有旋转的字形围绕一个公共轴居中是进行垂直布局的正确方法。但是,轴是原始基线,这会导致旋转后的文本与未旋转的文本不“对齐”。更好的“中心轴”是高于原始基线 0.38em(这使得旋转后的表意文字的深度为 0.12em,这是 Source Han Serif 的预期设计)。我们可以通过 XeTeX 基元或宏自动将此中心轴配置为高于基线 0.38em 吗?

就像这样(但边界框很乱):

\font\chinesefont="Source Han Serif SC:vertical" at 10pt
Better alignment
\raise0.38em\hbox{\chinesefont \char"4E00 \char"5B57 }
Bad metrics
\bye

相关内容