奇怪的多列间距

奇怪的多列间距

看看问题在多列中定义不同于 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}

不幸的是,由于我无法理解的原因,这产生了:

在此处输入图片描述

为什么HJ只占据了两列多一点,而IK几乎占据了四列,而所有这些应该占据三列?顺便说一句,如果我展开辅助宏,我会得到相同的输出:

\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\tabcolsep7.86pt+2\tabcolsep8.56pt+2\tabcolsep。接近,但不是完全相同的...

“I”和“K”三列单元格的宽度计算为剩余的-- 表格环境的整体宽度减去“H”单元格的宽度。最后,六列“A”单元格的宽度计算为接下来两行中三个两列单元格宽度的简单总和。

解决方案是根本不使用c列类型。相反,需要使用固定宽度的列,就像在这个答案

相关内容