编译以下代码会显示问题所在。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 忽略了标题框的内容,将包含标题框的行的高度保留为没有标题框时的高度。这解决了我的问题。