如何在 LaTeX 中制作特定表格?

如何在 LaTeX 中制作特定表格?

如何使用\begin{table*}LaTeX 制作表格?

我尝试创建的表稍微复杂一些,它看起来应该是这样的:

在此处输入图片描述

抱歉,图片的线条有些弯曲。

到目前为止,我只能做一些简单的事情:

\begin{table*}[t]
    \centering

\begin{tabular}{ *1c | *3c | *3c | *2c | }

        & & & & & & & & & & & & \\

% Keep adding as many numbers of rows, etc.

\end{tabular}
\end{table}

使用此代码,我有以下列 - 名称、文本 1、文本 2、文本 3、文本 4、文本 5、文本 6、文本 7 和文本 8。并且我可以在表格中添加任意数量的行。

我没有在图像的左侧和顶部贴上第 1 类、第 2 类和第 3 类标签。

答案1

这是一个起点。间距可以并且应该调整,但这只有在填满表格后才有意义。

在此处输入图片描述

\documentclass{article}
\usepackage{rotating}
\newcommand\sw[1]{\begin{sideways}#1\end{sideways}}
\usepackage{multirow}
\begin{document}
\begin{tabular}{r|l|*8{c|}}
  \multicolumn{2}{c|}{}
    & \multicolumn{3}{c|}{Category 1}
          & \multicolumn{3}{c|}{Category 2}
                & \multicolumn{2}{c|}{Category 3}
\\\cline{3-10}
  & Name
    & \sw{Text1}
      & \sw{Text2}
        & \sw{Text3}
          & \sw{Text4}
            & \sw{Text5}
              & \sw{Text6}
                & \sw{Text7}
                  & \sw{Text8}
\\\hline
  \multirow{4}{*}{\sw{\small Category 1}}
  & & & & & & & & &
\\\cline{2-10}
  & & & & & & & & &
\\\cline{2-10}
  & & & & & & & & &
\\\cline{2-10}
  & & & & & & & & &
\\\hline
  \multirow{4}{*}{\sw{\small Category 2}}
  & & & & & & & & &
\\\cline{2-10}
  & & & & & & & & &
\\\cline{2-10}
  & & & & & & & & &
\\\cline{2-10}
  & & & & & & & & &
\\\hline
\end{tabular}

\end{document}

编辑:如何将第 3 类中的列数从 2 增加到 6,如评论中所问:

  • 将表格开头的行更改为

    \begin{tabular}{r|l|*{12}{c|}}
    
  • \multicolumn将标题更改为

    \multicolumn{6}{c|}{Category 3}
    
  • 将命令分别更改\cline\cline{3-14}\cline{2-14}

  • 您需要在所有行中添加列,即使它们保持为空,也要添加垂直线。这意味着添加

                & \sw{Text9}
                  & \sw{Text10}
                    & \sw{Text11}
                      & \sw{Text12}
    

用于列标题并将其他行延伸至

  & & & & & & & & & & & & &

答案2

您可能更喜欢使用 booktabs。

以下代码的输出

\documentclass{standalone}
\usepackage{booktabs}
\usepackage{rotating}
\newcommand\sw[1]{\small\begin{sideways}#1 \end{sideways}}
\usepackage{multirow}
\begin{document}
\def\arraystretch{1.25}
\begin{tabular}{rl*8{c}}
\toprule
  \multicolumn{2}{c}{}
    & \multicolumn{3}{c}{Category 1}
          & \multicolumn{3}{c}{Category 2}
                & \multicolumn{2}{c}{Category 3}
\\ 
  & Name
    & \sw{Text1}
      & \sw{Text2}
       & \sw{Text3}
          & \sw{Text4}
            & \sw{Text5}
              & \sw{Text6}
                & \sw{Text7}
                  & \sw{Text8}
\\ \midrule
  \multirow{4}{*}{\sw{Category 1}}
  & a & A & & & & & & &
\\
  & b & B & & & & & & &
\\
  & c & C & & & & & & &
\\
  & d & D & & & & & & &
\\ 
  \multirow{4}{*}{\sw{Category 2}}
  & a & A & & & & & & &
\\
  & b & B & & & & & & &
\\
  & c & C & & & & & & &
\\
  & d & D & & & & & & &
\\ \bottomrule
\end{tabular}
\end{document}

答案3

您可以使用\rotatebox{angle}{text}旋转文本(需要rotating包裹)。

您可以使用\multicolumn{num_cols}{alignment}{contents}创建跨越多列的单元格。

您可以使用\cline{from-to}对于水平规则不是跨越所有列。

您可以使用\multirow{num_rows}{width}{contents}创建跨越多行的单元格(需要multirow包裹)。

表格的参数*{11}{c|}是 11 倍的快捷方式c|,允许array包裹

\documentclass{article}
\usepackage{array}
\usepackage{rotating}% https://en.wikibooks.org/wiki/LaTeX/Rotations
\usepackage{multirow}% https://tex.stackexchange.com/a/73285/120953

\newcommand{\cat}[1]{#1}
\newcommand{\thead}[1]{#1}
\newcommand{\catver}[1]{\rotatebox{90}{\cat{#1}}}
\newcommand{\theadver}[1]{\rotatebox{90}{\thead{#1}\hspace{.7em}}}
\begin{document}
\begin{tabular}{*{11}{c|}}
\multicolumn{2}{l|}{}
& \multicolumn{3}{l|}{\cat{Category~1}}
& \multicolumn{3}{l|}{\cat{Category~2}}
& \multicolumn{3}{l|}{\cat{Category~3}}
% https://tex.stackexchange.com/a/8555/120953
\\\cline{3-11}
& \thead{Name}
& \theadver{Text~1}
& \theadver{Text~2}
& \theadver{Text~3}
& \theadver{Text~4}
& \theadver{Text~5}
& \theadver{Text~6}
& \theadver{Text~7}
& \theadver{Text~8}
& \theadver{Text~9}
\\\hline
\multirow{5}{*}{\catver{Category~1}} &&&&&&&&&&\\\cline{2-11}
&&&&&&&&&&\\\cline{2-11}
&&&&&&&&&&\\\cline{2-11}
&&&&&&&&&&\\\cline{2-11}
&&&&&&&&&&\\\hline
\multirow{5}{*}{\catver{Category~2}} &&&&&&&&&&\\\cline{2-11}
&&&&&&&&&&\\\cline{2-11}
&&&&&&&&&&\\\cline{2-11}
&&&&&&&&&&\\\cline{2-11}
&&&&&&&&&&\\\hline
\multirow{5}{*}{\catver{Category~3}} &&&&&&&&&&\\\cline{2-11}
&&&&&&&&&&\\\cline{2-11}
&&&&&&&&&&\\\cline{2-11}
&&&&&&&&&&\\\cline{2-11}
&&&&&&&&&&\\\hline
\end{tabular}
\end{document}

此外你可能还感兴趣这个问题关于垂直居中多行单元格的内容。

答案4

与。{NiceTabular}nicematrix

\documentclass{article}
\usepackage{nicematrix}

\begin{document}

\renewcommand{\arraystretch}{1.2}
\begin{NiceTabular}{*{10}{c}|}[columns-width=8mm,hvlines-except-borders]
\Block{2-2}{}
&      & \Block{1-3}{Category 1} &&& \Block{1-3}{Category 2} &&& \Block{1-2}{Category 3} \\
& \Block[borders = left]{}{} Name 
       & \RowStyle[cell-space-top-limit=2pt]{\rotate}
         Text1 & Text2 & Text3 & Text4 & Text5 & Text6 & Text7 & Text8 \\
\Block{4-1}{\rotate Category 1}
\\
\\
\\
\\
\Block{4-1}{\rotate Category 2}
\\
\\
\\
\\
\Hline
\end{NiceTabular}

\end{document}

上述代码的输出

相关内容