Формат таблицы: смещенный \cmidrule и дополнительный интервал между столбцами

Формат таблицы: смещенный \cmidrule и дополнительный интервал между столбцами

У меня есть следующий скрипт, использующий шаблон конференции IEEE:https://www.ctan.org/tex-archive/macros/latex/contrib/IEEEtran/?lang=en

Я считаю форматирование этой таблицы сложным. Проблемы следующие:

1) Самый левый столбец не правый. Мне нужно, чтобы черные горизонтальные линии начинались с начала строки (см. некоторое пространство слева от каждой строки) и мне нужен один пробел перед началом текста строки (нужно, чтобы он был похож на самый правый столбец).

2) Столбец Aдолжен быть подчеркнут, как столбец Bи C. Но строка размещена не очень удачно. Она должна заканчиваться перед вертикальной чертой.

Вот сценарий:

\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}

введите описание изображения здесь

решение1

Ваша проблема вызвана использованием @{}определения tabularстолбца. Обходной путь описан в документации colortblпакета, поэтому он не имеет ничего общего с используемым классом документа.

Редактировать: В случае, если вы рассмотрите возможность использования tabularxвместо tabular, решение вашей проблемы следующее:

  • уменьшить количество столбцов до количества столбцов с содержимым (12)
  • изменить определение столбца на (без вертикальных линий)

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

или (с вертикальными линиями)

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

Не по теме: Я позволил себе изменить вашу таблицу так, чтобы она могла вписаться в ширину столбца. Для этого я использую tabularxокружение таблицы, уменьшаю размер шрифта до \small, удаляю вертикальные линии, а для горизонтальных линий использую правила из booktabs(чтобы получить более профессиональный вид таблицы):

введите описание изображения здесь

Как видите, эта таблица не имеет ваших проблем. Возможно, она вам понравилась :). MWE:

\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}

Выше MWe также должен работать с IEEEtranклассом документа (который сейчас у меня не установлен).

Если вы все еще хотите иметь таблицу из двух столбцов и с вертикальными линиями, то замените в приведенном выше MWE существующие следующие линии:

...
    \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
    ...

и вы получите:

введите описание изображения здесь

Edid (2): и со всеми вертикальными линиями, как в коде в вашем вопросе, и с вертикальными заголовками столбцов:

введите описание изображения здесь

Полное значение MWE для последнего изображения:

\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}

Редактировать (3): И для развлечения и полноты картиныне по темепредложения еще одно решение без (черных) вертикальных линий, без вращающихся заголовков столбцов и все столбцы имеют одинаковую ширину:

введите описание изображения здесь

\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}

Все вышеперечисленные предложения не по теме учитывают ваше желание раскрасить строки. Лично я не буду раскрашивать строки. Чтобы помочь читателю отслеживать строки, я бы в конечном итоге добавил немного вертикального пространства после каждой четвертой строки, чтобы попытаться втиснуть таблицу в один столбец. Однако, разные люди, разные вкусы, ...

решение2

Предлагаю использовать tabularx и нет \resizebox. Вертикальные линии ставятся как разделители между столбцами, так что у меня всего 12 столбцов. Также я позволил себе изменить вид повернутых заголовков столбцов: поворот на 40°, поэтому их высота меньше:

\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}

введите описание изображения здесь

Если вам нужен поворот на 90°, замените в теле таблицы \myrotна , \rotчтобы получить следующее:

введите описание изображения здесь

Связанный контент