如何在多个 \begin{cases} 后调整多个 \vdots 的位置?

如何在多个 \begin{cases} 后调整多个 \vdots 的位置?

以下是 MWE:

\documentclass[12pt]{article}

\usepackage{amsfonts, amsthm, amsmath, amssymb}

%=====

\begin{document}

\begin{multline*}
\\
%
\text{Text}
\begin{cases}
AAA\\ 
AAA
\end{cases}\\
%
\text{Text}
\begin{cases}
AAA\\ 
AAA
\end{cases}\\
%
\text{Text}
\begin{cases}
AAA\\ 
AAA
\end{cases}\\
%
\vdots\vdots\vdots\vdots\\
%
\end{multline*}

\end{document}

我希望能够正确对齐多个\vdots。我认为如果我可以手动调整多个的位置就好了\vdots

第一个\vdots应该与“Text”对齐。至于其余的\vdots,每个都应该与一个字母 A 对齐。

我怎样才能做到这一点?

答案1

TeX 引擎 pdfTeX、LuaTeX 和 XeTeX 确实支持\pdfsavepos可用于将当前位置(稍后在发货时知道)记录到文件的功能.aux。然后可以在下一次 LaTeX 运行中使用这些位置。例如,包zref-savepos提供了此功能的接口。

元素的中间部分用了一个小技巧,将元素变成一个数学运算符,然后在中间加上一个下标。这样下标就用来记录水平位置(\zsaveposx)。在 的情况下A,表达式被放入 中,\smash以免干扰正常的排版,括号的大小,以不可见的高度或特殊的深度。

然后在目标线上用一个宽度为零的框来获取固定位置,记录当前的水平位置,然后利用水平位置的差值来设置垂直点。

例子:

\documentclass[12pt]{article}

\usepackage{amsfonts, amsthm, amsmath, amssymb}

\usepackage{zref-savepos}
\makeatletter
\@ifundefined{zsaveposx}{% older zref
  \let\zsaveposx\zsavepos
  \let\zsaveposy\zsavepos
}{}
\makeatother

\begin{document}

\begin{multline*}
\\
%
\text{Text}
\begin{cases}
AAA\\ 
AAA
\end{cases}\\
%
\text{Text}
\begin{cases}
AAA\\ 
AAA
\end{cases}\\
%
\mathop{\text{Text}}_{\zsaveposx{Text}}
\begin{cases}
AAA\\
\def\Apos#1{%
  \makebox[0pt][l]{%
    \smash{$\mathop{\hphantom{A}}\limits_{\zsaveposx{A#1}}$}%
  }%
  A%
}
\Apos1 \Apos2 \Apos3
\end{cases}\\
\makebox[0pt][l]{%
  \zsaveposx{vdots0}%
  \kern-\zposx{vdots0}sp%
  \def\putdots#1{%
    \makebox[0pt][l]{%
      \kern\zposx{#1}sp%
      \makebox[0pt][c]{%
        $\vdots$%
      }%
    }%
  }%
  \putdots{Text}%
  \putdots{A1}%
  \putdots{A2}%
  \putdots{A3}%
}
\end{multline*}
\end{document}

结果LaTeX 运行:

结果

以 BCD 为例

\documentclass[12pt]{article}

\usepackage{amsfonts, amsthm, amsmath, amssymb}

\usepackage{zref-savepos}
\makeatletter
\@ifundefined{zsaveposx}{% older zref
  \let\zsaveposx\zsavepos
  \let\zsaveposy\zsavepos
}{}
\makeatother

\begin{document}

\begin{multline*}
\\
%
\text{Text}
\begin{cases}
AAA\\ 
AAA
\end{cases}\\
%
\text{Text}
\begin{cases}
AAA\\ 
AAA
\end{cases}\\
%
\mathop{\text{Text}}_{\zsaveposx{Text}}
\begin{cases}
AAA\\
\def\Apos#1#2{%
  \makebox[0pt][l]{%
    \smash{$\mathop{\hphantom{#1}}\limits_{\zsaveposx{A#2}}$}%
  }%
  #1%
}
\Apos B1 \Apos C2 \Apos D3
\end{cases}\\
\makebox[0pt][l]{%
  \zsaveposx{vdots0}%
  \kern-\zposx{vdots0}sp%
  \def\putdots#1{%
    \makebox[0pt][l]{%
      \kern\zposx{#1}sp%
      \makebox[0pt][c]{%
        $\vdots$%
      }%
    }%
  }%
  \putdots{Text}%
  \putdots{A1}%
  \putdots{A2}%
  \putdots{A3}%
}
\end{multline*}
\end{document}

结果 BCD

下一个示例

来自评论

如果我想在最后一行输入一个两位数(在第一列)、一个数学符号(在第二列)和另一个两位数(在第二列),该怎么办?

替换上一个示例的行

\Apos B1 \Apos C2 \Apos D3

\Apos{12}{1} \mathbin{\Apos{+}{2}} \Apos{34}{3}

结果

相关内容