表格:自动调整列宽以适应其内容,导致 \toprule 出现错误“放错 \noalign”

表格:自动调整列宽以适应其内容,导致 \toprule 出现错误“放错 \noalign”

我试图将两个表格并排放置,垂直对齐顶部,但不幸的是我无法进行下面列出的一些调整。

首先,我想知道是否/如何避免! Misplaced \noalign\toprule\bottomrule之前结合使用时出现错误{tabular}。在表格内部\...rule可以工作,但我希望在表格上方和下方各有一行。

  1. 我如何才能自动调整某些列的宽度以适应其最宽的内容(以避免L{xxcm}在表格定义中固定)?

  2. 如何才能使第一行的内容居中,而不需要为每个条目设置多列?

  3. 在哪里以及如何正确设置两个表的宽度,例如设置为页面宽度的 75%(在mytablesubfloat、的环境下[minipage]?)

我想将这些内容应用到下面的例子中。

提前谢谢了

\documentclass[a4paper,oneside,titlepage]{scrbook}
%\usepackage[T1]{fontenc} %Silbentrennung
%\usepackage[utf8]{inputenc} % Umlaute
%\usepackage[ngerman]{babel}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{subfig} 
\newcommand{\mW}[2]{$\overline{#1}=#2$} 
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}p{#1}}
\captionsetup[subfloat]{position=top}

\newenvironment{mytable}[1][htb] {%
    \begin{table}[#1]\small
    }
    {\end{table}
    } 


\begin{document}

\begin{mytable}
    \centering
    \caption{Worms}
    \toprule
    \subfloat{%
    %\begin{minipage}[c]{6.5cm}
        \begin{tabular}{L{1.6cm}R{1.2cm}R{0.7cm}R{0.7cm}R{0.5cm}}
            Klasse & Zeit & y & x & Bez. \\
            \midrule
            0,0 - 2,1& a, 16:45 & 0,0   & 1,0   & H1 \\
            \mW{x}{1,1}& a, 16:56 & 5,0   & 0,5   & H2 \\
            & a, 17:15 & 10,0  & 1,0   & H3 \\
            & a, 17:37 & 15,0  & 2,1   & H4 \\
            & b, 12:40 & 37,4  & 1,0   & H7 \\
            \midrule
            5,0 - 6,0& a, 16:20 & 0,0   & 5,0   & I1 \\
            \mW{x}{5,2}& a, 16:58 & 5,0   & 5,0   & I2 \\
            & a, 17:19 & 10,0  & 6,0   & I3 \\
            & b, 12:39 & 37,4  & 5,0   & I7 \\
            \midrule
            10,0 - 12,1& a, 16:30 & 0,0   & 10,0  & J1 \\
            \mW{x}{10,4}& a, 17:00 & 5,0   & 10,0  & J2 \\
            & b, 12:44 & 31,0  & 10,0  & J6 \\
            & b, 12:38 & 37,4  & 10,0  & J7 \\
        \end{tabular}%

        \label{tab:khlkjlkjlk}%
    %\end{minipage}
    }
    \quad
    \subfloat{
    %\begin{minipage}[c]{6.5cm}
        \begin{tabular}{L{1.6cm}R{1.2cm}R{0.7cm}R{0.7cm}R{0.5cm}}
            Klasse & Zeitpunkt & y & x & Bez. \\
            \midrule
            15,0 - 17,1& a, 16:32 & 0,0   & 15,0  & K1 \\
            \mW{x}{15,7}& a, 17:04 & 5,0   & 15,0  & K2 \\
            & a, 17:25 & 10,0  & 16,0  & K3 \\
            & a, 17:49 & 15,0  & 17,1  & J4 \\
            & b, 12:36 & 37,4  & 15,0  & K7 \\
            & b, 08:24 & 37,4  & 16,5  & M7 \\
            & b, 12:50 & 37,4  & 16,5  & M7 \\
            \midrule
            18,6 - 20,6 & a, 16:38 & 0,0   & 20,0  & L1 \\
            \mW{x}{19,7}& b, 06:13 & 5,0   & 18,6  & M2 \\
            & b, 11:05 & 5,0   & 18,6  & M2 \\
            & a, 17:07 & 5,0   & 19,0  & L2 \\
            & b, 06:17 & 7,5   & 20,2  & M3 \\
            & b, 06:21 & 15,0  & 20,6  & M4 \\
            & b, 06:25 & 23,1  & 20,3  & M5 \\
            & b, 06:30 & 31,0  & 19,7  & M6 \\   
        \end{tabular}%
        \label{tab:blablabel}%
    %\end{minipage}
    }
    \bottomrule
\end{mytable}
\end{document}

在此处输入图片描述

[编辑作者:更改后的标题具有误导性!
应该是这样的:1.) 自动调整列宽以适应其内容 2.) \toprule 处出现“!错放 \noalign” 3.) 水平对齐行的内容
]

答案1

您不能在环境\toprule之外使用tabular

这是获取没有 的表格的一种方法\subfloat,但在这里没有用。我只是将两个表格放在一个“整体”表格中,以便 和\toprule\bottomrule设置显式宽度很耗时,因为必须计算宽度才能避免框过满;我认为最好让 TeX 来做这项工作。

两个内部表格均设置有[t]使其顶部对齐的选项。

\documentclass[a4paper,oneside,titlepage,draft]{scrbook}
\usepackage[T1]{fontenc} %Silbentrennung
\usepackage[utf8]{inputenc} % Umlaute
\usepackage[ngerman]{babel}
\usepackage{booktabs}
\usepackage{tabularx}

\newcommand{\mW}[2]{$\overline{#1}=#2$} 

\newenvironment{mytable}[1][htb]
 {\begin{table}[#1]\small}
 {\end{table}} 


\begin{document}

\begin{mytable}
\centering
\caption{Worms}
\begin{tabular}{@{}c@{}}% an "outside" table
\toprule
\begin{tabular}[t]{lrrrr}
Klasse & Zeit & y & x & Bez. \\
\midrule
0,0 - 2,1   & a, 16:45 & 0,0   & 1,0   & H1 \\
\mW{x}{1,1} & a, 16:56 & 5,0   & 0,5   & H2 \\
            & a, 17:15 & 10,0  & 1,0   & H3 \\
            & a, 17:37 & 15,0  & 2,1   & H4 \\
            & b, 12:40 & 37,4  & 1,0   & H7 \\
\midrule
5,0 - 6,0   & a, 16:20 & 0,0   & 5,0   & I1 \\
\mW{x}{5,2} & a, 16:58 & 5,0   & 5,0   & I2 \\
            & a, 17:19 & 10,0  & 6,0   & I3 \\
            & b, 12:39 & 37,4  & 5,0   & I7 \\
\midrule
10,0 - 12,1 & a, 16:30 & 0,0   & 10,0  & J1 \\
\mW{x}{10,4}& a, 17:00 & 5,0   & 10,0  & J2 \\
            & b, 12:44 & 31,0  & 10,0  & J6 \\
            & b, 12:38 & 37,4  & 10,0  & J7 \\
\end{tabular}% <- REMOVE THIS % IF YOU WANT A SMALL SEPARATION BETWEEN THE TABLES
\begin{tabular}[t]{lrrrr}
Klasse & Zeitpunkt & y & x & Bez. \\
\midrule
15,0 - 17,1 & a, 16:32 & 0,0   & 15,0  & K1 \\
\mW{x}{15,7}& a, 17:04 & 5,0   & 15,0  & K2 \\
            & a, 17:25 & 10,0  & 16,0  & K3 \\
            & a, 17:49 & 15,0  & 17,1  & J4 \\
            & b, 12:36 & 37,4  & 15,0  & K7 \\
            & b, 08:24 & 37,4  & 16,5  & M7 \\
            & b, 12:50 & 37,4  & 16,5  & M7 \\
\midrule
18,6 - 20,6 & a, 16:38 & 0,0   & 20,0  & L1 \\
\mW{x}{19,7}& b, 06:13 & 5,0   & 18,6  & M2 \\
            & b, 11:05 & 5,0   & 18,6  & M2 \\
            & a, 17:07 & 5,0   & 19,0  & L2 \\
            & b, 06:17 & 7,5   & 20,2  & M3 \\
            & b, 06:21 & 15,0  & 20,6  & M4 \\
            & b, 06:25 & 23,1  & 20,3  & M5 \\
            & b, 06:30 & 31,0  & 19,7  & M6 \\
\end{tabular}\\% end the "outside" table line
\bottomrule
\end{tabular}
\end{mytable}
\end{document}

在此处输入图片描述

相关内容