请问如何将标题中的文本移动到两行,以及如何在表格右侧实现一条垂直实线,而不是虚线?
\begin{longtable}{|c||ccccc|}
\toprule
\hline
\multirow{2}{*}{\bfseries Sample Name} &
\multicolumn{3}{c}{\bfseries Temperatures (\textsuperscript{o}C)} &
\multirow{2}{*}{\bfseries Peak Height (\%)} &
\multirow{2}{*}{\bfseries CO\textsubscript{2} Reactivity (\%)}\\
\cline{2-4}
& Ignition & Peak & Burnout \\
\hline
\hline
\endfirsthead
答案1
的第二个参数允许\multirow
您指定宽度。如果您只是使用{*}
,就像您所做的那样,它将使单元格足够大以容纳全部内容,但如果您指定宽度,它将允许换行。(但您需要告诉它在换行之前要走多宽。)
因为这会在单元格中引入 parbox,所以您需要\centering
再次使用 使其居中。(但是,\centering
重新定义了\\
,因此在最后一列中您需要使用\arraybackslash
将其恢复为表格中的正常用法。)
\toprule
、等命令\midrule
来自 booktabs 包。booktabs 包与在表格中使用垂直线不兼容。不要使用这些命令,只需坚持使用\hline
、\cline
等即可。(或者您可以使用仅有的这些命令并完全删除垂直线;一般来说表格中不需要垂直线。
但是,您之所以没有在第二行最右侧得到一条完整的垂直线,是因为您没有该行的最后两个单元格。只需& &
在该行中输入空单元格即可。
这是一个建议。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{array}
\usepackage{longtable}
\usepackage{multirow}
\begin{document}
\setlength{\tabcolsep}{2pt}
\begin{longtable}{|c|ccccc|}
\hline
\multirow{2}{2cm}{\centering\bfseries Sample Name} &
\multicolumn{3}{c}{\bfseries Temperatures ($^\mathbf{\circ}$C)} &
\multirow{2}{2cm}{\centering\bfseries Peak Height (\%)} &
\multirow{2}{2.7cm}{\centering\arraybackslash\bfseries CO\textsubscript{2} Reactivity (\%)}\\
\cline{2-4}
& Ignition & Peak & Burnout & & \\
\hline
\endhead
A & 517.56 & 668.61 & 782.66 & 6.12 & 13.03 \\
B & 522.48 & 646.93 & 772.85 & 5.90 & 14.00 \\
\hline
\end{longtable}
\end{document}
您可能考虑删除(%)
最后两列中的 ,或者甚至将百分号移到内容行中,因为这样会使列比需要的更宽,这有点难看。(将它们推到一行下方也会很难看。)您自己决定吧。
我删除了双线,因为我觉得它们不好看,但是如果你觉得它们很难看的话,你可以恢复它们。
可能还有其他可以改进的地方(例如,使用像第一张图片那样的 sans 字体,使用 siunitx 包将列在小数点处对齐,等等)但我现在就把它留在这里。
答案2
tabularray
如果您对表格使用包,则表格的代码会更加简单和简洁。- 通过使用
tabularray
您将避免代码片段的所有问题:
\documentclass{article}
\usepackage{tabularray}
\UseTblrLibrary{siunitx}
\usepackage[version=4]{mhchem}
\begin{document}
\begin{longtblr}[
caption = {my long table ...},
label = {tab:long}
]{hline{1,3,Z} = 1pt,
hline{2} = solid,
colspec = {l *{6}{X[c]}},
row{1} = {font=\small\bfseries},
vspan = even,
rowhead = 2
}
\SetCell[r=2]{l} {Sample\\ Name}
& \SetCell[c=3]{c} Temperatures (\si{\celsius})
& & & \SetCell[r=2]{c} Peak Height (\%)
& \SetCell[r=2]{c} \ce{CO2} Reactivity (\%) \\
& Ignition
& Peak
& Burnout
& & \\
%% table body
A & 517.56 & 668.61 & 782.66 & 6.12 & 13.03 \\
B & 522.48 & 646.93 & 772.85 & 5.90 & 14.00 \\
\end{longtblr}
\end{document}
- 由于您没有提供表格内容的示例,我从@frabjous 的答案中窃取了它。
- 如果列中的数字位数不同,您可以考虑使用
siunitx
包将它们在小数点处对齐。在这种情况下,表格序言可以是(其中您应该适应table-format
列中数字的整数和小数位数):
\documentclass{article}
\usepackage{tabularray}
\UseTblrLibrary{siunitx}
\usepackage[version=4]{mhchem}
\begin{document}
\begin{longtblr}[
caption = {my long table ...},
label = {tab:long}
]{hline{1,3,Z} = 1pt,
hline{2} = solid,
colspec = {@{} l *{6}{X[c, si = {table-format=3.2}]} @{}},
row{1} = {font=\small\bfseries, guard},
row{2} = {guard},
vspan = even,
rowhead = 2
}
%% table body