在下面的代码中,
\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}