\valign 单元格内的水平居中

\valign 单元格内的水平居中

我正在尝试使用它\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}

相关内容