我正在尝试使用它\valign
来制作一系列物品。(见我的自己回答另一个问题。)我这样做是因为我想指定每列而不是每行的项目,并且因为我想控制间距。我使用的是 LaTeX,但这些是纯文本宏。
我对以下内容感到满意,只是这些项目没有在其列中垂直居中,所以这个问题是关于如何实现这一点。
\documentclass{article}
\usepackage{amsmath}
% this can't be an environment because the code for \end can't have parameters.
\newcommand{\colarray}[3]{
\vcenter{\hbox{\valign{&\vfil\vbox{\parindent=0pt\tabskip=#2\hsize=#1##}\vfil\cr%
#3%
}}\vskip-#2}%
}
\newcommand*\col[1]{#1\cr}
\begin{document}
\begin{equation}
x = \colarray{4mm}{2mm}{
\col{1 & 2 & 3}
\col{4 & 5 & \Big(6\Big)}
}
\end{equation}
\end{document}
这产生了
从我目前比较模糊的理解来看,将项目居中应该涉及将每个项目放入\hbox
并使用\vfil
。但是,如果我尝试,结果并不像预期的那样:
\documentclass{article}
\usepackage{amsmath}
% this can't be an environment because the code for \end can't have parameters.
\newcommand{\colarray}[3]{
\vcenter{\hbox{\valign{&\vfil\vbox{\parindent=0pt\tabskip=#2\hsize=#1\hbox to #1{\hfil##\hfil}}\vfil\cr%
#3%
}}\vskip-#2}%
}
\newcommand*\col[1]{#1\cr}
\begin{document}
\begin{equation}
x = \colarray{4mm}{2mm}{
\col{1 & 2 & 3}
\col{4 & 5 & \Big(6\Big)}
}
\end{equation}
\end{document}
结果如下:
如您所见,“3”的水平对齐方式与“1”和“2”不同,并且“(6)”相对于“4”和“5”没有水平居中。
我无法弄清楚为什么会这样,所以我的问题是(1)为什么会发生这种情况,以及(2)我该如何解决它?
答案1
&
在使用 时,您需要删除 each 之前的空格\colarray
,因为它们在内部 中替换时很重要\hbox
。或者,在 的定义中用##
替换。另外,我认为 4mm 不足以容纳括号中的“6”;要对齐列,您需要增加它。$##$
\colarray
顺便说一句,您不需要在第二次尝试解决方案时设置\parindent
和。\hsize
答案2
这与RobertR的建议类似,但是是一个完整的示例。
\documentclass{article}
\usepackage{amsmath}
% this can't be an environment because the code for \end can't have parameters.
% ?? It would be more natural as an environment with \\ like array
\newcommand{\colarray}[3]{%
\vcenter{\hbox{\valign{&\vfil\tabskip=#2\hbox to #1{\strut\hfil$##$\hfil}\vfil\cr%
#3%
}}\vskip-#2}}
\newcommand*\col[1]{#1\cr}
\begin{document}
\begin{equation}
x = \colarray{5mm}{2mm}{
\col{1 & 2 & 3}
\col{4 & 5 & \Bigl(6\Bigr)}
}
\end{equation}
\end{document}