答案1
subarray
仅支持c
并采取左对齐的其他措施。
% amsmath.sty, line 1031:
\newenvironment{subarray}[1]{%
\vcenter\bgroup
\Let@ \restore@math@cr \default@tag
\baselineskip\fontdimen10 \scriptfont\tw@
\advance\baselineskip\fontdimen12 \scriptfont\tw@
\lineskip\thr@@\fontdimen8 \scriptfont\thr@@
\lineskiplimit\lineskip
\ialign\bgroup\ifx c#1\hfil\fi
$\m@th\scriptstyle##$\hfil\crcr
}{%
\crcr\egroup\egroup
}
这个想法是,\hfil
只有当参数为 时,才会在左侧添加c
。任何其他值都将被忽略。
我们可以添加使用更好的测试:\hfil
在参数上有条件地添加。
\documentclass{article}
\usepackage{amsmath}
\ExplSyntaxOn
\NewDocumentCommand{\subarrayfill}{mm}
{
\str_if_in:nnT { #1 } { #2 } { \hfil }
}
\ExplSyntaxOff
\makeatletter
\renewenvironment{subarray}[1]{%
\vcenter\bgroup
\Let@ \restore@math@cr \default@tag
\baselineskip\fontdimen10 \scriptfont\tw@
\advance\baselineskip\fontdimen12 \scriptfont\tw@
\lineskip\thr@@\fontdimen8 \scriptfont\thr@@
\lineskiplimit\lineskip
\ialign\bgroup
\subarrayfill{cr}{#1}% add \hfil if center or right alignment
$\m@th\scriptstyle##$%
\subarrayfill{cl}{#1}% add \hfil if center or left alignment
\crcr
}{%
\crcr\egroup\egroup
}
\makeatother
\begin{document}
\[
\sum_{\begin{subarray}{c}
i<n\\ i+j=k
\end{subarray}} =
\sum_{\begin{subarray}{l}
i<n\\ i+j=k
\end{subarray}} =
\sum_{\begin{subarray}{r}
i<n\\ i+j=k
\end{subarray}}
\]
\end{document}
还可以添加检查,以确认参数是其中之一rcl
。
扩展我们的想法,我们可以\substack
用一个可选参数(默认c
)来丰富
\RenewDocumentCommand{\substack}{O{c}m}{%
\begin{subarray}{#1}#2\end{subarray}%
}
我们可以将上面的显示输入为
\[
\sum_{\substack{i<n\\ i+j=k}}
=
\sum_{\substack[l]{i<n\\ i+j=k}}
=
\sum_{\substack[r]{i<n\\ i+j=k}}
\]
然而,由于这会改变语法,因此\substack
可能不是一个好的选择。