我怎样才能将第一列向左对齐,将其他两列向右对齐?
\begin{tabular}{p{2.5cm} | p{2cm} | p{2.5cm}}
\hline
$ 2 \, 2 \, I \, I $ & 64 & 0 \\
$ 2 \, 2 \, I \, I \, I $ & 358 & 31 \\
$ 3 \, I \, I $ & 21 & 0 \\
$ 3 \, 3 \, I \, I $ & 356 & 46 \\
$ 3 \, 2 \, 2 \, I \, I$ & 7344 & 23046 \\
$ 2 \, 2 \, 3 \, I \, I$ & 1308 & 359 \\
$ 4 \, 4 \, I \, I $ & 3522 & 7983 \\
\hline
\end{tabular}
我尝试r
了p{2cm}
,但垂直线被删除了。我想保留垂直线,只想将最后两列向右对齐。
答案1
使用array
包,您可以>{\raggedleft}
在前面添加p{2cm}
以使列内容右对齐
\documentclass{article}
\usepackage{array}
\begin{document}
\begin{tabular}{p{2.5cm} |>{\raggedleft} p{2cm} |>{\raggedleft\arraybackslash} p{2.5cm}}
\hline
$ 2 \, 2 \, I \, I $ & 64 & 0 \\
$ 2 \, 2 \, I \, I \, I $ & 358 & 31 \\
$ 3 \, I \, I $ & 21 & 0 \\
$ 3 \, 3 \, I \, I $ & 356 & 46 \\
$ 3 \, 2 \, 2 \, I \, I$ & 7344 & 23046 \\
$ 2 \, 2 \, 3 \, I \, I$ & 1308 & 359 \\
$ 4 \, 4 \, I \, I $ & 3522 & 7983 \\
\hline
\end{tabular}
\end{document}
答案2
siunitx
当涉及数字表时,使用可以获得更好的结果。
我还添加了一个简化输入的技巧,使用collcell
和一个合适的宏在空格处拆分输入并用 分隔进行传递\,
。
我删除了垂直线并使用了booktabs
水平线;如果您确实需要,可以重新插入它们。
\documentclass{article}
\usepackage{amsmath,xparse,siunitx,booktabs,collcell}
\ExplSyntaxOn
\NewDocumentCommand{\alimleft}{m}
{
\seq_set_split:Nnn \l_tmpa_seq { ~ } { #1 }
$\seq_use:Nn \l_tmpa_seq { \, }$
}
\ExplSyntaxOff
\begin{document}
\begin{tabular}{
>{\collectcell\alimleft}l<{\endcollectcell}
S[table-format=4.0]
S[table-format=5.0,group-digits=false]
}
\toprule
2 2 I I & 64 & 0 \\
2 2 I I I & 358 & 31 \\
3 I I & 21 & 0 \\
3 3 I I & 356 & 46 \\
3 2 2 I I & 7344 & 23046 \\
2 2 3 I I & 1308 & 359 \\
4 4 I I & 3522 & 7983 \\
\bottomrule
\end{tabular}
\end{document}
没有必要使用\alimleft
技巧(使用更合理的宏名称)。另外
\begin{tabular}{
l
S[table-format=4.0]
S[table-format=5.0,group-digits=false]
}
\toprule
$ 2 \, 2 \, I \, I $ & 64 & 0 \\
$ 2 \, 2 \, I \, I \, I $ & 358 & 31 \\
$ 3 \, I \, I $ & 21 & 0 \\
$ 3 \, 3 \, I \, I $ & 356 & 46 \\
$ 3 \, 2 \, 2 \, I \, I$ & 7344 & 23046 \\
$ 2 \, 2 \, 3 \, I \, I$ & 1308 & 359 \\
$ 4 \, 4 \, I \, I $ & 3522 & 7983 \\
\bottomrule
\end{tabular}
会产生相同的结果。