我在有点复杂的表格设置中遇到了对齐问题(请参阅 MWE)。我的表格通常会拉伸整个纸张的宽度(为了说明这一点,此处减少了列数,并将表格宽度设置为 9 厘米)。我使用包X
的选项tabularx
来拉伸所有列(前两列除外)。列的标题X
被旋转。列的内容X
始终是每个单元格两行。
我想要实现的目标如下:
- 第一列中的文本应位于第二列文本之间(例如,
Test1
位于XY
和之间ZY
) - 第二列中的文本应位于两列行的中间
X
(例如,XY
位于以 开头的行0,0+
和以 开头的行的中间1,0
) - 页眉应与底部对齐,以便所有页眉都从中间标尺线开始。
- 标题应位于其列的中央。
我认为我已经实现了第 1 点和第 2 点。也许Test1
等可以稍微低一点,以便位于线条之间。但我不知道如何实现第 3 点和第 4 点。
如果有人能帮助我就好了?
梅威瑟:
\documentclass{article}
\usepackage{tabularx,rotating,booktabs,multirow}
\usepackage[utf8]{inputenc}
\renewcommand{\tabularxcolumn}[1]{m{#1}}
\newcommand*\rot{\rotatebox{90}}
\newcommand{\forloop}[5][1]{
\setcounter{#2}{#3}%
\ifthenelse{#4}{#5\addtocounter{#2}{#1}%
\forloop[#1]{#2}{\value{#2}}{#4}{#5}}%
{}}
\newcounter{crcounter}
\newcommand{\compensaterule}[1]{%
\forloop{crcounter}{1}{\value{crcounter} < #1}%
{\vspace*{-\aboverulesep}\vspace*{-\belowrulesep}}}
\newcommand{\multirowbt}[3]{\multirow{#1}{#2}%
{\compensaterule{#1}#3}}
\begin{document}
\begin{table}[tbp]
\centering
\label{tab:Test}
\begin{tabularx}{9cm}{p{2.5cm} p{2.0cm} *{3}{>{\raggedright\arraybackslash}X}}
\textbf{Column1} & \textbf{Column2}
& \rot{Long column name}
& \rot{Column4}
& \rot{Column5} \\
\midrule
\multirowbt{2}{*}{Test1} & XY & $0,0 + 1,0$ & $0,0 + 0,0$ & $0,0 + 0,0$ \\
& ZY & $0,0 + 0,0$ & $0,0 + 0,0$ & $0,0 + 0,0$ \\
\cmidrule(lr){3-5}
\multirowbt{2}{*}{Test2} & XY & $0,0 + 0,0$ & $0,0 + 0,0$ & $0,0 + 0,0$ \\
& ZY & $0,0 + 0,0$ & $0,0 + 0,0$ & $0,0 + 0,0$ \\
\cmidrule(lr){3-5}
\multirowbt{2}{*}{Test3} & XY & $0,0 + 0,0$ & $0,0 + 0,0$ & $0,0 + 0,0$ \\
& ZY & $0,0 + 0,0$ & $0,0 + 0,0$ & $0,0 + 0,0$ \\
\cmidrule(lr){3-5}
\multirowbt{2}{*}{Test4} & XY & $0,0 + 0,0$ & $0,0 + 0,0$ & $0,0 + 0,0$ \\
& ZY & $0,0 + 0,0$ & $0,0 + 0,0$ & $0,0 + 0,0$ \\
\bottomrule
\end{tabularx}
\end{table}
\end{document}
答案1
由于该问题已在评论中得到解决,@GonzaloMedina 不再活跃,因此要求添加答案,如下所示:
使用\multicolumn{1}{c}{column text}
列标题,您可以取代您正在排版的列的原始列设置,同时创建居中的列,因此这里是 Gonzalo 的解决方案
\documentclass{article}
\usepackage{tabularx,rotating,booktabs,multirow}
\usepackage[utf8]{inputenc}
\renewcommand{\tabularxcolumn}[1]{m{#1}}
\newcommand*\rot{\rotatebox{90}}
\newcommand{\forloop}[5][1]{
\setcounter{#2}{#3}%
\ifthenelse{#4}{#5\addtocounter{#2}{#1}%
\forloop[#1]{#2}{\value{#2}}{#4}{#5}}%
{}}
\newcounter{crcounter}
\newcommand{\compensaterule}[1]{%
\forloop{crcounter}{1}{\value{crcounter} < #1}%
{\vspace*{-\aboverulesep}\vspace*{-\belowrulesep}}}
\newcommand{\multirowbt}[3]{\multirow{#1}{#2}%
{\compensaterule{#1}#3}}
\begin{document}
\begin{table}[tbp]
\centering
\label{tab:Test}
\begin{tabularx}{9cm}{p{2.5cm} p{2.0cm} *{3}{>{\raggedright\arraybackslash}X}}
\multicolumn{1}{c}{ \textbf{Column1}} &\multicolumn{1}{c}{ \textbf{Column2}}
&\multicolumn{1}{c}{ \rot{Long column name}}
& \multicolumn{1}{c}{\rot{Column4}}
& \multicolumn{1}{c}{\rot{Column5}} \\
\midrule
\multirowbt{2}{*}{Test1} & XY & $0,0 + 1,0$ & $0,0 + 0,0$ & $0,0 + 0,0$ \\
& ZY & $0,0 + 0,0$ & $0,0 + 0,0$ & $0,0 + 0,0$ \\
\cmidrule(lr){3-5}
\multirowbt{2}{*}{Test2} & XY & $0,0 + 0,0$ & $0,0 + 0,0$ & $0,0 + 0,0$ \\
& ZY & $0,0 + 0,0$ & $0,0 + 0,0$ & $0,0 + 0,0$ \\
\cmidrule(lr){3-5}
\multirowbt{2}{*}{Test3} & XY & $0,0 + 0,0$ & $0,0 + 0,0$ & $0,0 + 0,0$ \\
& ZY & $0,0 + 0,0$ & $0,0 + 0,0$ & $0,0 + 0,0$ \\
\cmidrule(lr){3-5}
\multirowbt{2}{*}{Test4} & XY & $0,0 + 0,0$ & $0,0 + 0,0$ & $0,0 + 0,0$ \\
& ZY & $0,0 + 0,0$ & $0,0 + 0,0$ & $0,0 + 0,0$ \\
\bottomrule
\end{tabularx}
\end{table}
\end{document}
及其输出: