为什么 `\multicolumn` 和 `\hdotsfor` 不能按预期工作?

为什么 `\multicolumn` 和 `\hdotsfor` 不能按预期工作?

我有决定因素

\documentclass{article}

\usepackage{amsmath}

\begin{document}
$$
\begin{vmatrix}
a      & b      & \ldots & \ldots & \ldots & \ldots \\
a      & b      & c      & \ldots & \ldots & \ldots \\
\multicolumn{6}{c}{\dotfill} \\
\ldots & \ldots & \ldots & \ldots & y      & z
\end{vmatrix}.
$$
\end{document}

我想让每条线上的所有点合并到相应长度的一条线上。首先,我尝试使用\multicolumn{...}{c}{\dotfill}以下方法实现此目的:

$$
\begin{vmatrix}
a & b & \multicolumn{4}{c}{\dotfill} \\
a & b & c & \multicolumn{3}{c}{\dotfill} \\
\multicolumn{6}{c}{\dotfill} \\
\multicolumn{4}{c}{\dotfill} & y & z
\end{vmatrix},
$$

这不是我需要的。然后我想到了\hdotsfor

$$
\begin{vmatrix}
a & b & \hdotsfor{4} \\
a & b & c & \hdotsfor{3} \\
\hdotsfor{6} \\
\hdotsfor{4} & y & z
\end{vmatrix},
$$

结果相同。但是,如果我添加一个空行(带有相应的&s),如下所示

$$
\begin{vmatrix}
 & & & & & \\[-3ex]
a & b & \hdotsfor{4} \\
a & b & c & \hdotsfor{3} \\
\hdotsfor{6} \\
\hdotsfor{4} & y & z
\end{vmatrix},
$$

然后我得到了我想要的结果,只是我必须在空行和第一个非空行之间添加一个负垂直空间。通过反复试验,我发现负空间-3ex大约就是我在这种情况下所需要的。

我的问题是:为什么\hdotsfor单独使用时不能按预期工作,而添加空行时却可以工作?如果空行是必要的,如何计算应添加的负跳过的确切大小(而不是[-3ex])以(在视觉上)消除不需要的空间?

答案1

在您的矩阵中,第三和第四列仅包含自然宽度为零(但可拉伸)的材料,因此它们对对齐没有任何贡献。

您可以提供一个幻影行,这是您的想法;退格量是\normalbaselineskip

\documentclass{article}
\usepackage{amsmath}

\begin{document}

\[
\begin{vmatrix}
% a phantom row
\mbox{\enspace} & \mbox{\enspace} & \mbox{\enspace} &
\mbox{\enspace} & \mbox{\enspace} & \mbox{\enspace} \\[-\normalbaselineskip]
a      & b      & \hdotsfor{4} \\
a      & b      & c      & \hdotsfor{3} \\
\hdotsfor{6} \\
\hdotsfor{4} & y & z
\end{vmatrix}
% a matrix to check the heights
\begin{vmatrix} 1 \\ 2 \\ 3 \\ 4 \end{vmatrix}
\]

\end{document}

我提供了 0.5em 的“最小宽度”。

在此处输入图片描述

答案2

你可以这样做nicematrix

\documentclass{article}
\usepackage[transparent]{nicematrix}
\begin{document}
\[
\begin{vmatrix}[margin=0.5em]
a      & b      & \ldots \\
a      & b      & c      & \ldots \\
\ldots \\
\ldots &        &        &  y & z
\end{vmatrix}
% a matrix to check the heights
\begin{vmatrix} 1 \\ 2 \\ 3 \\ 4 \end{vmatrix}
\]
\end{document}

上述代码的结果

或者,两侧留出较少的空间(Sebastiano 的建议):

\documentclass{article}
\usepackage[transparent]{nicematrix}
\begin{document}
\[
\begin{vmatrix}[extra-margin=0.2em,nullify-dots]
a      & b      & \ldots & \Hspace*{3.7mm}\\
a      & b      & c      & & \ldots \\
\ldots \\
\ldots &        &        & &  y & z
\end{vmatrix}
% a matrix to check the heights
\begin{vmatrix} 1 \\ 2 \\ 3 \\ 4 \end{vmatrix}
\]
\end{document}

上述代码的结果

相关内容