固定宽度和居中对齐的列

固定宽度和居中对齐的列

在下面的代码中,

\documentclass[12pt]{article}
\usepackage{multirow}
\usepackage{array}
\usepackage{hhline}

\newcommand{\spe}[1]{\multicolumn{2}{c}{#1}}

\makeatletter
\newcommand*{\@rowstyle}{}
\newcommand*{\rowstyle}[1]{% sets the style of the next row
  \gdef\@rowstyle{#1}%
  \@rowstyle\ignorespaces%
}
\newcolumntype{=}{% resets the row style
  >{\gdef\@rowstyle{}}%
}
\newcolumntype{+}{% adds the current row style to the next column
  >{\@rowstyle}%
}
\makeatother

\begin{document}
\begin{center}
\begin{tabular}{*{16}{+c}}
\hhline{~~~~~~~~~~~~~~~~}
 \spe{a} &  \spe{b} &  \spe{c} &  \spe{d} &  \spe{e} &  \spe{f} &  \spe{g}     &  \spe{h} \\
\hhline{~~~~----~~~~~~~~}
 \spe{a} &  \spe{b} &  {c} &  {d} &  {c} &  {d} &  \spe{e} &  \spe{f} &  \spe{g} &  \spe{h} \\
\end{tabular}
\end{center}
\end{document}

我需要表格的列宽相等,即使是多列也是如此。即 在此处输入图片描述

但产生的输出忽略了没有任何内容的列。即 在此处输入图片描述

甚至p{}没有实现这一点。此外,列内容应该居中对齐。在大多数列类型中,内容对齐不受控制或宽度不受控制。

大家有什么想法吗?

答案1

我不清楚所有十行是否都应该等宽,或者是否希望标记为 a、b、e、f、g 和 h 的行宽度是其余行的两倍。

为了实现前一个目标,可以使用tabularx同名包提供的环境。所有类型的列X(以及基于此列类型的列)默认具有相同的宽度。

为了实现后者的外观,即制作一个表格,其中第 3 列到第 6 列的宽度是其他列的一半,必须考虑参数\tabcolsep,它表示一半列间空白的宽度。由于有十列,因此必须减去20\tabcolsep\textwidth获得剩余的列本身宽度。

在所有情况下,列内容都将居中设置。

在此处输入图片描述

\documentclass[12pt]{article}
\usepackage{tabularx,booktabs,calc}
\newcolumntype{Y}{>{\centering\arraybackslash}X}

% calculate column widths for case (b)
\newlength{\cwidth}
\newlength{\cwidthb}
\setlength{\cwidth}{(\textwidth-20\tabcolsep)/16\relax}
\setlength{\cwidthb}{2\cwidth}
\newcolumntype{U}{>{\centering\arraybackslash}p{\cwidthb}}
\newcolumntype{V}{>{\centering\arraybackslash}p{\cwidth}}

\setlength{\parindent}{0pt} % just for this MWE
\begin{document}

(a) Ten equal-width columns:

\smallskip
\begin{tabularx}{\textwidth}{*{10}{Y}}
\toprule
a & b & \multicolumn{2}{c}{$\gamma$} & \multicolumn{2}{c}{$\delta$} & e & f & g & h \\
\cmidrule{3-6}
a & b & c & d & c & d & e & f & g & h \\
\bottomrule
\end{tabularx}

\bigskip
(b) Six columns that are twice as wide as the other four:

\smallskip
\begin{tabular}{*{2}{U} *{4}{V} *{4}{U}}
\toprule
a & b & \multicolumn{2}{c}{$\gamma$} & \multicolumn{2}{c}{$\delta$} & e & f & g & h \\
\cmidrule{3-6}
a & b & c & d & c & d & e & f & g & h \\
\bottomrule
\end{tabular}
\end{document}

相关内容