LaTeX 表格 / 垂直对齐 / 间距

LaTeX 表格 / 垂直对齐 / 间距

我查看了很多有关表格、垂直对齐的教程,尝试过自己做,也尝试过使用 excel2latex Excel 插件做 - 但我的表格仍然有问题。非常感谢您的帮助。

\begin{table}[htbp]
\centering
\caption{Add caption}
\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|}
\toprule
\multirow{2}[4]{*}{long text} & \multirow{2}[4]{*}{text} & 
\multirow{2}[4]   {*}{\begin{sideways}text\end{sideways}} & 
\multirow{2}[4]  {*}{\begin{sideways}vertical long text\end{sideways}} &
\multicolumn{6}{c|}{long text} \\
\cmidrule{5-10}          &       &       &       & 1    & 2    & 3     & 4    & 5     & 6 \\
\midrule
...    & ...    & ...    & ...    & ...   & ...   & ...    & ...   & ...     & ...  \\
...    & ...    & ...    & ...    & ...   & ...   & ...     & ...  & ...     & ... \\
...    & ...    & ...    & ...    & ...   & ...   & ...     & ...   & ...     & ... \\
...     & ...   & ...   & ...   & ...   & ...   & ...     & ...   & ...     & ... \\
...    & ...    & ...    & ...    & ...   & ...   & ...     & ...  & ...     & ...  \\
...     & ...   & ...   & ...   & ...   & ...   & ...     & ...   & ...     & ... \\
...    & ...    & ...    & ...    & ...   & ...  & ... & ... & ...     & ... \\
\midrule
\multicolumn{10}{|c|}{long long note)} \\
\bottomrule
\end{tabular}
\label{tab:addlabel}
\end{table}

表格看起来应该是这样的 表格看起来应该是这样的

但结果是这样的

请帮我解开这个谜团!

答案1

基于 的解决方案makecell,允许在表格单元格中换行:

\documentclass{article}
\usepackage[utf8]{inputenc}
 \usepackage{booktabs}
\usepackage{multirow, makecell, caption}
\usepackage{rotating, graphicx}

\begin{document}

\begin{table}
\setlength{\bigstrutjot}{4pt} % Additional height: 4pt
\settowidth\rotheadsize{long text}
\caption{Add caption}
\begin{tabular}{cccccccccc}
\toprule\addlinespace
\multirowcell{2}{long text \\ long text \\ long text} & \multirowcell{3}{text} & & &
\multicolumn{6}{c}{horizontal long long text} \\[1ex]
\cmidrule(lr){5-10}\addlinespace
 & &\raisebox{3ex}[0pt][0pt]{\rotcell[cc]{text}} &
\raisebox{3ex}[0pt][0pt]{\rotcell[cc]{vertical \\ long text}}& 1 & 2 & 3 & 4 & 5 & 6 \\
\addlinespace
\midrule
… & … & … & … & … & … & … & … & … & … \\
… & … & … & … & … & … & … & … & … & … \\
… & … & … & … & … & … & … & … & … & … \\
… & … & … & … & … & … & … & … & … & … \\
… & … & … & … & … & … & … & … & … & … \\
… & … & … & … & … & … & … & … & … & … \\
… & … & … & … & … & … & … & … & … & … \\
\midrule
\multicolumn{10}{c}{long long note)} \\
\bottomrule
\end{tabular}
\end{table}

\end{document} 

在此处输入图片描述

答案2

您正在使用命令\toprule\midrule并且\bottomrule来自包书签。 在里面包装文档在第 4 节中,作者明确地状态:

[...] 新命令生成的规则无法保证与{|} 前言中字符生成的垂直线相连接。这是一个功能 [...]。您不应该在表格中使用垂直规则,故事结束。

因此,这种行为是有意为之的,因为您不应该使用垂直规则(垂直线)。 原因已在同一文档中前面介绍过,其中作者给出了创建专业表格的指南:

  1. 永远不要使用垂直规则。
  2. 切勿使用双重规则。
  3. 将单位放在列标题中(而不是表格主体中)。
  4. 小数点前一定要加一位数字,例如 0.1不是仅 .1
  5. 不要使用“重复”符号或任何其他类似的惯例来重复先前的值。在许多情况下,空白也同样适用。如果不行,则重复该值

然后,您在 和 侧向 的组合方面遇到了问题multirow。您可以手动调整,方法是添加\bigstrut到两个标题行,这会扩大它们的大小。我选择了额外的高度4pt,在我看来看起来相当不错。然后,通过将文本放在\parbox例如 1.5 厘米宽度的范围内,可以确保此文本的宽度不超过此宽度。

总的来说,结果非常令人满意:

结果

\documentclass{article}
\usepackage{booktabs}
\usepackage{multirow,bigstrut}
\usepackage{rotating}

\begin{document}

\setlength{\bigstrutjot}{4pt}    % Additional height: 4pt

\begin{tabular}{cccccccccc}
\toprule\bigstrut
\multirow{2}{*}{long text} & \multirow{2}[4]{*}{text} & 
\multirow{2}{*}[-1ex]{\begin{sideways}text\end{sideways}} & 
\multirow{2}{*}[1ex]{\begin{sideways}\parbox{1.5cm}{vertical long text}\end{sideways}} &
\multicolumn{6}{c}{long text} \\ 
\cmidrule{5-10}\bigstrut          &       &       &       & 1    & 2    & 3     & 4    & 5     & 6 \\
\midrule
...    & ...    & ...    & ...    & ...   & ...   & ...    & ...   & ...     & ...  \\
...    & ...    & ...    & ...    & ...   & ...   & ...     & ...  & ...     & ... \\
...    & ...    & ...    & ...    & ...   & ...   & ...     & ...   & ...     & ... \\
...     & ...   & ...   & ...   & ...   & ...   & ...     & ...   & ...     & ... \\
...    & ...    & ...    & ...    & ...   & ...   & ...     & ...  & ...     & ...  \\
...     & ...   & ...   & ...   & ...   & ...   & ...     & ...   & ...     & ... \\
...    & ...    & ...    & ...    & ...   & ...  & ... & ... & ...     & ... \\
\midrule
\multicolumn{10}{c}{long long note)} \\
\bottomrule
\end{tabular}

\end{document}

答案3

使用 ConTeXt 这非常简单自然桌

\setupcaption[table][location=top]

\starttext

\placetable[tab:addlabel]{Add caption}{
  \startTABLE[align={middle,lohi}]
    \NC[ny=2] long text \NC[ny=2] text \NC[ny=2] \rotate[90]{text} \NC[ny=2] \rotate[90]{vertical long text} \NC[nx=6] long text \NC\NR
    \NC 1 \NC 2 \NC 3 \NC 4 \NC 5 \NC 6 \NC\NR
    \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC\NR
    \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC\NR
    \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC\NR
    \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC\NR
    \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC\NR
    \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC\NR
    \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC ... \NC\NR
    \NC[nx=10] long long note \NC\NR
  \stopTABLE
}

\stoptext

在此处输入图片描述

相关内容