如果另一个列标题需要多行,则 LaTeX booktas 包 cmidline 会被上推

如果另一个列标题需要多行,则 LaTeX booktas 包 cmidline 会被上推

编译以下代码会显示问题所在。booktabs文档中给出了第一个表格。跨度列后面的列cmidrule需要一行文本。第二个表格相同,但最后一列需要三行文本。被推高cmidrule了。这不是我们想要的。如何将 cmidline 保持在其应在的位置,即它跨越的列标题上方?

\documentclass{report}

\usepackage{booktabs}

\begin{document}

1. booktabs example: Last column head fits on single line

\begin{center}
\begin{tabular}{@{}llr@{}}
\toprule
\multicolumn{2}{c}{Item} \\
\cmidrule(r){1-2}
Animal & Description & Price (\$)\\
\midrule
Gnat      & per gram  & 13.65 \\
          & each      &  0.01 \\
Gnu       & stuffed   & 92.50 \\
Emu       & stuffed   & 33.33 \\
Armadillo & frozen    &  8.99 \\
\bottomrule
\end{tabular}
\end{center}

2. Modification: Last column head requires 3 lines

\begin{center}
\begin{tabular}{@{}llr@{}}
\toprule
\multicolumn{2}{c}{Item} \\
\cmidrule(r){1-2}
Animal & Description & \parbox[b][][b]{1.40cm}{\raggedleft Price\\in\\Dollars}\\
\midrule
Gnat      & per gram  & 13.65 \\
          & each      &  0.01 \\
Gnu       & stuffed   & 92.50 \\
Emu       & stuffed   & 33.33 \\
Armadillo & frozen    &  8.99 \\
\bottomrule
\end{tabular}
\end{center}

\end{document}

答案1

您可以隐藏标题的高度,然后使用零宽度规则进行调整:

在此处输入图片描述

\documentclass{report}

\usepackage{booktabs}

\begin{document}

1. booktabs example: Last column head fits on single line

\begin{center}
\begin{tabular}{@{}llr@{}}
\toprule
\multicolumn{2}{c}{Item} \\
\cmidrule(r){1-2}
Animal & Description & Price (\$)\\
\midrule
Gnat      & per gram  & 13.65 \\
          & each      &  0.01 \\
Gnu       & stuffed   & 92.50 \\
Emu       & stuffed   & 33.33 \\
Armadillo & frozen    &  8.99 \\
\bottomrule
\end{tabular}
\end{center}

2. Modification: Last column head requires 3 lines

\begin{center}
\begin{tabular}{@{}llr@{}}
\toprule
\multicolumn{2}{c}{Item} \\
\cmidrule(r){1-2}
Animal & Description & \parbox[b][][b]{1.40cm}{\raggedleft Price\\in\\Dollars}\\
\midrule
Gnat      & per gram  & 13.65 \\
          & each      &  0.01 \\
Gnu       & stuffed   & 92.50 \\
Emu       & stuffed   & 33.33 \\
Armadillo & frozen    &  8.99 \\
\bottomrule
\end{tabular}
\end{center}

3. Modification: 

\begin{center}
\begin{tabular}{@{}llr@{}}
\toprule
\multicolumn{2}{c}{Item}&\rule{0pt}{1.3\normalbaselineskip} \\
\cmidrule(r){1-2}
Animal & Description & 
\smash{\begin{tabular}[b]{@{}c@{}}Price\\in\\Dollars\end{tabular}}\\
\midrule
Gnat      & per gram  & 13.65 \\
          & each      &  0.01 \\
Gnu       & stuffed   & 92.50 \\
Emu       & stuffed   & 33.33 \\
Armadillo & frozen    &  8.99 \\
\bottomrule
\end{tabular}
\end{center}

\end{document}

答案2

我会努力将标题设为只有两行,将其粉碎,以便看不到它的深度。

\documentclass{report}

\usepackage{booktabs}

\newcommand{\smashedcell}[2]{%
  \smash{\begin{tabular}[t]{@{}#1@{}}#2\end{tabular}}%
}

\begin{document}

1. booktabs example: Last column head fits on single line

\begin{center}
\begin{tabular}{@{}llr@{}}
\toprule
\multicolumn{2}{c}{Item} \\
\cmidrule(r){1-2}
Animal & Description & Price (\$)\\
\midrule
Gnat      & per gram  & 13.65 \\
          & each      &  0.01 \\
Gnu       & stuffed   & 92.50 \\
Emu       & stuffed   & 33.33 \\
Armadillo & frozen    &  8.99 \\
\bottomrule
\end{tabular}
\end{center}

2. Modification: Last column head requires 3 lines

\begin{center}
\begin{tabular}{@{}llr@{}}
\toprule
\multicolumn{2}{c}{Item} & \smashedcell{c}{Price in\\Dollars}\\
\cmidrule(r){1-2}
Animal & Description & \\
\midrule
Gnat      & per gram  & 13.65 \\
          & each      &  0.01 \\
Gnu       & stuffed   & 92.50 \\
Emu       & stuffed   & 33.33 \\
Armadillo & frozen    &  8.99 \\
\bottomrule
\end{tabular}
\end{center}

\end{document}

在此处输入图片描述

答案3

不确定我在这里做的是否正确,如果不正确,请批评。

这两个答案都对我的问题有用,并给了我所需的答案,但我花了好几天的时间才理解它们。以下是我需要学习的内容。

TeX Book C18 数学打字的要点:\smash“使高度和深度变为零。”

C11 盒子“TeX 不知道墨水会流向何处——只有输出设备知道这一点。”

TeX 使用具有参考点、基线、高度和深度的框。字母、规则等的框连接起来形成文本行,这些文本行垂直排列以创建文本页面。

一行文本的高度(深度)是连接在一起的框的高度(深度)的最大值,所以我的三行标题将包含它的行的高度增加了约 3 倍。

\smash 将高度和深度更改为零。TeX 忽略了标题框的内容,将包含标题框的行的高度保留为没有标题框时的高度。这解决了我的问题。

相关内容