我有一张如下的表格:
&$\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}