У меня есть следующий скрипт, использующий шаблон конференции 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
чтобы получить следующее: