多年来,我一直在使用在子堆栈中对齐。然而,使用 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 对于数学字体参数有一个完全不同的方法。
这是一个修复版本,它使用和产生(基本上)相同的结果pdflatex
。xelatex
lualatex
\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}