我需要在 LaTeX 中创建一个与 Word 文档中的表格完全相同的表格。
为此,我需要一个可以跨越多页且具有重复标题(longtable
等)的表格,并包含水平和垂直居中的合并单元格(multirow
、makecell
等)。部分内容需要旋转/垂直。
目前,我正在努力解决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}