我有一个array
(在数学模式下),我希望第一列比其他列稍宽,而其他列的宽度应一致。如果我只写
\begin{array}{c|ccc}
10000 & 1 & 20 & 300
\end{array}
然后第二、三和四列都有单独的宽度,我想避免这种情况。理想情况下,我想将第一列的宽度设置为 例如2cm
,其余列的宽度设置为1cm
。
有办法吗?我想避免嵌套array
环境。
答案1
我假设 (a) 第 2、3 和 4 列的宽度应与任一列中最宽元素的宽度相同(即您提供的表格中的“300”),并且 (b) 这些内容的内容应居中。如果此解释正确,我建议您继续定义一种新的列类型(如C
下面代码中调用),该列类型满足这些假设,并且默认情况下将其内容置于数学模式中。
我在代码中添加了垂直条,以便可以清楚地看到第 2、3 和 4 列的宽度确实相同。
\documentclass{article}
\newlength\mylen
\usepackage{array} % for "\newcolumntype" macro
\newcolumntype{C}{>{\hfil$}p{\mylen}<{$\hfil}} % centered, in math mode, fixed width
\begin{document}
\[
\settowidth\mylen{300} % choose widest element in columns 2--4
\begin{array}{|c|C|C|C|}
10000 & 1 & 20 & 300\\
1 & 101 & 555 & 888\\
\end{array}
\]
\end{document}
更新,2021 年 6 月:自我发布此答案以来的 4 年多时间里,该array
软件包已进行了重大更新。其中一个更新是引入了w
列类型,上面的设置可以更简洁地重写如下:
\documentclass{article}
\newlength\mylen
\usepackage{array} % for 'w' column type
\begin{document}
\[
\settowidth\mylen{300} % choose widest element in columns 2--4
\begin{array}{| c | *{3}{wc{\mylen}|} }
10000 & 1 & 20 & 300\\
1 & 101 & 555 & 888
\end{array}
\]
\end{document}
答案2
一种可能性是dcolumn
:
\documentclass{article}
\usepackage{dcolumn,booktabs}
\begin{document}
\[
\begin{array}{r *{3}{D{.}{.}{3.-1}}}
\toprule
10000 & 1 & 20 & 300 \\
100 & 10 & 10 & 10 \\
\bottomrule
\end{array}
\]
\[
\begin{array}{r *{3}{D{.}{.}{3.-1}}}
\toprule
10000 & 100 & 200 & 300 \\
100 & 100 & 100 & 100 \\
\bottomrule
\end{array}
\]
\end{document}
第二个表格显示间距相同。D
列类型的参数分别是输入小数点分隔符、输出小数点分隔符和数字的格式;这里的3.-1
意思是“整数部分有三位数字,没有小数位”。
答案3
\hphantom
使第二列至第四列的列宽相等的解决方案:
\documentclass{article}
\begin{document}
\[
\begin{array}{c|ccc}
10000 & \hphantom{00}1 & \hphantom{0}20 & 300
\end{array}
\]
\end{document}
列类型p
也适用于array
,例如:
\documentclass{article}
\usepackage{array}
\begin{document}
\[
\begin{array}{>{\centering}p{2cm}|*{3}{>{\centering}p{1cm}}}
10000 & 1 & 20 & 300
\end{array}
\]
\end{document}
或者使用包对齐列siunitx
:
\documentclass{article}
\usepackage{siunitx}
\begin{document}
\[
\begin{array}{S[table-format=5]|*{3}{S[table-format=3]}}
10000 & 1 & 20 & 300
\end{array}
\]
\end{document}