我有一张两行的表格,第二行有 32 列,每列包含其列号(从 0 到 31)。我希望每列占用尽可能小的空间(没有列间空间),因为列数相当多。我已经使用 实现了这一点@{}c@{}
。但是,我不喜欢列的大小不完全相同(因为有些数字有 2 位数字,而其他数字只有 1 位数字)。因此,我手动将@{\hspace{0.7 mm}}c@{\hspace{0.7 mm}}
第二行内容只有 1 位数字(前 10 位)的列添加到每一列。我对结果非常满意。
我现在的问题在于第一行:第一行包含 4 列,分别为 0、1、2、3。第一行的每一列跨越第二行的 8 列。我的问题是第一行中的分隔符与第二行不对齐(在下面的示例中,请注意 7 和 8 之间的分隔符与上面的分隔符不对齐)。
有没有更简单的方法可以解决我整个问题,或者我是否朝着正确的方向发展,而我只需要解决这个对齐问题?
样本:
\begin{tabular}{|
% numbers with 1 digit
@{\hspace{0.7 mm}}c@{\hspace{0.7 mm}}|
@{\hspace{0.7 mm}}c@{\hspace{0.7 mm}}|
@{\hspace{0.7 mm}}c@{\hspace{0.7 mm}}|
@{\hspace{0.7 mm}}c@{\hspace{0.7 mm}}|
@{\hspace{0.7 mm}}c@{\hspace{0.7 mm}}|
@{\hspace{0.7 mm}}c@{\hspace{0.7 mm}}|
@{\hspace{0.7 mm}}c@{\hspace{0.7 mm}}|
@{\hspace{0.7 mm}}c@{\hspace{0.7 mm}}|
@{\hspace{0.7 mm}}c@{\hspace{0.7 mm}}|
@{\hspace{0.7 mm}}c@{\hspace{0.7 mm}}|
% numbers with 2 digits
@{}c@{}|@{}c@{}|@{}c@{}|@{}c@{}|@{}c@{}|@{}c@{}|@{}c@{}|@{}c@{}|@{}c@{}|@{}c@{}|@{}c@{}|@{}c@{}|@{}c@{}|@{}c@{}|@{}c@{}|@{}c@{}|@{}c@{}|@{}c@{}|@{}c@{}|@{}c@{}|@{}c@{}|@{}c@{}|}
\hline
\multicolumn{8}{c|}{0}
&\multicolumn{8}{c|}{1}
&\multicolumn{8}{c|}{2}
&\multicolumn{8}{c|}{3}\\
\hline
0&1&2&3&4&5&6&7&8&9&10&11&12&13&14&15&16&17&18&19&20&21&22&23&24&25&26&27&28&29&30&31
\end{tabular}
答案1
这更容易。:) 将长度设置为当前类型大小的两位数字的宽度(我还添加了一个小的空间,以便数字不接触垂直线)并将参数设置\tabcolsep
为零;然后使用p
指定宽度和\centering
对齐的列:
\documentclass{article}
\usepackage{array}
\newlength{\twodigits}
\begin{document}
\begin{table}
\centering
\small
\settowidth{\twodigits}{00}
\addtolength{\twodigits}{.4pt}
\setlength{\tabcolsep}{0pt}
\begin{tabular}{|*{32}{>{\centering}p{\twodigits}|}}
\hline
\multicolumn{8}{|c|}{0}
&\multicolumn{8}{c|}{1}
&\multicolumn{8}{c|}{2}
&\multicolumn{8}{c|}{3}\\
\hline
0&1&2&3&4&5&6&7&8&9&10&11&12&13&14&15&16&17&18&19&20&21&22&23&24&25&26&27&28&29&30&31 \tabularnewline
\hline
\end{tabular}
\end{table}
\end{document}
如果您不想使用\tabularnewline
,那么添加魔法\arraybackslash
:
\begin{tabular}{|*{32}{>{\centering\arraybackslash}p{\twodigits}|}}
\hline
\multicolumn{8}{|c|}{0}
&\multicolumn{8}{c|}{1}
&\multicolumn{8}{c|}{2}
&\multicolumn{8}{c|}{3}\\
\hline
0&1&2&3&4&5&6&7&8&9&10&11&12&13&14&15&16&17&18&19&20&21&22&23&24&25&26&27&28&29&30&31 \\
\hline
\end{tabular}
答案2
另一个解决方案是依赖tabularx
包及其“X”列类型。此列类型的一个巧妙之处在于它实际上为您完成了所有列宽计算。以下 MWE 实现了这个想法。
\documentclass{article}
\usepackage[margin=1in]{geometry}
\usepackage{array,tabularx}
% define "Y" column type to be same as "X", but with contents centered
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\setlength{\tabcolsep}{0.1pt}
\begin{document}
\begin{table}
\begin{tabularx}{\textwidth}{|*{32}{Y|}}
\hline
\multicolumn{8}{|c|}{0} &
\multicolumn{8}{c|}{1} &
\multicolumn{8}{c|}{2} &
\multicolumn{8}{c|}{3} \\
\hline
0&1&2&3&4&5&6&7&8&9&10&11&12&13&14&15
&16&17&18&19&20&21&22&23&24&25&26&27&28&29&30&31\\
\hline
\end{tabularx}
\end{table}
\end{document}