Пробелы между цветами строк в tabularx с помощью \aboverulesep и \{}

Пробелы между цветами строк в tabularx с помощью \aboverulesep и \{}

цвет таблицы

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

Вывод кода выше

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