多行表格中的动态行高调整

多行表格中的动态行高调整

我需要在 LaTeX 中创建一个与 Word 文档中的表格完全相同的表格。

为此,我需要一个可以跨越多页且具有重复标题(longtable等)的表格,并包含水平和垂直居中的合并单元格(multirowmakecell等)。部分内容需要旋转/垂直。

目前,我正在努力解决multirow环境中内容溢出的问题。我已经尝试寻找解决方案超过一天了:

问题演示

\documentclass{article}

\usepackage{xltabular}
\usepackage{array}
\usepackage{makecell}
\usepackage{multirow}
\usepackage{graphicx}

\begin{document}
  \begin{xltabular}{\textwidth}{|X|X|}  
    \hline
    \thead{Two \\ lines} & \thead{One vertically centered line} \\
    \hline
    \multirowcell{2}{\rotatebox{90}{LONG CENTERED STRING }} & \makecell{Something} \\
    \cline{2-2}
    & \makecell{Something} \\            
    \hline
  \end{xltabular}
\end{document}

如何让表格根据最高行调整所有行高?也就是说,如何让表格调整两个“Something”行的高度,使它们的高度与“LONG CENTERED STRING”多行单元格的高度相等?

(我更喜欢一种不作弊的动态解决方案,因为表的内容也是某种程度上动态生成的。因此,手动调整行高或插入假行并不理想。)

答案1

这里有一个全自动版本。无需猜测行数。它测量垂直文本的长度,并使用该长度将支柱放在第二列单元格中。不过,我不知道这是否可以推广到您的用例。

\documentclass{article}
\usepackage{rotating}
\usepackage{xltabular}
\usepackage{booktabs}
\usepackage{makecell}
\usepackage{multirow}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\begin{document}

\newcommand{\verticaltext}{ LONG CENTERED STRING }
\newlength{\verticalsize}
\settowidth{\verticalsize}{\verticaltext}
\newcommand{\halfstrut}{\rule[-0.25\verticalsize]{0pt}{0.5\verticalsize}}

\begin{xltabular}{.7\textwidth}{CC}\toprule
\thead{Two \\ lines} & \thead{One vertically centered line} \\\midrule
\multirow[c]{1}*[20pt]{\begin{turn}{90} \verticaltext \end{turn}}
                     & \halfstrut a \\ \cmidrule{2-2}
                     & \halfstrut b \\ \midrule
whatever \\\bottomrule
\end{xltabular}

\end{document}

在此处输入图片描述

答案2

我的方法(Zarko 已经提出过)是处理旋转单元格使用的行数右侧单元格:

姆韦

\documentclass{article}
\usepackage{rotating}
\usepackage{xltabular}
\usepackage{booktabs}
\usepackage{makecell}
\usepackage{multirow}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\begin{document}
\begin{xltabular}{.7\textwidth}{CC}\toprule
\thead{Two \\ lines} & \thead{One vertically centered line} \\\midrule
\multirow{12.5}{*}{\begin{turn}{90} LONG CENTERED STRING \end{turn}} 
& \multirow{7}{*}{a}\\\\\\\\\\\\\cmidrule{2-2}
& \multirow{7}{*}{b}\\\\\\\\\\\\\midrule
whatever
\\\bottomrule
\end{xltabular}

相关内容