subalign 和 unicode-math 之间的交互

subalign 和 unicode-math 之间的交互

多年来,我一直在使用在子堆栈中对齐。然而,使用 TexLive 2023 的完整更新版本,我最近观察到与 unicode-math 的负面交互。考虑以下 MWE:

\documentclass{article}

\usepackage{fontspec}
\usepackage{unicode-math}
\usepackage{amsmath}

\makeatletter
\newcommand{\subalign}[1]{%
  \vcenter{%
    \Let@ \restore@math@cr \default@tag
    \baselineskip\fontdimen10 \scriptfont\tw@
    \advance\baselineskip\fontdimen12 \scriptfont\tw@
    \lineskip\thr@@\fontdimen8 \scriptfont\thr@@
    \lineskiplimit\lineskip
    \ialign{\hfil$\m@th\scriptstyle##$&$\m@th\scriptstyle{}##$\hfil\crcr
      #1\crcr
    }%
  }%
}
\makeatother

\begin{document}
  \[
  \sum_{\substack{n=1\\n\neq i}}^N
  \sum_{\subalign{n&=1\\n&\neq i}}^N
  \sum_{\subalign{uvw&=1\\n&\neq ijk}}^N
  \]
\end{document}

其结果为:

平均能量损失

在 subalign 环境中存在大量额外的垂直间距,但在 substack 环境中不存在。注释 unicode-math 的使用可解决这些问题。

答案1

LuaTeX 对于数学字体参数有一个完全不同的方法。

这是一个修复版本,它使用和产生(基本上)相同的结果pdflatexxelatexlualatex

\documentclass{article}
\usepackage{iftex}

\iftutex % here just to be able to compare pdflatex and lualatex
\usepackage{fontspec}
\usepackage{unicode-math}
\fi
\usepackage{amsmath}

\makeatletter
\newcommand{\subalign}[1]{%
  \vcenter{%
    \Let@ \restore@math@cr \default@tag
    \ifluatex
      \baselineskip\Umathstacknumup\scriptstyle
      \advance\baselineskip\Umathfractiondenomdown\scriptstyle
      \lineskip=3\Umathfractiondenomvgap\scriptstyle
    \else
      \baselineskip\fontdimen10 \scriptfont\tw@
      \advance\baselineskip\fontdimen12 \scriptfont\tw@
      \ifxetex\baselineskip=0.724\baselineskip\fi
      \lineskip\thr@@\fontdimen8 \scriptfont\thr@@
    \fi
    \lineskiplimit\lineskip
    \ialign{\hfil$\m@th\scriptstyle##$&$\m@th\scriptstyle{}##$\hfil\crcr
      #1\crcr
    }%
  }%
}
\makeatother

\begin{document}
  \[
  \sum_{\substack{n=1\\n\neq i}}^N
  \sum_{\subalign{n&=1\\n&\neq i}}^N
  \sum_{\subalign{uvw&=1\\n&\neq ijk}}^N
  \]
\end{document}

输出pdflatex

在此处输入图片描述

输出lualatex

在此处输入图片描述

相关内容