latex 中的 colspan rowspan

latex 中的 colspan rowspan

嗨,我正在尝试添加这样的表格,我试过这个代码,但无法将它转换成这样的形式

\begin{document}
\begin{tabular}{|p{0.6in}|p{0.3in}|p{0.9in}|p{0.9in}|p{0.8in}|} \hline 
\multicolumn{2}{|c|}{\multirow{2}{*}} &   
  \multicolumn{3}{|c|}{ }  \\ \cline{3-5} 
\multicolumn{2}{|c|}{}   & S & M & H \\ \cline{1-5} 
\multirow{3}{*}{SOC} & S & S & Z & VS \\ \cline{2-5} 
 & M & M & Z & H \\ \cline{2-5} 
 & H & M & Z & H \\ \hline 
\end{tabular}
\end{document}

答案1

好吧,看看第 3 行,我发现您\multirow{2}{*}没有指定单元格的内容¹。而且您没有在\multicolumn第 4 行的内容中输入任何内容,但这是一个有希望的开始。

我会做反映表格主体的列规范,因此:

\begin{tabular}{|l| c| c| c| c| c| c| c|}

(请注意,每列都需要一个字母。另外,我建议在lr或之前放置一个空格来指示列格式,以便您在使用 、c或时更容易p看到需要替换的内容\multicolumn。)

对于您展示的表格,无需合并\multirow\multicolumn因为您永远不会合并矩形单元格块。第一行将以两个\multirow{2}{*}{text}命令开头,&中间有一个。要居中,您需要

\RenewDocumentCommand{\multirowsetup}{}{\centering}

将这些标题居中。请注意,示例中的文本垂直放置是关闭的。\multirow在放置时,假设所有行都是单行。由于第二行的标题单元格是多行的,因此定位短了半行。您可以使用第二个和第三个必需参数之间的可选参数来调整这一点:

\multirow{c}{*}[-6pt]{Operation}

(有点违反直觉,负值向下移动,正值向上移动,但我们通常会将文本向下移动)。

除了不在\multicolumn命令的第二个参数中放置文本之外,您已经把这一点做得很好了,因为您确实需要\cline在第一行和第二行之间使用以避免线条重叠\multicolumn

第二行标题将是p列,但我们希望将它们居中。为此,我建议加载array包以增强tabular。然后我们可以定义一个通用的列类型,使段落居中:

\newcolumntype{H}{>{\centering}p{0.5in}}

然后对于标题单元格,我们可以这样写:

\multicolumn{1}{H|}{Gas price (in Gwei)}

或者,如果我们仍想指定列宽:²

\newcolumntype{H}[1]{>{\centering}p{#1}}

\multicolumn{1}{H{0.9in}|}{Gas price (in Gwei)}

这应该足以让你到达完成的桌子。


  1. 有点令人惊讶的是,这并没有给出错误。相反,它最终\unskip从扩展中获取\multicolumn并使用它。现在你知道了。

  2. 可能在优先级列表中排名较低,但如果被遵循.³语法的命令替换(或至少增强),这可能是一件好事(特别是如果array它被移入内核)\newcolumntype\NewColumnType\NewDocumentCommand

  3. 但是,我们真的想要让用户C*[foo]{bar}[baz]自己书写列规范吗?

答案2

您可以在@Don Hosek 的回答中找到全面的解释。这里只有两个“实际”示例,说明如何编写表格:

  1. 使用arraymultirow包:
\documentclass{article}
\usepackage{array, multirow}

\begin{document}
\centering
\setlength\extrarowheight{2pt}
\begin{tabular}{|p{0.6in}|p{0.3in}|p{0.9in}|p{0.9in}|p{0.8in}|} 
                           \hline
\multicolumn{2}{|c|}{ }
        & \multicolumn{3}{c|}{ }    \\  \cline{3-5}
\multicolumn{2}{|c|}{ }
        & S & M & H     \\ \cline{1-5}
\multirow{3}{=}{SOC}
    & S & S & Z & VS    \\ \cline{2-5}
    & M & M & Z & H     \\ \cline{2-5}
    & H & M & Z & H     \\ \hline
\end{tabular}
\end{document}

这使:

在此处输入图片描述

(红线表示文本区域边框)

  1. 使用tabularray
\documentclass{article}
\usepackage{tabularray}

\begin{document}
\centering

\begin{tblr}{width=0.915\linewidth,
             colspec = {X[2,l] X[1,l] X[3,l] X[3,l] X[3,l]},
             hlines, vlines
             }
\SetCell[c=2,r=2]{c}
    &   & \SetCell[c=3]{c}     
            &   &       \\
    &   & S & M & H     \\
\SetCell[c=1,r=3]{l} SOC 
    & S & S & Z & VS    \\
    & M & M & Z & H     \\
    & H & M & Z & H     \\
\end{tblr}
\end{document}

这使:

在此处输入图片描述

如果您希望第二个表格示例具有与第一个表格相同的宽度,则可以将其宽度规定为:

\begin{tblr}{width=0.91\linewidth, % <---
             colspec = {X[2,l] X[1,l] X[3,l] X[3,l] X[3,l]},
             hlines, vlines
             }

答案3

具有(2021-08-10{NiceTabular}nicematrix≥ 6.0)。

\documentclass{article}
\usepackage{nicematrix}

\begin{document}
\centering
\begin{NiceTabular}[width=0.915\linewidth]{X[2,l] X[1,l] X[3,l] X[3,l] X[3,l]}[hlines, vlines]
\Block{2-2}{}
   &   & \Block{1-3}{}     
           &   &    \\
   &   & S & M & H  \\
\Block[l]{3-1}{SOC} 
   & S & S & Z & VS \\
   & M & M & Z & H  \\
   & H & M & Z & H  \\
\end{NiceTabular}
\end{document}

上述代码的输出

相关内容