我有以下示例 LaTeX 表代码:
\begin{table}[h!]
\centering
\resizebox{0.9\textwidth}{!}{%
\begin{tabular}{@{}c|ccccccc@{}}
\hline
& \multicolumn{3}{c}{Testword and large Text1} & \hphantom{------} & \multicolumn{3}{c}{Testword and large Text2} \\ \hline
& 111 & 22222 & 33333 & & 444 & 5555 & 666666 \\ \hline
Test-Row-1 & 74,15 & 49,74 & 60,40 & & 0,00 & 0,00 & 0,83 \\
Test-Row-2 & 23,16 & 11,35 & 25,70 & & 0,00 & 0,00 & 0,00 \\
Test-Row-3 & 33,90 & 10,28 & 23,78 & & 0,00 & 0,00 & 0,00 \\
\\\hline
& 111 & 22222 & 33333 & & 444 & 5555 & 666666 \\ \hline
Test-Row-5 & 69,54 & 58,08 & 59,14 & & 0,00 & 0,00 & 1,49 \\
Test-Row-6 & 35,49 & 23,25 & 27,95 & & 0,00 & 0,00 & 0,00 \\
Test-Row-7 & 27,77 & 24,54 & 23,29 & & 0,00 & 0,00 & 0,00 \\ \hline
\end{tabular}%
}
\end{table}
首先,不幸的是,表格中没有任何东西居中。问题是,包含的行中的单词越大111 & 22222 & 33333 & & 444 & 5555 & 666666
,表格居中的可能性就越大。但是,不幸的是,即使使用 \phantom{},我也未能找到我需要的单词。
此外,我发现表格很难阅读,我仍在寻找让空闲行(between Test-Row-3 and Test-Row-4)
更美观的方法。上面的行Test-Row-4
应该与上面的行明显分开,但仍然要求所有信息都在一个表格中。
答案1
我提供了三种可用的方法。第一种是使用包multirow
并使用单元格内部makecell
来拆分长标题。\\
nicematrix
第二种方法只使用提供强大命令的包,\Block
从而实现更紧凑的代码。该包还允许使用一般指令来垂直拉伸所有单元格。
最后,对列的宽度进行精细控制,使得所有列的宽度都相同,而不管其内容如何。
\\
可以通过在as后添加垂直空间来增加行之间的间隔[7pt]
。
在单元格内使用换行符的注意事项:有这个功能真是太好了。在这个简单的 MWE 中,这不是必需的,但在现实世界中,如果你的长标题变大,它会扩大表格并破坏布局。自己尝试一下。
美化的下一个阶段是处理规则和标题(不是问题的一部分)。
\documentclass[12pt,a4paper]{article}
\usepackage{nicematrix}
\usepackage{multirow}
\usepackage{makecell}
\begin{document}
\begin{table}[h!]
\centering
\renewcommand{\arraystretch}{1.2}
\begin{tabular}{@{}c|ccccccc@{}}
\hline
&\multicolumn{3}{c}{\multirowcell{2}{Testword and \\ large Text1}} &
&\multicolumn{3}{c}{\multirowcell{2}{Testword and \\ large Text2}} \\
& & & & & & & \\
\hline
& 111 & 22222 & 33333 & & 444 & 5555 & 666666 \\ \hline
Test-Row-1 & 74,15 & 49,74 & 60,40 & & 0,00 & 0,00 & 0,83 \\
Test-Row-2 & 23,16 & 11,35 & 25,70 & & 0,00 & 0,00 & 0,00 \\
Test-Row-3 & 33,90 & 10,28 & 23,78 & & 0,00 & 0,00 & 0,00 \\[6pt]%increase vertical separation
\hline
& 111 & 22222 & 33333 & & 444 & 5555 & 666666 \\ \hline
Test-Row-5 & 69,54 & 58,08 & 59,14 & & 0,00 & 0,00 & 1,49 \\
Test-Row-6 & 35,49 & 23,25 & 27,95 & & 0,00 & 0,00 & 0,00 \\
Test-Row-7 & 27,77 & 24,54 & 23,29 & & 0,00 & 0,00 & 0,00 \\ \hline
\end{tabular}%
\caption{Intra-Klassen-Abweichung with multirow and makecell}
\label{tab:intra-class-deviation}
\end{table}
\begin{table}[h!]
\centering
\begin{NiceTabular}{@{}c|c c c c c c c@{}}[
cell-space-top-limit = 5pt, % stretch the cells
cell-space-bottom-limit = 5pt]
\hline
&\Block{1-3}{Testword and \\ large Text1} & & &
&\Block{1-3}{Testword and \\ large Text2} & &\\
\hline
& 111 & 22222 & 33333 & & 444 & 5555 & 666666 \\ \hline
Test-Row-1 & 74,15 & 49,74 & 60,40 & & 0,00& 0,00 & 0,83 \\
Test-Row-2 & 23,16 & 11,35 & 25,70 & & 0,00& 0,00 & 0,00 \\
Test-Row-3 & 33,90 & 10,28 & 23,78 & & 0,00& 0,00 & 0,00 \\[7pt] %increase vertical separation
\hline
& 111 & 22222 & 33333 & & 444 & 5555 & 666666 \\ \hline
Test-Row-5 & 69,54 & 58,08 & 59,14 & & 0,00& 0,00 & 1,49 \\
Test-Row-6 & 35,49 & 23,25 & 27,95 & & 0,00& 0,00 & 0,00 \\
Test-Row-7 & 27,77 & 24,54 & 23,29 & & 0,00& 0,00 & 0,00 \\ \hline
\end{NiceTabular}%
\caption{Intra-Klassen-Abweichung with nicematrix}
\label{tab:intra-class-deviation2}
\end{table}
\newcolumntype{P}[1]{>{\centering\arraybackslash}p{#1\textwidth}}
\begin{table}[h!]
\centering
\renewcommand{\arraystretch}{1.2}
\begin{tabular}{@{}c| *{3}{P{0.1}} P{0} *{3}{P{0.1}} @{}}
\hline
&\multicolumn{3}{c}{\multirowcell{2}{Testword and \\ large Text1}} &
&\multicolumn{3}{c}{\multirowcell{2}{Testword and \\ large Text2}} \\
& & & & & & & \\
\hline
& 111 & 22222 & 33333 & & 444 & 5555 & 666666 \\ \hline
Test-Row-1 & 74,15 & 49,74 & 60,40 & & 0,00 & 0,00 & 0,83 \\
Test-Row-2 & 23,16 & 11,35 & 25,70 & & 0,00 & 0,00 & 0,00 \\
Test-Row-3 & 33,90 & 10,28 & 23,78 & & 0,00 & 0,00 & 0,00 \\[6pt]%increse vertical space
\hline
& 111 & 22222 & 33333 & & 444 & 5555 & 666666 \\ \hline
Test-Row-5 & 69,54 & 58,08 & 59,14 & & 0,00 & 0,00 & 1,49 \\
Test-Row-6 & 35,49 & 23,25 & 27,95 & & 0,00 & 0,00 & 0,00 \\
Test-Row-7 & 27,77 & 24,54 & 23,29 & & 0,00 & 0,00 & 0,00 \\ \hline
\end{tabular}%
\caption{Intra-Klassen-Abweichung with multirow and makecell.\\
All columns with the same width.}
\label{tab:intra-class-deviation3}
\end{table}
\end{document}
答案2
这个怎么样?带有w
列类型和一些奇特的规则吗?
\documentclass{article}
\usepackage{lipsum}
\usepackage{array}
\usepackage[svgnames, table]{xcolor}
\begin{document}
\lipsum[47]
\begin{table}[!h]
\centering\arrayrulecolor{LightGray!60!Lavender}
\arrayrulewidth=1.2pt
\setlength{\extrarowheight}{2pt}
\begin{tabular}{@{}c!{\color{LightGray!60!Lavender}\vrule width 2.4pt}*{3}{wc{1.25cm} }!{\color{LightGray!60!Lavender}\vrule width 6pt} *{3}{wc{1.25cm} }@{}}
\hline
& \multicolumn{3}{c}{Testword and large Text1} & \multicolumn{3}{c}{Testword and large Text2} \\ \hline
& 111 & 22222 & 33333 & 444 & 5555 & 666666 \\ \hline
Test-Row-1 & 74,15 & 49,74 & 60,40 & 0,00 & 0,00 & 0,83 \\
Test-Row-2 & 23,16 & 11,35 & 25,70 & 0,00 & 0,00 & 0,00 \\
Test-Row-3 & 33,90 & 10,28 & 23,78 & 0,00 & 0,00 & 0,00 \\
& & &
\\\hline
& 111 & 22222 & 33333 & 444 & 5555 & 666666 \\ \hline
Test-Row-5 & 69,54 & 58,08 & 59,14 & 0,00 & 0,00 & 1,49 \\
Test-Row-6 & 35,49 & 23,25 & 27,95 & 0,00 & 0,00 & 0,00 \\
Test-Row-7 & 27,77 & 24,54 & 23,29 & 0,00 & 0,00 & 0,00 \\ \hline
\end{tabular}%
\end{table}
\end{document}
答案3
多列单元格的宽度大于跨列的总宽度。正如问题下方的评论中所述,您需要增加跨列的宽度,例如,按照下面的 MWE 中的做法来规定它们的宽度。
使用包S
中定义的列类型siunitx
、规定的列宽table-column-width=3.3em
(估计为多列宽度的 1/3)并采用包中定义的规则booktabs
:
\documentclass{article} % used document class is unknown
\usepackage{geometry} % page layout is unknown
\usepackage{booktabs, tabularx}
\NewExpandableDocumentCommand\mcc{O{1}m}
{\multicolumn{#1}{c}{#2}}
\usepackage[locale = DE]{siunitx}
\begin{document}
\begin{table}[ht]
\centering
\begin{tabular}{@{}c *{3}{S[table-format=2.2,
table-column-width=3.3em]}
*{3}{S[table-format=1.2,
table-column-width=3.3em]} @{}}
\toprule
& \mcc[3]{Test word and large Text1} & \mcc[3]{Test word and large Text2} \\
\cmidrule(r){2-4}
\cmidrule(l){5-7}
& {111} & {22222} & {33333} & {444} & {5555} & {666666} \\
\midrule
Test-Row-1 & 74,15 & 49,74 & 60,40 & 0,00 & 0,00 & 0,83 \\
Test-Row-2 & 23,16 & 11,35 & 25,70 & 0,00 & 0,00 & 0,00 \\
Test-Row-3 & 33,90 & 10,28 & 23,78 & 0,00 & 0,00 & 0,00 \\
\midrule
& {111} & {22222} & {33333} & {444} & {5555} & {666666} \\
\midrule
Test-Row-5 & 69,54 & 58,08 & 59,14 & 0,00 & 0,00 & 1,49 \\
Test-Row-6 & 35,49 & 23,25 & 27,95 & 0,00 & 0,00 & 0,00 \\
Test-Row-7 & 27,77 & 24,54 & 23,29 & 0,00 & 0,00 & 0,00 \\
\bottomrule
\end{tabular}%
\end{table}
\end{document}