数组:设置某些列的宽度

数组:设置某些列的宽度

我有一个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}

结果

相关内容