如何使用\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}