\documentclass[]{article}
\usepackage[table,dvipsnames]{xcolor}
\usepackage{multicol,booktabs,tabularx}
% Table settings
\renewcommand{\aboverulesep}{1pt}
\renewcommand{\belowrulesep}{1pt}
\begin{document}
\begin{tabularx}{\textwidth}{@{}X l@{}}
This is Header 1 & This is Header 2 \\
\toprule
\rowcolor{Apricot}
This is Text 1 & This is Text 2 \\\midrule
This is Text 1 & This is Text 2 \\\midrule
This is Text 1 & This is Text 2 \\
\bottomrule
\end{tabularx}
\end{document}
У меня есть таблица MWE выше, использующая tabularx
, и я пытаюсь раскрасить строку из таблицы. Однако из-за использования моего \aboverulesep
и \belowrulesep
у меня теперь есть пробелы над и под строкой моей таблицы, которая не раскрашена.
Кроме того, поскольку my используется @{}
по обе стороны таблицы для «удаления» избыточных отступов по бокам таблицы, цвет строки применяется также и к этим отступам.
Вопрос 1:Как мне закрасить вышеупомянутые пробелы (возникающие из-за \aboverulesep
), сохранив при этом разделение правил?
Вопрос 2:Как удалить цвет с двух сторон стола?
РЕДАКТИРОВАТЬ
Это ответ на ответ Зарко. Я хочу сохранить использование @{}
с обеих сторон, чтобы убрать отступ. Если бы я адаптировал это к вашему ответу, вот так:
% @Zarko's answer
\documentclass{article}
\usepackage[table,dvipsnames]{xcolor}
\usepackage{booktabs, cellspace, tabularx}
% Table settings
\renewcommand{\aboverulesep}{0pt}
\renewcommand{\belowrulesep}{0pt}
\setlength\cellspacetoplimit{5pt}
\setlength\cellspacebottomlimit{5pt}
\begin{document}
\begin{tabularx}{\textwidth}{@{}SX Sl@{}}% <-- S is append for activate additional vertical space
This is Header 1 & This is Header 2 \\
\toprule
\rowcolor{Apricot}
This is Text 1 & This is Text 2 \\\midrule
This is Text 1 & This is Text 2 \\\midrule
This is Text 1 & This is Text 2 \\
\bottomrule
\end{tabularx}
\end{document}
и поэтому мой второй вопрос (Qn2) все еще не решена. Для вопроса 1 я предпочитаю использовать решение @Skillmon, поскольку \renewcommand{\arraystretch}{1.15}
мне не нужно добавлять новый пакет.
решение1
Одна из возможностей — использовать cellspace
пакет:
Сначала вертикальное пространство вокруг booktabs
линий уменьшается до нуля, затем увеличивается макросом \cellspacetoplimit
и \cellspacebottomlimit
до желаемого вертикального (цветного) зазора:
\documentclass{article}
\usepackage[table,dvipsnames]{xcolor}
\usepackage{booktabs, cellspace, tabularx}
% Table settings
\renewcommand{\aboverulesep}{0pt}
\renewcommand{\belowrulesep}{0pt}
\setlength\cellspacetoplimit{5pt}
\setlength\cellspacebottomlimit{5pt}
\begin{document}
\begin{tabularx}{\textwidth}{SX Sl}% <-- S is append for activate additional vertical space
This is Header 1 & This is Header 2 \\
\toprule
\rowcolor{Apricot}
This is Text 1 & This is Text 2 \\\midrule
This is Text 1 & This is Text 2 \\\midrule
This is Text 1 & This is Text 2 \\
\bottomrule
\end{tabularx}
\end{document}
Приложение:
обход ко второй части вопроса. Нужно ввести фиктивный столбец (или иметь нулевое расстояние между столбцами или пробел шириной два \tabcolsep
):
На этот раз без дополнительного пакета, но с рекомендациями по использованию \rowcolor
(подробности см. в документации к пакету colortbl
):
\documentclass{article}
\usepackage[table,dvipsnames]{xcolor}
\usepackage{booktabs, tabularx}
% Table settings
\renewcommand{\aboverulesep}{0pt}
\renewcommand{\belowrulesep}{0pt}
\begin{document}
\setlength\tabcolsep{0pt}
\renewcommand\arraystretch{1.2}
\begin{tabularx}{\textwidth}{ X c<{\hspace{12pt}} l }
This is Header 1 && This is Header 2 \\
\toprule
\rowcolor{Apricot}%[0pt]
This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is && This is Text 2 \\\midrule
This is Text 1 && This is Text 2 \\\midrule
This is Text 1 && This is Text 2 \\
\bottomrule
\end{tabularx}
\end{document}
Приложение (2):
Спустя четыре года... Теперь я бы использовал новый пакет таблиц tabularray
. Использование его для MWE в вышеприведенном приложении — код проще:
\documentclass{article}
\usepackage[dvipsnames]{xcolor}
\usepackage{tabularray}
\UseTblrLibrary{booktabs}
\begin{document}
\noindent
\begin{tblr}{colspec = {@{} X[1,l] l @{}},
column{1} = {rightsep=12pt},
row{2} = {bg=Apricot},
}
This is Header 1 & This is Header 2 \\
\toprule
This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is Text 1
& This is Text 2 \\
\midrule
This is Text 1 & This is Text 2 \\
\midrule
This is Text 1 & This is Text 2 \\
\bottomrule
\end{tblr}
\end{document}
решение2
Решение ОП
Это альтернативное решение решения @Zarko в отношении моего второго вопроса о том, как удалить ложные цвета по обе стороны таблицы при использовании \rowcolor{}
, при этом сохраняя использование @{}
, в tabularx
среде. Это имеет дополнительное преимущество (по сравнению с ответом Zarko), так как не требует добавления отдельного столбца в середине и добавления дополнительных точек выравнивания по всем строкам.
В ответе ниже я также включил предложение @Skillmon по использованию \renewcommand\arraystretch{1.2}
в отношении моего первого вопроса.
Вот код:
\documentclass{article}
\usepackage[table,dvipsnames]{xcolor}
\usepackage{booktabs, tabularx}
% Table settings
\renewcommand{\aboverulesep}{0pt}
\renewcommand{\belowrulesep}{0pt}
\begin{document}
\renewcommand\arraystretch{1.15}
\begin{tabularx}{\textwidth}{@{}>{\columncolor{white}[0pt][\tabcolsep]}X >{\columncolor{white}[\tabcolsep][0pt]}l @{}}
This is Header 1 & This is Header 2 \\
\toprule
\rowcolor{Apricot}
This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is Text 1 & This is Text 2 \\\midrule
This is Text 1 & This is Text 2 \\\midrule
This is Text 1 & This is Text 2 \\
\bottomrule
\end{tabularx}
\end{document}
Объяснение кода
Основной подход заключался в использовании использования навесов командой \columncolor
из colortbl
пакета, также вызываемой xcolor
пакетом с table
необязательным аргументом.
Обратите внимание, что \columncolor
команда принимает необязательные аргументы:
\columncolor{colour} [left overhang][right overhang]
Поэтому я просто установил левый выступ самого левого столбца на 0pt, тем самым избавившись от ложного пространства слева по всему столбцу, и правый выступ на , \tabcolsep
который по сути является расстоянием, разделяющим столбцы. Я сделал то же самое для правого выступа самого правого столбца, установил его на 0pt, а его левый выступ на \tabcolsep
. Это по сутиисправленияширину столбцов, как я хочу.
Очевидно, что цвет обоих столбцов \columncolor
должен быть установлен на white
, и последнее, что следует отметить, это то, что когда \rowcolor
вызывается позже в таблице, он будетпереопределитьэтот white
цвет \columncolor
, тем самым давая нам преимущество в виде правильной установки цвета строки.
Прочитайте colortbl
руководство по упаковкездесь.
решение3
С помощью {NiceTabular}
of nicematrix
вы получаете ожидаемый результат.
\documentclass{article}
\usepackage[dvipsnames]{xcolor}
\usepackage{booktabs, nicematrix}
\begin{document}
\renewcommand\arraystretch{1.15}
\begin{NiceTabularX}{\textwidth}{@{}Xl@{}}[colortbl-like]
This is Header 1 & This is Header 2 \\
\toprule
\rowcolor{Apricot}
This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is Text 1 This is Text 1 & This is Text 2 \\\midrule
This is Text 1 & This is Text 2 \\\midrule
This is Text 1 & This is Text 2 \\
\bottomrule
\end{NiceTabularX}
\end{document}
Вам нужно несколько компиляций (т.к. nicematrix
внутри используются узлы PGF/Tikz).