帮助在表格中换行,并在最右边的角落制作一条实线

帮助在表格中换行,并在最右边的角落制作一条实线

我正在尝试将文本换行放在长表中以实现以下目的: 在此处输入图片描述

但是,当使用下面的代码时,我得到了这个: 在此处输入图片描述

请问如何将标题中的文本移动到两行,以及如何在表格右侧实现一条垂直实线,而不是虚线?

    \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

相关内容