我想定义多列(使用*{}{}
),具有特定宽度(使用m{}
)并居中(使用>{\centering}
)。但是,我无法将这三个结合起来。下面的 MWE 只能将第一列居中:
\documentclass{article}
\usepackage{amsmath,array}
\begin{document}
\begin{table}
\centering
\begin{tabular}{ccc|>{\centering}*{6}{m{0.8cm}}}
\hline
i & t & k & $D_{im1}$ & $D_{im2}$ & $D_{im3}$ & $D_{ir1}$ & $D_{ir2}$ & $D_{ir3}$ \\
\hline
1 & 1 & $m$ & 0.5 & 0 & 0 & 0 & 0 & 0 \\
1 & 2 & $m$ & 0 & 0.5 & 0 & 0 & 0 & 0 \\
1 & 3 & $r$ & 0 & 0 & 0 & 0 & 0 & 0.5 \\
2 & 1 & $r$ & 0 & 0 & 0 & 0.5 & 0 & 0 \\
2 & 2 & $r$ & 0 & 0 & 0 & 0 & 0.5 & 0 \\
2 & 3 & $m$ & 0 & 0 & 0.5 & 0 & 0 & 0 \\
\hline
\end{tabular}
\end{table}
\end{document}
如果我使用*{6}{>{\centering}m{0.8cm}}
(正如我最初尝试的那样),它就不会编译。
答案1
我建议使用该\newcolumntype
功能并为此定义一个新的列类型M
。
直接使用>{...}...
也是可能的,但有时容易出错,特别是当出现许多专门的列类型时。
\begin{tabular}{*{6}M{0.8cm}}
M
然而要容易得多(当然,在定义之后)
S
应使用中的列类型设置十进制值siunitx
,但这是另一个问题,本文不作解答。
\documentclass{article}
\usepackage{amsmath}
\usepackage{array}
\newcolumntype{M}[1]{>{\centering\arraybackslash}m{#1}}
\begin{document}
\begin{table}
\centering
\begin{tabular}{ccc|*{6}{M{0.8cm}}}
% \begin{tabular}{ccc|*{6}{>{\centering\arraybackslash}m{0.8cm}}} % Alternative...
\hline
i & t & k & $D_{im1}$ & $D_{im2}$ & $D_{im3}$ & $D_{ir1}$ & $D_{ir2}$ & $D_{ir3}$ \\
\hline
1 & 1 & $m$ & 0.5 & 0 & 0 & 0 & 0 & 0 \\
1 & 2 & $m$ & 0 & 0.5 & 0 & 0 & 0 & 0 \\
1 & 3 & $r$ & 0 & 0 & 0 & 0 & 0 & 0.5 \\
2 & 1 & $r$ & 0 & 0 & 0 & 0.5 & 0 & 0 \\
2 & 2 & $r$ & 0 & 0 & 0 & 0 & 0.5 & 0 \\
2 & 3 & $m$ & 0 & 0 & 0.5 & 0 & 0 & 0 \\
\hline
\end{tabular}
\end{table}
\end{document}