使表格的每一列具有相同的宽度

使表格的每一列具有相同的宽度

我有一张如下的表格:

  &$\begin{array}{c|cc|cc}
    & x & \multicolumn{1}{c}{y} & i & 0 \\ \hline
    x & 0 & \multicolumn{1}{c}{} & -49 &  \\
    y & & \multicolumn{1}{c}{0} &  &  \\ \cline{4-5}
    i & 49 & & 0 &-2\\ 
    0 & &  & 2 & 0
  \end{array}$

有没有办法让每列的宽度相同?

答案1

对于具有已知列条目的固定列宽度,我建议使用 来\settowidth{<length register>}{<stuff>}提取 中最宽元素的宽度array。或者,calc包裹提供了\widthof{<stuff>}类似的解决方法:

在此处输入图片描述

\documentclass{article}
\usepackage{array}% http://ctan.org/pkg/array
\newcolumntype{C}[1]{>{\centering\arraybackslash$}p{#1}<{$}}

\begin{document}

\newlength{\mycolwd}% array column width
\settowidth{\mycolwd}{$-49$}% "width" of $-49$; largest element in array
\[
  \begin{array}{C{\mycolwd}*{4}{|C{\mycolwd}}}
      &  x & \multicolumn{1}{c}{y} &   i &  0 \\ \hline
    x &  0 & \multicolumn{1}{c}{}  & -49 &    \\
    y &    & \multicolumn{1}{c}{0} &     &    \\ \cline{4-5}
    i & 49 &   &   0 & -2 \\ 
    0 &    &   &   2 &  0
  \end{array}
\]

\end{document}

例如,calc可以使用

  \begin{array}{C{\widthof{$-49$}}*{4}{|C{\widthof{$-49$}}}}

注意使用*{<num>}{<col spec>}重复<col spec>次数<num>。它提高了一致性和更新的简易性。

答案2

如果用户不告诉 TeX 所需的列宽或对齐的首选总宽度,则要使对齐的所有列的宽度相同是相当复杂的。

通过两次排版对齐确实可以实现这一点,第一次用于收集所有单元格并对其进行测量。但是,对于像您这样的简单矩阵,可能更容易说明大小,猜测最宽的条目:

\documentclass{article}
\usepackage{array}
\newcolumntype{C}[1]{>{\centering\arraybackslash$}p{#1}<{$}}

\begin{document}

$\begin{array}{C{1.8em}|C{1.8em}C{1.8em}|C{1.8em}C{1.8em}}
    & x & \multicolumn{1}{c}{y} & i & 0 \\ \hline
    x & 0 & \multicolumn{1}{c}{} & -49 &  \\
    y & & \multicolumn{1}{c}{0} &  &  \\ \cline{4-5}
    i & 49 & & 0 &-2\\ 
    0 & &  & 2 & 0
  \end{array}$

\end{document}

只要记住,1em 大约与大写字母 M 一样宽。只要一列中的一个条目不是\multicolumn,您就可以使用c的参数\multicolumn,因为效果完全相同。

答案3

使用{NiceArray}of nicematrix,您有一个键columns-width。如果将该键与值 一起使用auto,则数组的所有列将具有相同的宽度,等于数组最宽单元格的宽度。

\documentclass{article}
\usepackage{nicematrix}

\begin{document}

$\begin{NiceArray}{c|cccc}[columns-width=auto]
  & x  & y & i   & 0  \\ \Hline
x & 0  &   & -49 &    \\
y &    & 0 &     &    \\ 
i & 49 &   & \Block[borders={left,top}]{2-2}{}
             0   & -2 \\ 
0 &    &   & 2   & 0
\end{NiceArray}$

\end{document}

上述代码的输出

相关内容