为什么这些列单元格中的文本没有居中?

为什么这些列单元格中的文本没有居中?

我有以下示例 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]

AB

C

在单元格内使用换行符的注意事项:有这个功能真是太好了。在这个简单的 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}

相关内容