高级表格不适用于回忆录课程,为什么?

高级表格不适用于回忆录课程,为什么?
\documentclass[a4paper,12pt]{report}
\usepackage[margin=1 in]{geometry}
\usepackage{booktabs}

\begin{document}
\section{report Advanced Tables}
\newcommand{\ra}[1]{\renewcommand{\arraystretch}{#1}}

\begin{table}[b]
\ra{1}
\begin{adjustbox}
\small
\begin{tabular}{c{}ccc{}ccc}\toprule 
&& \multicolumn{3}{c}{Geometric Arguements} && \multicolumn{3}{c}{Line Arguments} \\
\hline
$A_b$ & & $(B/C)_{circle}$  & $(D/E)_{Rect}$  & $(F/G)_{square}$ & & $H_{line}$ & $h_s/h_{avg}$ & $G_a/n_{nor}$ \\ \hline
$P_{p}/T_{t} = 4.15$ \\
2.56  && 3.56  & 7.89   & 9.97  && 4.52 & 8.80  & 80.78 \\
$P_{p}/T_{t} = 5.15$ \\
56.5    && 3.09 & 1.45  & 3.56  && 2.12 & 1.72  & 59.94 \\ 
77.1    && 8.89 & 1.96  & 4.60  && 1.47 & 1.74  & 90.45  \\
\hline
\end{tabular}
\end{adjustbox}
\caption{\label{tab:table_one}report class advanced table}
\end{table}

\end{document}

代码输出如下:

在此处输入图片描述

如果\documentclass改为memoir它说

Fatal error occured

没有生成 PDF 文件的输出。是否有人可以在 中生成相同的输出memoir

答案1

主要错误是由于缺少必需的参数而导致的\begin{adjustbox}。另一方面,在表格周围加上

\begin{adjustbox}{}
<table>
\end{adjustbox}

除了本地化字体大小更改外,什么也不做。但保留它以供将来调整并无害。

{}您对 和 的论证也存在错误,tabular&&实际上应该简单地是&

这是修复后的版本,用于siunitx更好地对齐数字。我还修复了文本下标,使其变为直立字体。

\documentclass[a4paper,12pt]{memoir}

\usepackage[margin=1in]{geometry}

\usepackage{booktabs,siunitx,adjustbox}

\begin{document}

\section{report Advanced Tables}

\begin{table}[b]
\centering
\begin{adjustbox}{}
\small
\begin{tabular}{
  S[table-format=2.2]
  *{5}{S[table-format=1.2]}
  S[table-format=2.2]
}
\toprule 
& \multicolumn{3}{c}{Geometric Arguments} & \multicolumn{3}{c}{Line Arguments} \\
\cmidrule(lr){2-4}\cmidrule(lr){5-7}
{$A_b$} &
  {$(B/C)_{\mathrm{circle}}$} &
  {$(D/E)_{\mathrm{Rect}}$} &
  {$(F/G)_{\mathrm{square}}$} &
  {$H_{\mathrm{line}}$} &
  {$h_s/h_{\mathrm{avg}}$} &
  {$G_a/n_{\mathrm{nor}}$} \\
\midrule
\multicolumn{7}{@{}l}{$P_{p}/T_{t} = \num{4.15}$} \\
2.56  & 3.56  & 7.89   & 9.97  & 4.52 & 8.80  & 80.78 \\
\midrule
\multicolumn{7}{@{}l}{$P_{p}/T_{t} = \num{5.15}$} \\
56.5    & 3.09 & 1.45  & 3.56  & 2.12 & 1.72  & 59.94 \\ 
77.1    & 8.89 & 1.96  & 4.60  & 1.47 & 1.74  & 90.45  \\
\bottomrule
\end{tabular}
\end{adjustbox}

\caption{Report class advanced table\label{tab:table_one}}

\end{table}

\end{document}

在此处输入图片描述

答案2

这是一个无需机制即可实现的解决方案,并且可与和文档类adjustbox一起编译。它使用环境来确保表格占据文本块的整个宽度。reportmemoirtabularx

在此处输入图片描述

\documentclass[a4paper,12pt]{report}

\usepackage[margin=1in]{geometry}
\usepackage{booktabs,amsmath,tabularx}
\newcolumntype{C}{>{\centering\arraybackslash}X}

\begin{document}

\section{Report Advanced Tables}

\begin{table}[h]
\begin{tabularx}{\textwidth}{@{} cc *{5}{C} c @{}}
\toprule 
$P_{p}/T_{t}$ & $A_b$
& \multicolumn{3}{c}{Geometric Arguments} 
& \multicolumn{3}{c@{}}{Line Arguments} \\
\cmidrule(lr){3-5} \cmidrule(l){6-8}
& & 
$(B/C)_{\textit{circle}}$  & $(D/E)_{\textit{Rect}}$  & $(F/G)_{\textit{square}}$ & 
$H_{\textit{line}}$ & $h_s/h_{\textit{avg}}$ & $G_a/n_{\textit{nor}}$ \\ 
\midrule
4.15 & 2.56 & 3.56 & 7.89 & 9.97 & 4.52 & 8.80 & 80.78 \\
\addlinespace
5.15 & 56.5 & 3.09 & 1.45 & 3.56 & 2.12 & 1.72 & 59.94 \\ 
     & 77.1 & 8.89 & 1.96 & 4.60 & 1.47 & 1.74 & 90.45 \\
\bottomrule
\end{tabularx}

\caption{report class advanced table} \label{tab:table_one}

\end{table}
\end{document}

答案3

我没有看到adjustbox在您的表格中使用(它是在 MWE 中提供的,导致错误)的任何好处,我对其进行了评论(以便将来可能正确使用)。

删除所有多余的“与”符号并对表格进行稍微“美化”后,我在回忆录文档类中得到了以下结果:

在此处输入图片描述

    \documentclass[a4paper,12pt]{memoir}
        \usepackage[margin=1 in,showframe]{geometry}
        \usepackage{array,booktabs,makecell,multirow}
        \usepackage{adjustbox}

    \newcommand{\ra}[1]{\renewcommand{\arraystretch}{#1}}

        \begin{document}
    \chapter*{Report Advanced Tables}
    \begin{table}[htb]\centering
\ra{1}
\setlength{\tabcolsep}{9pt}
%\begin{adjustbox}{} %<-- added missing part 
\small
    \begin{tabular}{*{8}{>{$}c<{$}}}
    \toprule
\multirowcell{2}{P_{p}/T_{t}}
    &   \multirowcell{2}{A_b}
        & \multicolumn{3}{c}{Geometric Arguments}
            & \multicolumn{3}{c}{Line Arguments}                \\
    \cmidrule(lr){3-5}\cmidrule(lr){6-8}
    &
        &  (B/C)_{circle}
            &   (D/E)_{Rect}
                &   (F/G)_{square}
                    &  H_{line}
                        & h_s/h_{avg}
                            & G_a/n_{nor}                       \\
    \midrule
4.15    & 2.56  & 3.56  & 7.89  & 9.97  & 4.52  & 8.80  & 80.78 \\
5.15    & 56.5  & 3.09  & 1.45  & 3.56  & 2.12  & 1.72  & 59.94 \\
        & 77.1  & 8.89  & 1.96  & 4.60  & 1.47  & 1.74  & 90.45 \\
    \bottomrule
    \end{tabular}
    \end{adjustbox}
        \caption{report class advanced table}
    \label{tab:table_one}
    \end{table}

geometry我在参数之间添加了一些内容showframes以便更好地查看表格的宽度。

编辑(1): 看到 Mico 的回答后,我意识到我错误地解码了表格数据 :-( 它实际上有 8 列,而不是像我从您的 MWE 中认识到的那样有 7 列。现在我纠正这个问题,并添加了两个包:˙makecell˙ 和multirow。我使用它们来为前两列制作列头。我还扩大了列间距。这样表格宽度几乎等于文本宽度。当然,使用 可以获得更精确的文本拟合, tabularx正如 Mico 在他的回答中所展示的那样。

如果您希望将表格宽度与文本宽度相同,那么最简单的解决方案就是使用tabularx表格环境。

编辑(2):关于 的使用,adjustbox我纠正了自己。如果使用正确,也可以memoir像他的回答中精心设计的那样使用,并在评论中指出了我。现在我还添加了缺失的包makecellmultirow,我在 MWE 中使用它们。

相关内容