Tabellenformat: verschobene \cmidrule und zusätzlicher Spaltenabstand

Tabellenformat: verschobene \cmidrule und zusätzlicher Spaltenabstand

Ich habe das folgende Skript unter Verwendung der IEEE-Konferenzvorlage von:https://www.ctan.org/tex-archive/macros/latex/contrib/IEEEtran/?lang=en

Ich finde die Formatierung dieser Tabelle schwierig. Die Probleme sind:

1) Die Spalte ganz links ist nicht rechts. Ich brauche die schwarzen horizontalen Linien, damit sie am Anfang der Zeile beginnen (siehe etwas Platz links in jeder Zeile) und ich brauche einen Platz, bevor der Text der Zeile beginnt (er muss ähnlich aussehen wie die Spalte ganz rechts).

2) Die Spalte Amuss wie die Spalte Bund unterstrichen sein C. Die Linie ist jedoch nicht gut platziert. Sie sollte vor der vertikalen Linie enden.

Hier ist das Skript:

\documentclass[compsoc, conference, letterpaper, 10pt, times]{IEEEtran}
\ifCLASSOPTIONcompsoc
  % IEEE Computer Society needs nocompress option
  % requires cite.sty v4.0 or later (November 2003)
  \usepackage[nocompress]{cite}
\else
  % normal IEEE
  \usepackage{cite}
\fi
\ifCLASSINFOpdf
\else
\fi
\usepackage{graphicx}

\usepackage{colortbl}

\usepackage{array}
\usepackage{booktabs}
\usepackage{multirow}
\newcommand{\head}[1]{\textnormal{\textbf{#1}}}
\newcommand{\normal}[1]{\multicolumn{1}{l}{#1}}
\usepackage{amssymb}% http://ctan.org/pkg/amssymb
\usepackage{pifont}% http://ctan.org/pkg/pifont
\newcommand{\cmark}{\ding{51}}%
\newcommand{\xmark}{\ding{55}}%
\newcommand*\rot{\rotatebox{90}}
\usepackage{tabularx}

\begin{document}
\title{Test Document}

% make the title area
\maketitle

\section{Introduction}
This is an introduction.

\begin{table*}[tb!] 
\caption{A Table}

\centering
\resizebox{\textwidth}{!} {
\begin{tabular} {@{} lc*{16}l @{}}
\hline
\multicolumn{1}{c}{A} 
&&\multicolumn{3}{c}{B}    
&&\multicolumn{3}{c}{C}  
&&\multicolumn{3}{c}{D}  
&&\multicolumn{2}{c}{E}  

\\
\cmidrule(lr){0-1} 
\cmidrule(lr){3-5} 
\cmidrule(lr){7-9}
\cmidrule(lr){11-13}
\cmidrule(lr){15-16}
\\
& \vline &\rot{Col. 1} & \rot{Col. 2} & \rot{Col. 3} 
& \vline & \rot{Col. 1} & \rot{Col. 2} & \rot{Col. 3} 
& \vline & \rot{Col. 1} & \rot{Col. 2} &\rot{Col. 3} 
& \vline & \rot{Col. 1} & \rot{Col. 2} 

\\ \hline
\rowcolor[gray]{.9} 
Text1 &\vline  & \cmark & {}     & {}     & \vline  & {}     & \cmark  & {}      & \vline  & {} &\cmark  & & \vline &    & \cmark \\\hline
Text2 &\vline  & {}     & \cmark & {}     & \vline  & {}     & \cmark   & {}      & \vline & {} & \cmark & & \vline & {} & \cmark   \\\hline
\rowcolor[gray]{.9}
Text3 & \vline & \cmark & {}     & {}     & \vline  & {}     & \cmark   & {}      & \vline & {} &\cmark  & &\vline & {} & \cmark    \\
\hline
Text4 & \vline & \cmark & {}    & {}     & \vline   & {}     & \cmark   & {}      & \vline & {} &\cmark  & &\vline & {} & \cmark   \\
 \hline
\rowcolor[gray]{.9} 
Text5 & \vline & {}     & \cmark & {}    & \vline   & \cmark  & {}      & {}      & \vline & \cmark & {} & &\vline & {} & \cmark    \\
\hline
Text6 & \vline & \cmark & {}    & {}     & \vline   & \cmark  & {}      & {}      & \vline & {}     & \cmark & & \vline & {} & \cmark   \\
\hline
\rowcolor[gray]{.9}
Text7 & \vline & \cmark & {}    & {}     & \vline   & \cmark  & {}      & {}       & \vline & \cmark & {}    & & \vline & \cmark & {}  \\
\hline
Text8 & \vline & \cmark & {}   & {}     & \vline    & {}     & \cmark   & {}      & \vline  & {}     &\cmark & & \vline & {} & \cmark  \\
\hline
\rowcolor[gray]{.9}
Text9 & \vline & {}     & {}     & \cmark & \vline & \cmark  & \cmark  & {}       & \vline  & {}     &\cmark & & \vline & {} & \cmark \\\hline
Text10 & \vline & {}     & {}     & \cmark & \vline & {}      & {}      & \cmark   & \vline  & {}     &\cmark & &\vline & {} & \cmark   \\
\hline
\end{tabular}
}
\end{table*}
\end{document}

Bildbeschreibung hier eingeben

Antwort1

Ihr Problem wird durch die Verwendung @{}in der tabularSpaltendefinition verursacht. Die Problemumgehung wird in der Paketdokumentation erläutert colortbl, es hat also nichts mit der verwendeten Dokumentklasse zu tun.

Bearbeiten: Falls Sie die Verwendung tabularxvon anstelle von in Erwägung ziehen tabular, lautet die Lösung Ihres Problems:

  • Reduzieren Sie die Anzahl der Spalten auf die Anzahl der Spalten mit Inhalt (12).
  • Spaltendefinition ändern in (ohne vertikale Linien)

\begin{tabularx}{\linewidth}{@{}>{\columncolor{white}[0pt][\tabcolsep]}l
                                                                 *{10}{C}
                                >{\columncolor{white}[\tabcolsep][0pt]}C
                            @{}}

oder (mit senkrechten Linien)

\begin{tabularx}{\linewidth}{@{}>{\columncolor{white}[0pt][\tabcolsep]}l  |
                                                                  *{3}{CCC|}
                                                                       C 
                                >{\columncolor{white}[\tabcolsep][0pt]}C
                            @{}}

Off-Topic: Ich habe mir die Freiheit genommen, Ihre Tabelle so zu ändern, dass sie in die Spaltenbreite passt. Dazu verwende ich die tabularxTabellenumgebung, reduziere die Schriftgröße auf \small, entferne vertikale Linien und verwende für horizontale Linien Regeln aus booktabs(um ein professionelleres Aussehen der Tabelle zu erzielen):

Bildbeschreibung hier eingeben

Wie Sie sehen, hat diese Tabelle Ihre Probleme nicht. Vielleicht hat sie Ihnen gefallen :). Der MWE lautet:

\documentclass[twocolumn]{article}
\usepackage{amssymb}% http://ctan.org/pkg/amssymb
\usepackage{pifont}% http://ctan.org/pkg/pifont
\newcommand{\cmark}{\ding{51}}%
\newcommand{\xmark}{\ding{55}}%

\usepackage[table]{xcolor}% instead of colortbl
\usepackage{booktabs, makecell, multirow, tabularx}
\usepackage{rotating}% added
\newcolumntype{C}{>{\centering\arraybackslash}X}

%-------------------------------------- only for show page layout
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%---------------------------------------------------------------%
\usepackage{lipsum}
\begin{document}
\lipsum[1]
    \begin{table}[ht]
\caption{A Table}
    \centering
\setlength\tabcolsep{3pt}
    \settowidth\rotheadsize{Col. 3}
\begin{tabularx}{\linewidth}{@{}>{\columncolor{white}[0pt][\tabcolsep]}l
                                                                 *{10}{C} 
                                >{\columncolor{white}[\tabcolsep][0pt]}C
                            @{}}
    \toprule
\multicolumn{1}{c}{A}       
        &   \multicolumn{3}{c}{B}   
            &   \multicolumn{3}{c}{C}
                &   \multicolumn{3}{c}{D}
                    &   \multicolumn{2}{c}{E}           \\
\cmidrule(lr){1-1}
\cmidrule(lr){2-4}\cmidrule(lr){5-7}\cmidrule(lr){8-10}
\cmidrule(lr){11-12}
        & \rothead{Col. 1} & \rothead{Col. 2} & \rothead{Col. 3}
        & \rothead{Col. 1} & \rothead{Col. 2} & \rothead{Col. 3}
        & \rothead{Col. 1} & \rothead{Col. 2} & \rothead{Col. 3}
        & \rothead{Col. 1} & \rothead{Col. 2}                   \\ 
    \hline
\rowcolor[gray]{.9}
Text1   & \cmark        &               & 
        &               & \cmark        & 
        &               & \cmark        &
        &               & \cmark                        \\
Text2   &               & \cmark        & 
        &               & \cmark        & 
        & \cmark        &               & \cmark        \\
\rowcolor[gray]{.9}
Text3   & \cmark        &               &
        &               & \cmark        &  
        &               & \cmark        &
        &               & \cmark                        \\
Text4   & \cmark        &               & 
        &               & \cmark        & 
        &               & \cmark        & 
        &               & \cmark                        \\
\rowcolor[gray]{.9}
Text5   &               & \cmark        &
        & \cmark        &               & 
        & \cmark        &               &
        &               & \cmark                        \\
\hline
Text6   & \cmark        &               & 
        & \cmark        &               &
        &               & \cmark        & 
        &               & \cmark                        \\
\rowcolor[gray]{.9}
Text7   & \cmark        &               & 
        & \cmark        &               & 
        & \cmark        &               & 
        & \cmark        &                               \\
Text8   & \cmark        &               & 
        &               & \cmark        & 
        &               & \cmark        & 
        &               & \cmark                        \\
\rowcolor[gray]{.9}
Text9   &               &               & \cmark 
        & \cmark        & \cmark        &
        &               & \cmark        & 
        &               & \cmark                        \\
Text10  &               &               & \cmark 
        &               &               & \cmark   
        &               & \cmark        & 
        &               & \cmark                        \\
    \bottomrule
\end{tabularx}
\end{table}
\lipsum
\end{document}

IEEEtranDarüber hinaus sollte MWe auch mit der Dokumentklasse funktionieren (die ich jetzt nicht installiert habe).

Wenn Sie weiterhin eine Tabelle mit zwei Spalten und vertikalen Linien haben möchten, ersetzen Sie in der obigen MWE-Betrachtung stattdessen die folgenden Zeilen:

...
    \begin{table*}
\caption{A Table}
    \centering
\setlength\tabcolsep{3pt}
    \settowidth\rotheadsize{Col. 3}
    \begin{tabularx}{\linewidth}{@{}>{\columncolor{white}[0pt][\tabcolsep]}l  |
                                                                      *{3}{CCC|}
                                                                           C
                                    >{\columncolor{white}[\tabcolsep][0pt]}C
                                @{}}
    \toprule
\multicolumn{1}{c}{A}       
        &   \multicolumn{3}{c}{B}   
            &   \multicolumn{3}{c}{C}
                &   \multicolumn{3}{c}{D}
                    &   \multicolumn{2}{c}{E}           \\
\cmidrule(lr){1-1}
\cmidrule(lr){2-4}\cmidrule(lr){5-7}\cmidrule(lr){8-10}
\cmidrule(lr){11-12}
        & {Col. 1} & {Col. 2} & {Col. 3}
        & {Col. 1} & {Col. 2} & {Col. 3}
        & {Col. 1} & {Col. 2} & {Col. 3}
        & {Col. 1} & {Col. 2}                   \\ 
    \hline
    ...

und Sie erhalten:

Bildbeschreibung hier eingeben

Edid (2): und mit allen vertikalen Linien wie im Code in deiner Frage und mit vertikalen Spaltenüberschriften:

Bildbeschreibung hier eingeben

Das vollständige MWE für das letzte Bild lautet:

\documentclass[twocolumn]{article}
\usepackage{amssymb}% http://ctan.org/pkg/amssymb
\usepackage{pifont}% http://ctan.org/pkg/pifont
\newcommand{\cmark}{\ding{51}}%
\newcommand{\xmark}{\ding{55}}%

\usepackage[table]{xcolor}% instead of colortbl
\usepackage{booktabs, makecell, multirow, tabularx}
\usepackage{rotating}% added
\newcolumntype{C}{>{\centering\arraybackslash}X}
%-------------------------------------- only for show page layout
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%---------------------------------------------------------------%
\usepackage{lipsum}
\begin{document}
\lipsum[1]
    \begin{table*}
\caption{A Table}
    \centering
\setlength\tabcolsep{3pt}
    \settowidth\rotheadsize{Col. 3}
    \begin{tabularx}{\linewidth}{@{}>{\columncolor{white}[0pt][\tabcolsep]}l|
                                                                      *{3}{CCC|}
                                                                           C
                                    >{\columncolor{white}[\tabcolsep][0pt]}C
                                @{}}
    \toprule
\multicolumn{1}{c}{A}       
        &   \multicolumn{3}{c}{B}   
            &   \multicolumn{3}{c}{C}
                &   \multicolumn{3}{c}{D}
                    &   \multicolumn{2}{c}{E}           \\
\cmidrule(lr){1-1}
\cmidrule(lr){2-4}\cmidrule(lr){5-7}\cmidrule(lr){8-10}
\cmidrule(lr){11-12}
        & \rothead{Col. 1} & \rothead{Col. 2} & \rothead{Col. 3}
        & \rothead{Col. 1} & \rothead{Col. 2} & \rothead{Col. 3}
        & \rothead{Col. 1} & \rothead{Col. 2} & \rothead{Col. 3}
        & \rothead{Col. 1} & \rothead{Col. 2}                   \\ 
    \hline
\rowcolor[gray]{.9}
Text1   & \cmark        &               & 
        &               & \cmark        & 
        &               & \cmark        &
        &               & \cmark                        \\
Text2   &               & \cmark        & 
        &               & \cmark        & 
        & \cmark        &               & \cmark        \\
\rowcolor[gray]{.9}
Text3   & \cmark        &               &
        &               & \cmark        &  
        &               & \cmark        &
        &               & \cmark                        \\
Text4   & \cmark        &               & 
        &               & \cmark        & 
        &               & \cmark        & 
        &               & \cmark                        \\
\rowcolor[gray]{.9}
Text5   &               & \cmark        &
        & \cmark        &               & 
        & \cmark        &               &
        &               & \cmark                        \\
Text6   & \cmark        &               & 
        & \cmark        &               &
        &               & \cmark        & 
        &               & \cmark                        \\
\rowcolor[gray]{.9}
Text7   & \cmark        &               & 
        & \cmark        &               & 
        & \cmark        &               & 
        & \cmark        &                               \\
Text8   & \cmark        &               & 
        &               & \cmark        & 
        &               & \cmark        & 
        &               & \cmark                        \\
\rowcolor[gray]{.9}
Text9   &               &               & \cmark 
        & \cmark        & \cmark        &
        &               & \cmark        & 
        &               & \cmark                        \\
Text10  &               &               & \cmark 
        &               &               & \cmark   
        &               & \cmark        & 
        &               & \cmark                        \\
    \bottomrule
\end{tabularx}
\end{table*}
\lipsum
\end{document}

Bearbeiten (3): Und zum Spaß und zur Vollständigkeitnicht zum ThemaVorschläge noch eine Lösung ohne (schwarze) vertikale Linien, ohne rotierende Spaltenüberschriften und alle Spalten haben die gleiche Breite:

Bildbeschreibung hier eingeben

\documentclass[twocolumn]{article}
\usepackage{amssymb}
\usepackage{pifont}
\newcommand{\cmark}{\ding{51}}%

\usepackage[table]{xcolor}% instead of colortbl
\usepackage{booktabs, tabularx}
\usepackage[skip=1ex]{caption}
\newcolumntype{C}{>{\centering\arraybackslash}X}

\usepackage{lipsum}
\begin{document}
\lipsum[1]
    \begin{table*}
\caption{A Table}
    \centering
\setlength\tabcolsep{3pt}
    \begin{tabularx}{\linewidth}{@{}>{\columncolor{white}[0pt][\tabcolsep]}X   @{\quad}
                                                                      *{3}{CCC @{\quad}}
                                                                           C
                                    >{\columncolor{white}[\tabcolsep][0pt]}C
                                @{}}
    \toprule
\multicolumn{1}{c}{A}
        &   \multicolumn{3}{c}{B}
            &   \multicolumn{3}{c}{C}
                &   \multicolumn{3}{c}{D}
                    &   \multicolumn{2}{c}{E}           \\
\cmidrule(r){1-1}
\cmidrule(r){2-4}\cmidrule(r){5-7}\cmidrule(r){8-10}
\cmidrule{11-12}
        & {Col. 1} & {Col. 2} & {Col. 3}
        & {Col. 1} & {Col. 2} & {Col. 3}
        & {Col. 1} & {Col. 2} & {Col. 3}
        & {Col. 1} & {Col. 2}                   \\
    \hline
\rowcolor[gray]{.9}
Text1   & \cmark        &               &
        &               & \cmark        &
        &               & \cmark        &
        &               & \cmark                        \\
Text2   &               & \cmark        &
        &               & \cmark        &
        & \cmark        &               & \cmark        \\
\rowcolor[gray]{.9}
Text3   & \cmark        &               &
        &               & \cmark        &
        &               & \cmark        &
        &               & \cmark                        \\
Text4   & \cmark        &               &
        &               & \cmark        &
        &               & \cmark        &
        &               & \cmark                        \\
\rowcolor[gray]{.9}
Text5   &               & \cmark        &
        & \cmark        &               &
        & \cmark        &               &
        &               & \cmark                        \\
Text6   & \cmark        &               &
        & \cmark        &               &
        &               & \cmark        &
        &               & \cmark                        \\
\rowcolor[gray]{.9}
Text7   & \cmark        &               &
        & \cmark        &               &
        & \cmark        &               &
        & \cmark        &                               \\
Text8   & \cmark        &               &
        &               & \cmark        &
        &               & \cmark        &
        &               & \cmark                        \\
\rowcolor[gray]{.9}
Text9   &               &               & \cmark
        & \cmark        & \cmark        &
        &               & \cmark        &
        &               & \cmark                        \\
Text10  &               &               & \cmark
        &               &               & \cmark
        &               & \cmark        &
        &               & \cmark                        \\
    \bottomrule
\end{tabularx}
\end{table*}
\lipsum
\end{document}

Alle oben genannten Off-Topic-Vorschläge berücksichtigen Ihren Wunsch, Zeilen einzufärben. Ich persönlich werde Zeilen nicht einfärben. Um dem Leser das Verfolgen der Zeilen zu erleichtern, würde ich eventuell nach jeder vierten Zeile etwas vertikalen Abstand hinzufügen, um zu versuchen, die Tabelle in eine Spalte zu bringen. Aber verschiedene Leute, verschiedene Geschmäcker, ...

Antwort2

tabularx Ich schlage vor , und nicht zu verwenden \resizebox. Die vertikalen Linien werden als Trennzeichen zwischen den Spalten verwendet, sodass ich nur 12 Spalten habe. Außerdem habe ich mir die Freiheit genommen, das Aussehen der gedrehten Spaltenköpfe zu ändern: eine Drehung um 40°, sodass ihre Höhe kleiner ist:

\documentclass[compsoc, conference, letterpaper, 10pt, times]{IEEEtran}
\ifCLASSOPTIONcompsoc
  % IEEE Computer Society needs nocompress option
  % requires cite.sty v4.0 or later (November 2003)
  \usepackage[nocompress]{cite}
\else
  % normal IEEE
  \usepackage{cite}
\fi
\ifCLASSINFOpdf
\else
\fi

\usepackage{graphicx}

\usepackage[table, svgnames]{xcolor}

\usepackage{array}
\usepackage{booktabs}
\usepackage{multirow}
\newcommand{\head}[1]{\textnormal{\textbf{#1}}}
\newcommand{\normal}[1]{\multicolumn{1}{l}{#1}}
\usepackage{amssymb}% http://ctan.org/pkg/amssymb
\usepackage{pifont}% http://ctan.org/pkg/pifont
\newcommand{\cmark}{\ding{51}}%
\newcommand{\xmark}{\ding{55}}%
\newcommand*\rot[1][90]{\rotatebox{90}}
\newcommand*\myrot[1]{\rotatebox[origin=l]{40}{#1}}
\usepackage{tabularx}
\newcolumntype{C}{ >{\centering\arraybackslash}X}

\begin{document}
\title{Test Document}

% make the title area
\maketitle

\section{Introduction}
This is an introduction.


\begin{table*}[!htb]
  \setlength\extrarowheight{2pt}\centering
  \caption{A Table}
  \begin{tabularx}{0.8\textwidth} { l|*{3}{CCC|}*{2}{C}|@{}}
    \hline
    \multicolumn{1}{c}{A}
           & \multicolumn{3}{c}{B}
           & \multicolumn{3}{c}{C}
           & \multicolumn{3}{c}{D}
           & \multicolumn{2}{c}{E}
    \\
    \cmidrule(lr){1-1}
    \cmidrule(lr){2-4}
    \cmidrule(lr){5-7}
    \cmidrule(lr){8-10}
    \cmidrule(lr){11-12}
           & \myrot{Col. 1} & \myrot{Col. 2} & \myrot{Col. 3}
           & \myrot{Col. 1} & \myrot{Col. 2} & \myrot{Col. 3}
           & \myrot{Col. 1} & \myrot{Col. 2} & \myrot{Col. 3}
           & \myrot{Col. 1} & \myrot{Col. 2}
    \\ \hline
    \rowcolor[gray]{.9}Text1
           & \cmark & & & & \cmark & & & \cmark & & & \cmark \\\hline
    Text2 & & \cmark & & & \cmark & & & \cmark & & & \cmark \\\hline
    \rowcolor[gray]{.9}
    Text3 & \cmark & & & & \cmark & & & \cmark & & & \cmark \\
    \hline
    Text4 & \cmark & & & & \cmark & & & \cmark & & & \cmark \\
    \hline
    \rowcolor[gray]{.9}
    Text5 & {} & \cmark & & \cmark & & & \cmark & & & & \cmark \\
    \hline
    Text6 & \cmark & & & \cmark & & & & \cmark & & & \cmark \\
    \hline
    \rowcolor[gray]{.9}
    Text7 & \cmark & & & \cmark & & & \cmark & & & \cmark & \\
    \hline
    Text8 & \cmark & & & & \cmark & & & \cmark & & & \cmark \\
    \hline
    \rowcolor[gray]{.9}
    Text9 & & & \cmark & \cmark & \cmark & & & \cmark & & & \cmark \\
    \hline
    Text10 & & \cmark & & & & \cmark & & \cmark & & & \cmark \\
    \hline
  \end{tabularx}
\end{table*}

\end{document}

Bildbeschreibung hier eingeben

Wenn Sie eine Drehung um 90° wünschen, ersetzen Sie im Tabellenkörper \myrotdurch \rotum folgendes zu erhalten:

Bildbeschreibung hier eingeben

verwandte Informationen