我有一张用作考试答题纸的表格。这是去年遗留下来的,当时考试有 4 个部分。但是,我现在有 3 个部分……所以我想删除第 IV 部分的列(基本上是 6 列)。我认为这很简单……只需从每行末尾删除 6 个表示列边框的 &(并对 3 个标题行执行相应的操作)。不幸的是,这不起作用 :-( 问题是我不理解 arraystretch 和 linewidth/tabcolsep 的作用……
需要澄清的是,我确实希望这 3 个部分能够扩展以适应原始表格的宽度......
{\rowcolors{5}{black!15}{black!5}
\def\arraystretch{1.8}%
\begin{tabular}{ |p{\dimexpr 0.0416667\linewidth-2\tabcolsep}|p{\dimexpr 0.0416667\linewidth-2\tabcolsep}|p{\dimexpr 0.0416667\linewidth-2\tabcolsep}|p{\dimexpr 0.0416667\linewidth-2\tabcolsep}|p{\dimexpr 0.0416667\linewidth-2\tabcolsep}|p{\dimexpr 0.0416667\linewidth-2\tabcolsep}|p{\dimexpr 0.0416667\linewidth-2\tabcolsep}|p{\dimexpr 0.0416667\linewidth-2\tabcolsep}|p{\dimexpr 0.0416667\linewidth-2\tabcolsep}|p{\dimexpr 0.0416667\linewidth-2\tabcolsep}|p{\dimexpr 0.0416667\linewidth-2\tabcolsep}|p{\dimexpr 0.0416667\linewidth-2\tabcolsep}|p{\dimexpr 0.0416667\linewidth-2\tabcolsep}|p{\dimexpr 0.0416667\linewidth-2\tabcolsep}|p{\dimexpr 0.0416667\linewidth-2\tabcolsep}|p{\dimexpr 0.0416667\linewidth-2\tabcolsep}|p{\dimexpr 0.0416667\linewidth-2\tabcolsep}|p{\dimexpr 0.0416667\linewidth-2\tabcolsep}|p{\dimexpr 0.0416667\linewidth-2\tabcolsep}|p{\dimexpr 0.0416667\linewidth-2\tabcolsep}|p{\dimexpr 0.0416667\linewidth-2\tabcolsep}|p{\dimexpr 0.0416667\linewidth-2\tabcolsep}|p{\dimexpr 0.0416667\linewidth-2\tabcolsep}|p{\dimexpr 0.0416667\linewidth-2\tabcolsep}| }
\hline
\multicolumn{6}{|c|}{\textbf{SECTION I}} & \multicolumn{6}{|c|}{\textbf{SECTION II}} & \multicolumn{6}{|c|}{\textbf{SECTION III}} & \multicolumn{6}{|c|}{\textbf{SECTION IV}} \\
\multicolumn{6}{|c|}{\textbf{Name 1}} & \multicolumn{6}{|c|}{\textbf{Name 2}} & \multicolumn{6}{|c|}{\textbf{Name 3}} & \multicolumn{6}{|c|}{\textbf{Name 4}} \\
\multicolumn{6}{|c|}{\textbf{Analysis}} & \multicolumn{6}{|c|}{\textbf{Analysis}} & \multicolumn{6}{|c|}{\textbf{Analysis}} & \multicolumn{6}{|c|}{\textbf{Analysis}} \\
\hline
\# & A & B & C & D & E & \# & A & B & C & D & E & \# & A & B & C & D & E & \# & A & B & C & D & E &
\hline\hline
1 & & & & & & 1 & & & & & & 1 & & & & & & 1 & & & & & &
\hline
2 & & & & & & 2 & & & & & & 2 & & & & & & 2 & & & & & &
\hline
3 & & & & & & 3 & & & & & & 3 & & & & & & 3 & & & & & &
\hline
4 & & & & & & 4 & & & & & & 4 & & & & & & 4 & & & & & &
\hline
5 & & & & & & 5 & & & & & & 5 & & & & & & 5 & & & & & &
\hline
6 & & & & & & 6 & & & & & & 6 & & & & & & 6 & & & & & &
\hline
7 & & & & & & 7 & & & & & & 7 & & & & & & 7 & & & & & &
\hline
8 & & & & & & 8 & & & & & & 8 & & & & & & 8 & & & & & &
\hline
9 & & & & & & 9 & & & & & & 9 & & & & & & 9 & & & & & &
\hline
10 & & & & & & 10 & & & & & & 10 & & & & & & 10 & & & & & &
\hline
11 & & & & & & 11 & & & & & & 11 & & & & & & 11 & & & & & &
\hline
12 & & & & & & 12 & & & & & & 12 & & & & & & 12 & & & & & &
\hline
13 & & & & & & 13 & & & & & & 13 & & & & & & 13 & & & & & &
\hline
14 & & & & & & 14 & & & & & & 14 & & & & & & 14 & & & & & &
\hline
15 & & & & & & 15 & & & & & & 15 & & & & & & 15 & & & & & &
\hline
\end{tabular}}
答案1
这是原始表格的更正/简化版本以及占用相同宽度但仅包含 3 个而不是 4 个部分的改编版本:
与原始代码相比,我所做的更改是:
&
将每一行中的最后一个替换\\
为以获得可编译的代码。|
删除了命令列声明中的部分内容\multicolumn
,以避免阅读器行中的垂直线过宽\rowcolor{white}
为读者添加行。- 使用嵌套表格以避免
\multicolumn
多次重复该命令。 - 替换
tabular
为tabularx
以便能够访问灵活的宽度X
类型列,该列可以代替原始代码中使用的手动计算的列宽。 - 用来
*{4}{rXXXXX}
代替rXXXXXrXXXXXrXXXXXrXXXXX
以避免重复
为了从 4 节表切换到 3 节表,我做了以下更改:
& <number> & & & & &
删除每行中最后一次出现的- 切换自
*{4}{rXXXXX}
至*{3}{rXXXXX}
以下是最终的完整且可编译的 MWE:
\documentclass{article}
\usepackage[margin=2cm]{geometry}
\usepackage[table]{xcolor}
\usepackage{tabularx}
\usepackage{makecell}
\renewcommand{\theadfont}{\normalsize\bfseries}
\begin{document}
\noindent
{\rowcolors{5}{black!15}{black!5}
\def\arraystretch{1.8}%
\begin{tabularx}{\linewidth}{|*{4}{r|X|X|X|X|X|}}
\hline
\rowcolor{white}
\multicolumn{6}{|c|}{\bfseries\begin{tabular}{@{}c@{}}SECTION I\\ Name 1\\ Analysis\end{tabular}}
& \multicolumn{6}{c|}{\bfseries\begin{tabular}{@{}c@{}}SECTION II\\ Name 2\\ Analysis\end{tabular}}
& \multicolumn{6}{c|}{\bfseries\begin{tabular}{@{}c@{}}SECTION III\\ Name 3\\ Analysis\end{tabular}}
& \multicolumn{6}{c|}{\bfseries\begin{tabular}{@{}c@{}}SECTION IV\\ Name 4\\ Analysis\end{tabular}} \\
\hline
\rowcolor{white}\# & A & B & C & D & E & \# & A & B & C & D & E & \# & A & B & C & D & E & \# & A & B & C & D & E \\
\hline\hline
1 & & & & & & 1 & & & & & & 1 & & & & & & 1 & & & & & \\
\hline
2 & & & & & & 2 & & & & & & 2 & & & & & & 2 & & & & & \\
\hline
3 & & & & & & 3 & & & & & & 3 & & & & & & 3 & & & & & \\
\hline
4 & & & & & & 4 & & & & & & 4 & & & & & & 4 & & & & & \\
\hline
\end{tabularx}}
\bigskip
\noindent
{\rowcolors{2}{black!15}{black!5}
\def\arraystretch{1.8}%
\begin{tabularx}{\linewidth}{|*{3}{r|X|X|X|X|X|}}
\hline
\rowcolor{white}
\multicolumn{6}{|c|}{\bfseries\begin{tabular}{@{}c@{}}SECTION I\\ Name 1\\ Analysis\end{tabular}}
& \multicolumn{6}{c|}{\bfseries\begin{tabular}{@{}c@{}}SECTION II\\ Name 2\\ Analysis\end{tabular}}
& \multicolumn{6}{c|}{\bfseries\begin{tabular}{@{}c@{}}SECTION III\\ Name 3\\ Analysis\end{tabular}} \\
\hline
\rowcolor{white}\# & A & B & C & D & E & \# & A & B & C & D & E & \# & A & B & C & D & E \\
\hline\hline
1 & & & & & & 1 & & & & & & 1 & & & & & \\
\hline
2 & & & & & & 2 & & & & & & 2 & & & & & \\
\hline
3 & & & & & & 3 & & & & & & 3 & & & & & \\
\hline
4 & & & & & & 4 & & & & & & 4 & & & & & \\
\hline
\end{tabularx}}
\end{document}
答案2
正常情况下,你的方法应该可以工作。我认为问题在于这个代码从一开始就无法工作,因为多了一个&
,而大部分都\\
缺失了。
Arraystretch 只是拉伸了数组。;)
如果您注释掉此行,您将看到行将更加密集。“技巧”是此表格中的列定义:以前有 24 列,应扩展为\linewidth
。这就是为什么每列的宽度都应该为 1/24=0.0416667(您必须从此值中减去所有自动插入的空格,这是垂直线的宽度(\linewidth
)和列文本与垂直线之间空间的两倍(\tabcolsep
)。唯一需要更改的是现在使用宽度\linewidth
/16 = 0.055555\linewidth
并删除最后 6 列。
\def\arraystretch{1.8}%
\begin{tabular}{
|p{\dimexpr 0.0555555\linewidth-2\tabcolsep}|p{\dimexpr 0.0555555\linewidth-2\tabcolsep}|p{\dimexpr 0.0555555\linewidth-2\tabcolsep}|p{\dimexpr 0.0555555\linewidth-2\tabcolsep}|p{\dimexpr 0.0555555\linewidth-2\tabcolsep}|p{\dimexpr 0.0555555\linewidth-2\tabcolsep}|p{\dimexpr 0.0555555\linewidth-2\tabcolsep}|p{\dimexpr 0.0555555\linewidth-2\tabcolsep}|p{\dimexpr 0.0555555\linewidth-2\tabcolsep}|p{\dimexpr 0.0555555\linewidth-2\tabcolsep}|p{\dimexpr 0.0555555\linewidth-2\tabcolsep}|p{\dimexpr 0.0555555\linewidth-2\tabcolsep}|p{\dimexpr 0.0555555\linewidth-2\tabcolsep}|p{\dimexpr 0.0555555\linewidth-2\tabcolsep}|p{\dimexpr 0.0555555\linewidth-2\tabcolsep}|p{\dimexpr 0.0555555\linewidth-2\tabcolsep}|p{\dimexpr 0.0555555\linewidth-2\tabcolsep}|p{\dimexpr 0.0555555\linewidth-2\tabcolsep}|p{\dimexpr 0.0555555\linewidth-2\tabcolsep}|p{\dimexpr 0.0555555\linewidth-2\tabcolsep}|p{\dimexpr 0.0555555\linewidth-2\tabcolsep}|p{\dimexpr 0.0555555\linewidth-2\tabcolsep}|p{\dimexpr 0.0555555\linewidth-2\tabcolsep}|p{\dimexpr 0.0555555\linewidth-2\tabcolsep}| }
\hline
\multicolumn{6}{|c|}{\textbf{SECTION I}} & \multicolumn{6}{|c|}{\textbf{SECTION II}} & \multicolumn{6}{|c|}{\textbf{SECTION III}} \\
\multicolumn{6}{|c|}{\textbf{Name 1}} & \multicolumn{6}{|c|}{\textbf{Name 2}} & \multicolumn{6}{|c|}{\textbf{Name 3}} \\
\multicolumn{6}{|c|}{\textbf{Analysis}} & \multicolumn{6}{|c|}{\textbf{Analysis}} & \multicolumn{6}{|c|}{\textbf{Analysis}} \\
\hline
\# & A & B & C & D & E & \# & A & B & C & D & E & \# & A & B & C & D & E \\ \hline\hline
1 & & & & & & 1 & & & & & & 1 & & & & & \\ \hline
2 & & & & & & 2 & & & & & & 2 & & & & & \\ \hline
3 & & & & & & 3 & & & & & & 3 & & & & & \\ \hline
4 & & & & & & 4 & & & & & & 4 & & & & & \\ \hline
5 & & & & & & 5 & & & & & & 5 & & & & & \\ \hline
6 & & & & & & 6 & & & & & & 6 & & & & & \\ \hline
7 & & & & & & 7 & & & & & & 7 & & & & & \\ \hline
8 & & & & & & 8 & & & & & & 8 & & & & & \\ \hline
9 & & & & & & 9 & & & & & & 9 & & & & & \\ \hline
10 & & & & & & 10 & & & & & & 10 & & & & & \\ \hline
11 & & & & & & 11 & & & & & & 11 & & & & & \\ \hline
12 & & & & & & 12 & & & & & & 12 & & & & & \\ \hline
13 & & & & & & 13 & & & & & & 13 & & & & & \\ \hline
14 & & & & & & 14 & & & & & & 14 & & & & & \\ \hline
15 & & & & & & 15 & & & & & & 15 & & & & & \\ \hline
\end{tabular}
一些额外的东西:
- 我漏掉了
\rowcolors
。 - 表格无法完美地容纳在一页中:原因是,例如,没有考虑其中一条垂直线(在像这样的表格中,
n
列中有n+1
垂直线)。如果您想减少“过满 \hbox”警告,也许只需使用三位或两位 1/16 的数字。 - 我希望每个部分的第一列(带有 的列
#
)右对齐。-p
列始终对齐。参见例如https://tex.stackexchange.com/a/12712/237192实现右对齐列。