看看问题在多列中定义不同于 1 的列数,我的第一个想法是尝试这样的事情:
\documentclass{article}
\newcommand\Two[1]{\multicolumn{2}{|c|}{#1}}
\newcommand\Thr[1]{\multicolumn{3}{|c|}{#1}}
\newcommand\Six[1]{\multicolumn{6}{|c|}{#1}}
\begin{document}
\[
\begin{array}{*6c}\hline
\Six{A}\\\hline
\Two{B}&\Two{C}&\Two{D}\\\hline
\Two{E}&\Two{F}&\Two{G}\\\hline
\Thr{H}&\Thr{I}\\\hline
\Thr{J}&\Thr{K}\\\hline
\end{array}
\]
\end{document}
不幸的是,由于我无法理解的原因,这产生了:
为什么H
和J
只占据了两列多一点,而I
和K
几乎占据了四列,而所有这些应该占据三列?顺便说一句,如果我展开辅助宏,我会得到相同的输出:
\documentclass{article}
\begin{document}
\[
\begin{array}{*6c}\hline
\multicolumn{6}{|c|}{A}\\\hline
\multicolumn{2}{|c|}{B}&\multicolumn{2}{|c|}{C}&\multicolumn{2}{|c|}{D}\\\hline
\multicolumn{2}{|c|}{E}&\multicolumn{2}{|c|}{F}&\multicolumn{2}{|c|}{G}\\\hline
\multicolumn{3}{|c|}{H}&\multicolumn{3}{|c|}{I}\\\hline
\multicolumn{3}{|c|}{J}&\multicolumn{3}{|c|}{K}\\\hline
\end{array}
\]
\end{document}
我期望的输出是这样的:
-------------
| A |
-------------
| B | C | D |
-------------
| E | F | G |
-------------
| H | I |
-------------
笔记这个问题不是重复的在多列中定义不同于 1 的列数因为另一篇帖子要求提供代码来生成上面的图片,而这个问题问的是为什么上面的代码没有生成这张图片。换句话说,Mico 对我这个愚蠢的问题给出了正确的答案,但他的答案是不是对另一篇文章的回答。
答案1
你问,
为什么 H 和 J 只占据两列多一点?
字母“H”和“J”实际上占据了整整 3 列,尽管乍一看并非如此。这是怎么回事?
c
您使用的是三列单元格的基本列类型,并且该c
列类型没有预定义的宽度。包含“H”和“J”的三列单元格的宽度分别动态设置以适应两个字母中较宽的那个(恰好是“H”)。而且,由于“H”比“B”或“E”略宽,因此“H”和“J”三列单元格比“B”和“E”两列单元格略宽。(math-italic-H 的宽度为9.12pt
,而 math-italic-B 的宽度为8.09pt
- 假设使用 10pt 的 Computer Modern 字体。)
此外,如果仔细观察你的截图,你会发现 B/E、C/F 和 D/G 双列单元格的宽度并不完全相同。宽度分别为8.09pt+2\tabcolsep
、7.86pt+2\tabcolsep
和8.56pt+2\tabcolsep
。接近,但不是完全相同的...
“I”和“K”三列单元格的宽度计算为剩余的-- 表格环境的整体宽度减去“H”单元格的宽度。最后,六列“A”单元格的宽度计算为接下来两行中三个两列单元格宽度的简单总和。
解决方案是根本不使用c
列类型。相反,需要使用固定宽度的列,就像在这个答案。