问题

问题

编辑:这个问题已经彻底重新编辑以突出当前的问题。

我正在尝试模仿\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,无论使用哪种数学字体,所有内容都可以完美排列。

相关内容