如何限制乳胶表旋转文本单元的高度?

如何限制乳胶表旋转文本单元的高度?

我创建了一个表格,其列(除第一列外)仅包含一个减号或加号,因此可以非常窄。

但是这些列的标题太长了。我无法很好地将它们放进去,所以决定将它们旋转 90 度。

现在看起来好多了,但我遇到了一个新问题——我找不到在标题中引入换行符的方法,这使得它们将表格高度拉伸到超出必要的程度:

編輯表

有没有办法限制高度,或者手动在标题中引入换行符?

上表的代码:

\documentclass[british]{article}
\usepackage{array}
\usepackage{multirow}
\usepackage{rotating}

\usepackage{babel}
\begin{document}
\begin{table}[!tbh]
\begin{tabular}{|l|>{\centering}p{1.5cm}|>{\centering}p{1.5cm}|>{\centering}p{1.5cm}|>{\centering}p{1.5cm}|>{\centering}p{1.5cm}|}
\hline 
\multirow{2}{*}{\textbf{Strategy}} & \multicolumn{5}{c|}{\textbf{Requirement}}\tabularnewline
\cline{2-6} \cline{3-6} \cline{4-6} \cline{5-6} \cline{6-6} 
 & \begin{turn}{90}
First requirement
\end{turn} & \begin{turn}{90}
Second requirement
\end{turn} & \begin{turn}{90}
And so on
\end{turn} & \begin{turn}{90}
And so forth
\end{turn} & \begin{turn}{90}
And so fifth
\end{turn}\tabularnewline
\hline 
\hline 
\emph{Bla} & + & -- & -- & -- & +\tabularnewline
\hline 
\emph{Bla bla} & -- & -- & + & -- & +\tabularnewline
\hline 
\emph{Bla bla bla} & -- & + & + & -- & --\tabularnewline
\hline 
\end{tabular}

\caption{\textbf{This is a table.} It shows things.}
\end{table}

\end{document}

答案1

在此处输入图片描述

\documentclass[british]{article}
\usepackage{array}
\usepackage{multirow}
\usepackage{rotating}

\usepackage{babel}
\begin{document}
\begin{table}[!tbh]
\begin{tabular}{|l|>{\centering}p{1.5cm}|>{\centering}p{1.5cm}|>{\centering}p{1.5cm}|>{\centering}p{1.5cm}|>{\centering}p{1.5cm}|}
\hline 
\multirow{2}{*}{\textbf{Strategy}} & \multicolumn{5}{c|}{\textbf{Requirement}}\tabularnewline
\cline{2-6} \cline{3-6} \cline{4-6} \cline{5-6} \cline{6-6} 
 & \begin{turn}{90}
{\tabular{@{}l@{}}First\\ requirement\endtabular} 
\end{turn} & \begin{turn}{90}
{\tabular{@{}l@{}}Second\\ requirement\endtabular}
\end{turn} & \begin{turn}{90}
And so on
\end{turn} & \begin{turn}{90}
And so forth
\end{turn} & \begin{turn}{90}
And so fifth
\end{turn}\tabularnewline
\hline 
\hline 
\emph{Bla} & + & -- & -- & -- & +\tabularnewline
\hline 
\emph{Bla bla} & -- & -- & + & -- & +\tabularnewline
\hline 
\emph{Bla bla bla} & -- & + & + & -- & --\tabularnewline
\hline 
\end{tabular}

\caption{\textbf{This is a table.} It shows things.}
\end{table}

\end{document}

或者

\documentclass[british]{article}
\usepackage{array}
\usepackage{multirow}
\usepackage{rotating,booktabs}

\usepackage{babel}
\begin{document}
\begin{table}[!tbh]
\begin{tabular}{l>{\centering}p{1cm}>{\centering}p{1cm}>{\centering}p{1cm}>{\centering}p{1cm}>{\centering}p{1cm}}
\toprule
\multirow{2}{*}{\textbf{Strategy}} & \multicolumn{5}{c}{\textbf{Requirement}}\tabularnewline
\cline{2-6} \cline{3-6} \cline{4-6} \cline{5-6} \cline{6-6} 
 & \begin{turn}{90}
{\tabular{@{}l@{}}First\\ requirement\endtabular} 
\end{turn} & \begin{turn}{90}
{\tabular{@{}l@{}}Second\\ requirement\endtabular}
\end{turn} & \begin{turn}{90}
And so on
\end{turn} & \begin{turn}{90}
And so forth
\end{turn} & \begin{turn}{90}
And so fifth
\end{turn}\tabularnewline
\hline 
\hline 
\emph{Bla} & + & -- & -- & -- & +\tabularnewline
\hline 
\emph{Bla bla} & -- & -- & + & -- & +\tabularnewline
\hline 
\emph{Bla bla bla} & -- & + & + & -- & --\tabularnewline
\bottomrule
\end{tabular}

\caption{\textbf{This is a table.} It shows things.}
\end{table}

\end{document}

在此处输入图片描述

答案2

一些建议:

  • 如果您希望限制一段文本的宽度 - 是的,在 TeX 看来,“第一个要求”、“第二个要求”等对象都是段落 - 并保留自动换行,您可以将段落粘贴到\parbox语句中。

  • \parbox需要两个参数:(i) 整体宽度(\widthof{And so forth\ }在下面的示例中设置为)和 (ii) 文本。我选择这个特定宽度是为了将需要换行的标题单元格数量限制为可管理的较小数量。您可以选择设置固定宽度,例如“3cm”,或任何您喜欢的宽度,而不是“动态”计算宽度。

  • 不要使用\begin{turn} ... \end{turn}包装器,而要使用\rotatebox{90}{...}指令。

  • 由于该表具有 5 个数据列,因此有 5 个旋转的标题单元格,因此创建一个专用的宏(\mybox如下所示,但您显然可以自由选择其他名称)来管理\rotatebox\parbox执行杂务很有用。

  • 由于 5 个数据列中不需要(水平)换行,我建议您将p列类型替换为w列类型。(w列类型由包提供array。)顺便说一句,数据列的宽度为 1.5 厘米似乎太多了;在下面的代码中,我将其宽度设置为 0.75 厘米。

  • 最后但同样重要的一点是,请通过省略所有垂直线并使用更少但间距适当的水平线,使表格“看起来”更加开放。

在此处输入图片描述

\documentclass[british]{article}
\usepackage{array}     % for 'w' column type and '\newcolumntype' macro
\newcolumntype{W}{>{$}w{c}{0.75cm}<{$}} % '1.5cm' seems excessive
\usepackage{graphicx}  % \rotatebox macro
\usepackage{babel}
\usepackage{booktabs}  % \toprule, \midrule, \bottomrule, \cmidrule
\usepackage{calc}      % \widthof macro
%% handy shortcut macro:
\newcommand\mybox[1]{\rotatebox{90}{%
    \parbox{\widthof{And so forth\ }}{\raggedright #1}}}

\begin{document}
\begin{table}[!tbh]
\centering % <-- important

\begin{tabular}{@{} >{\em}l *{5}{W} @{}} 
\toprule 
   \textbf{\textup{Strategy}}
 & \multicolumn{5}{c@{}}{\textbf{Requirements}} \\ 
\cmidrule(l){2-6} 
 & \mybox{First requirement} 
 & \mybox{Second requirement} 
 & \mybox{And so on} 
 & \mybox{And so forth} 
 & \mybox{And so fifth} \\ 
\midrule 
Bla         & + & - & - & - & + \\  
Bla bla     & - & - & + & - & + \\ 
Bla bla bla & - & + & + & - & - \\ 
\bottomrule 
\end{tabular}

\caption{\textbf{This is a table.} It shows things.}
\end{table}
\end{document}

答案3

具有nicematrix(≥ 2023-08-14 的 6.22)和booktabs(并本着 的精神booktabs):

\documentclass[british]{article}
\usepackage{babel}
\usepackage{nicematrix}    
\usepackage{booktabs}  

\begin{document}

\begin{table}[!tbh]
\centering 

\begin{NiceTabular}{@{} >{\itshape}l *{5}{w{c}{0.75cm}} @{}} 
  \toprule 
  \RowStyle[bold]{\upshape}
     Strategy
   & \Block{1-5}{Requirements} \\ 
  \cmidrule(l){2-6} 
  \RowStyle{\rotate}
   & \Block{}{First\\ requirement} 
   & \Block{}{Second\\ requirement} 
   & And so on
   & And so forth
   & And so fifth \\ 
  \midrule 
  Bla         & $+$ & $-$ & $-$ & $-$ & $+$ \\  
  Bla bla     & $-$ & $-$ & $+$ & $-$ & $+$ \\ 
  Bla bla bla & $-$ & $+$ & $+$ & $-$ & $-$ \\ 
  \bottomrule 
\end{NiceTabular}

\caption{\textbf{This is a table.} It shows things.}
\end{table}

\end{document}

上述代码的输出

相关内容