以下是 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}
下一个示例
来自评论:
如果我想在最后一行输入一个两位数(在第一列)、一个数学符号(在第二列)和另一个两位数(在第二列),该怎么办?
替换上一个示例的行
\Apos B1 \Apos C2 \Apos D3
和
\Apos{12}{1} \mathbin{\Apos{+}{2}} \Apos{34}{3}