在一个有 4 行 4 列的表格中,我尝试合并每行中的不同单元格,同时保留表格布局。由于一行中的单元格不超过 3 个,因此表格列似乎被删除了。
如果我添加一个包含 4 个单元格的空行,则有 4 列。问题:是否可以在不添加空行的情况下保留所有列?谢谢。
这是我的目标:
-------------------
| 1 |
-------------------
| 2 | 14 |
-------------------
| 3 | 7 | 15 |
-------------------
| 4 | 8 | 12 |
-------------------
以下是我得到的结果:
--------------
| 1 |
--------------
| 2 | 14 |
--------------
| 3 | 7 | 15 |
--------------
| 4 | 8 | 12 |
--------------
代码:
\documentclass[10pt]{article}
\usepackage{multicol}
\begin{document}
\section{A}
{\begin{tabular}{|l|l|l|l|}
\hline \multicolumn{4}{|l|}{1} \\
\hline \multicolumn{3}{|l|}{2} & 14 \\
\hline 3 & \multicolumn{2}{|l|}{7} & 15 \\
\hline 4 & 8 & \multicolumn{2}{|l|}{12} \\
\hline
\end{tabular}}
\section{B}
{\begin{tabular}{|l|l|l|l|}
\hline \multicolumn{4}{|l|}{1} \\
\hline \multicolumn{3}{|l|}{2} & 14 \\
\hline & & & \\
\hline 3 & \multicolumn{2}{|l|}{7} & 15 \\
\hline 4 & 8 & \multicolumn{2}{|l|}{12} \\
\hline
\end{tabular}}
\section{Goal}
I would like to have a table as in section B but without the third (empty) row.
\end{document}
答案1
以下可能就是您想要的:
\documentclass[10pt]{article}
\begin{document}
\section{A}
\begin{tabular}{|l|l|l|l|}
\hline \multicolumn{4}{|l|}{1} \\
\hline \multicolumn{3}{|l|}{2} & 14 \\
\hline 3 & \multicolumn{2}{|l|}{7} & 15 \\
\hline 4 & 8 & \multicolumn{2}{|l|}{12} \\
\hline
\end{tabular}
\section{B}
\begin{tabular}{|l|l|l|l|}
& & \phantom{12} & \\[-\normalbaselineskip] % fake/empty row
\hline \multicolumn{4}{|l|}{1} \\
\hline \multicolumn{3}{|l|}{2} & 14 \\
\hline 3 & \multicolumn{2}{|l|}{7} & 15 \\
\hline 4 & 8 & \multicolumn{2}{|l|}{12} \\
\hline
\end{tabular}
\section{Goal}
I would like to have a table as in section B but without the third (empty) row.
\end{document}
tabbing
该解决方案背后的动机源于在指定制表间隔然后指定行的环境中常用的内容\kill
。
请注意,你不需要multicol
因为默认设置tabular
受 LaTeX 支持。
答案2
底层\halign
基元的一个特性是,任何跨越每一行的列边界都会从列宽计算中删除。
也许最简单的方法是将第一行改为
\hline \multicolumn{2}{|l}{1}&\multicolumn{1}{l}{} &\
答案3
看起来您想要一个 4 列表,但只有 3 列数据。如果您知道所需的附加列的宽度,则可以将其添加为\hphantom{14}
(假设另一列的宽度等于数字的宽度14
:
笔记:
- 需要额外
\hspace*{\tabcolsep}
考虑在列表之间添加的分隔。
代码:
\documentclass[10pt]{article}
\usepackage{multicol}
\begin{document}
\section{A}
{\begin{tabular}{|l|l|l|l|}
\hline \multicolumn{4}{|l|}{1} \\
\hline \multicolumn{3}{|l|}{2} & 14 \\
\hline 3 & \multicolumn{2}{|l|}{7} & 15 \\
\hline 4 & 8 & \multicolumn{2}{|l|}{12} \\
\hline
\end{tabular}}
\section{B}
{\begin{tabular}{|l|l|l|l|}
\hline \multicolumn{4}{|l|}{1} \\
\hline \multicolumn{3}{|l|}{2} & 14 \\
\hline & & & \\
\hline 3 & \multicolumn{2}{|l|}{7} & 15 \\
\hline 4 & 8 & \multicolumn{2}{|l|}{12} \\
\hline
\end{tabular}}
\section{Goal}
I would like to have a table as in section B but without the third (empty) row.
\section{C}
{\begin{tabular}{|l|l|l|l|}
\hline \multicolumn{4}{|l|}{1} \\
% \hline 1 & & & \\
\hline \multicolumn{3}{|l|}{2} & 14 \\
\hline 3 & \multicolumn{2}{|l|}{7\hspace*{\tabcolsep}\hphantom{14}} & 15 \\
\hline 4 & 8 & \multicolumn{2}{|l|}{12} \\
\hline
\end{tabular}}
\end{document}
答案4
以下是您可以使用 进行{NiceTabular}
的操作nicematrix
。使用 键hvlines
,除块(由 创建)外,所有规则均在 中绘制\Block
。
\documentclass[10pt]{article}
\usepackage{nicematrix}
\begin{document}
\begin{NiceTabular}{llll}[hvlines]
\Block{1-4}{} 1 \\
\Block{1-3}{} 2 &&& 14 \\
3 & \Block{1-2}{} 7 && 15 \\
4 & 8 & \Block{1-2}{} 12 \\
\end{NiceTabular}
\end{document}
您需要多次编译(因为nicematrix
在后台使用 PGF/Tikz 节点)。