编辑:这个问题已经彻底重新编辑以突出当前的问题。
我正在尝试模仿\overline
来创造类似的符号。根据上划线厚度关于 TeX.SX,以及unicode-math
手动的,我收集了以下信息:
| | Type 1 | OpenType + LuaTeX | OpenType + XeTeX |
|------|---------------------|-------------------|------------------|
| kern | fontdim 8 fam 3 | \Umathoverbarkern | fontdim 55 fam 2 |
| rule | fontdim 8 fam 3 | \Umathoverbarrule | fontdim 54 fam 2 |
| vgap | 3 × fontdim 8 fam 3 | \Umathoverbarvgap | fontdim 53 fam 2 |
然而,当我尝试实现这一点时,我发现以下是实际上用于 XeTeX 下的 OpenType:
| | OpenType + XeTeX |
|------|----------------------|
| kern | fontdim 54 fam 2 |
| rule | fontdim 54 fam 2 |
| vgap | 3 × fontdim 54 fam 2 |
此外,上述“错误”表格与费拉数学在 CTAN 上,尽管这可能是字体问题(请参阅Fira Math 第 29 期)。
问题
这是 XeTeX 引擎错误吗?我如何才能知道正在使用哪种字体尺寸?XeTeX 似乎没有提供关于这些主题的任何参考手册。
平均能量损失
% !TeX program = LuaLaTeX % <- Everything lines up perfectly
% !TeX program = XeLaTeX % <- Not good for Fira Math
\documentclass{article}
\usepackage{unicode-math}
\setmathfont[version=L]{Latin Modern Math}
\setmathfont[version=P]{TeX Gyre Pagella Math}
\setmathfont[version=T]{TeX Gyre Termes Math}
\setmathfont[version=F]{Fira Math}
\makeatletter
\def\test@overbarkern@fontdimen{55}% Not used. XeTeX mistake?
\def\test@overbarrule@fontdimen{54}
\def\test@overbarvgap@fontdimen{53}% Not used. XeTeX mistake?
\def\test@@family{2}
\def\test@overbarkern#1{\fontdimen\test@overbarrule@fontdimen
\ifx#1\displaystyle\textfont
\else\ifx#1\textstyle\textfont
\else\ifx#1\scriptstyle\scriptfont
\else\scriptscriptfont\fi\fi\fi \test@@family}
\def\test@overbarrule#1{\fontdimen\test@overbarrule@fontdimen
\ifx#1\displaystyle\textfont
\else\ifx#1\textstyle\textfont
\else\ifx#1\scriptstyle\scriptfont
\else\scriptscriptfont\fi\fi\fi \test@@family}
\def\test@overbarvgap#1{\thr@@\fontdimen\test@overbarrule@fontdimen
\ifx#1\displaystyle\textfont
\else\ifx#1\textstyle\textfont
\else\ifx#1\scriptstyle\scriptfont
\else\scriptscriptfont\fi\fi\fi \test@@family}
\ifx\XeTeXcharclass\@undefined
% LuaTeX primitives
\global\let\test@overbarkern\Umathoverbarkern
\global\let\test@overbarrule\Umathoverbarrule
\global\let\test@overbarvgap\Umathoverbarvgap
\fi
\newcommand*\test{\mathpalette\test@stuff{xyz}}
\def\test@stuff#1#2{%
\vbox{\hrule\@height0.1\p@\hbox{$\m@th#1\overline{#2}$}}\,%
\vbox{%
\hrule\@height0.1\p@
\kern\test@overbarkern#1%
\hrule\@height\test@overbarrule#1%
\hbox{\vbox{%
\kern\test@overbarvgap#1%
\hbox{$\m@th#1#2$}%
}}%
},%
}
\newcommand*\dotest[1]{%
\begingroup
\mathversion{#1}%
$\displaystyle\test$ $\textstyle\test$ $\scriptstyle\test$ $\scriptscriptstyle\test$%
\endgroup
}
\makeatother
\begin{document}
\dotest{L}\par
\dotest{P}\par
\dotest{T}\par
\dotest{F}
\end{document}
XeLaTeX 输出:
使用 LuaLaTeX,无论使用哪种数学字体,所有内容都可以完美排列。