在子堆栈中对齐

在子堆栈中对齐
\sum_{\substack{n=1\\n\neq i}}^N

使用\substack将多行作为和的下标添加不会使它们在等号/不等号上对齐。我发现这个问题的一些答案\hphantom,就像幻影角色或环境一样aligned;然而,前者对我来说没用,而后者破坏了间距,我宁愿不必手动修复它。

是否存在一个类似于在数学环境中使用与符号简单地对齐两行的包tabular

答案1

这本质上是重复\substack,但添加了一个对齐点。

\documentclass{article}
\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}

在此处输入图片描述

https://tex.stackexchange.com/a/697656/4427与 LuaLaTeX 兼容的版本

答案2

您还可以\mathmakebox使用mathtools

\mathmakebox[width][pos]{content}

梅威瑟:

\documentclass{article}
\usepackage{mathtools}
\usepackage{calc}   %% provides \widthof

\begin{document}
\[
\sum_{\substack{xyz=1\\n\neq 45}}^N
\quad\text{vs.}\quad
\sum_{\substack{xyz=1\\\mathmakebox[\widthof{$xyz$}+2\fboxrule][r]{n} \neq 45}}^N
\]
\end{document}

在此处输入图片描述

答案3

array您可以按照以下示例定义自己的专用环境;第一个表达式使用“常规”\substack表达式,第二个表达式使用名为的自定义数组环境mysubarray。(我提前为缺乏数学意义表示深深的歉意——该示例仅用于说明印刷方面。)

在此处输入图片描述

\documentclass{article}
\usepackage{array,amsmath}

\newcolumntype{L}{>{\scriptstyle}l}
\newcolumntype{C}{>{\scriptstyle}c}
\newcolumntype{R}{>{\scriptstyle}r}
\newenvironment{mysubarray}{%
  \scriptstyle
  \setlength\arraycolsep{0pt}%
  \setlength\extrarowheight{-1ex}
  \renewcommand\arraystretch{0}
  \begin{array}{RCL}}{\end{array}}

\begin{document}
\[
\sum_{\substack{xyz=1\\n\neq 45}}^N
\quad\text{vs.}\quad
\sum_{\begin{mysubarray}
      xyz&=&1 \\ n&\neq&45
        \end{mysubarray}}^N
\]
\end{document}

相关内容