Я пытаюсь сделать таблицу с автоматически центрированными, повернутыми многострочными ячейками. Что-то вроде того, что на картинке, но с ячейками, автоматически подогнанными под их содержимое:
Я пытался применитьрешенияпредоставлено @AboAmmar и @Seong, но они не гарантируют вертикальное центрирование в пределах указанного количества строк.Этот ответнеясно, поскольку \multirow
команда в makecell
пакете принимает нецелое значение количества строк (?).Здесьзадан некоторый код, но проблема в том, что он использует фиксированное значение (в \raisebox
аргументе), которое подходит только для одного конкретного содержимого ячейки.Самый похожий вопросостается без ответа.
На самом деле мне нужна некоторая функция, которая должна быть названа \multirowrothead
- как комбинация \multirowthead
и \rothead
функций пакета makecell
. Мой код:
\documentclass[table]{standalone}
\usepackage{siunitx}
\usepackage{makecell}
\usepackage{xcolor}
\usepackage{multirow}
\usepackage{hhline}
\renewcommand{\theadfont}{\normalsize\bfseries}
\renewcommand{\arraystretch}{1.3}
\begin{document}
\begin{tabular}{
|l|
S[table-format=2.1]|
S[table-format=1.2]|
S[table-format=2.1]|
S[table-format=1.2]|
S[table-format=2.1]|
S[table-format=1.2]|
}
\hline
% https://tex.stackexchange.com/questions/246889/how-to-color-column-heads-determined-width-makecell
\rowcolor{gray}
\multicolumn{3}{|c|}{\colorbox{gray}{\thead{First title in heading}}} &
\multicolumn{2}{c|}{\colorbox{gray}{\thead{Second title\\in heading}}} & &\\
\hhline{>{\arrayrulecolor{black}}|-----|>{\arrayrulecolor{gray}}-%
>{\arrayrulecolor{black}}|>{\arrayrulecolor{gray}}->{\arrayrulecolor{black}}|%
}
\rowcolor{gray}
& & & & \colorbox{gray}{\thead{data\\description}} &
{\multirowthead{-2}{Data\\description}} &\\
\hhline{%
>{\arrayrulecolor{black}}|>{\arrayrulecolor{gray}}-%
>{\arrayrulecolor{black}}|>{\arrayrulecolor{gray}}-%
>{\arrayrulecolor{black}}|>{\arrayrulecolor{gray}}-%
>{\arrayrulecolor{black}}|>{\arrayrulecolor{gray}}-%
>{\arrayrulecolor{black}}|-|-|%
>{\arrayrulecolor{gray}}->{\arrayrulecolor{black}}|%
}
\rowcolor{gray}
\colorbox{gray}{\multirowthead{-2}{side-heading\\description}} &
\colorbox{gray}{\multirowthead{-2}{data\\description}} &
\colorbox{gray}{\multirowthead{-2}{data\\description}} &
\colorbox{gray}{\multirowthead{-2}{data\\description}} &
\colorbox{gray}{\thead{A}} & \colorbox{gray}{\thead{B}} &
\colorbox{gray}{\multirowthead{-3}{Data description}}\\
\hline
Description 1 & 63.5 & 4.87 & 63.5 & 4.87 & 63.5 & 4.87\\
\hline
Description 2 & 88.4 & 5.13 & 88.4 & 5.13 & 88.4 & 5.13\\
\hline
\end{tabular}
\end{document}
решение1
Вы не можете b
уменьшить количество, выделенное зеленым цветом на вашей картинке, поскольку (общая) высота строк 2 и 3 ограничена содержимым ячеек столбца 5.
Вот что вы можете сделать {NiceTabular}
с nicematrix
.
\documentclass{article}
\usepackage{siunitx}
\renewcommand{\arraystretch}{1.3}
\usepackage{nicematrix}
\begin{document}
\begin{NiceTabular}[ hvlines , code-before = \rowcolor{gray!30}{1-3} ]
{
c
S[table-format=2.1]
S[table-format=1.2]
S[table-format=2.1]
S[table-format=1.2]
S[table-format=2.1]
S[table-format=1.2]
}%
{\Block{1-3}{First title in heading}} & & &
\Block{1-2}{Second title\\in heading} & &
{\Block{2-1}<\rotate>{Data\\description}} &
{\Block{3-1}<\rotate>{Data description}} \\
{\Block{2-1}<\rotate>{side-heading\\description}}
& {\Block{2-1}<\rotate>{data\\description}}
& {\Block{2-1}<\rotate>{data\\description}}
& {\Block{2-1}<\rotate>{data\\description}}
& \Block{}<\rotate>{data\\description\hspace*{0.5em}} \\
& & & & {A} & {B} \\
Description 1 & 63.5 & 4.87 & 63.5 & 4.87 & 63.5 & 4.87\\
Description 2 & 88.4 & 5.13 & 88.4 & 5.13 & 88.4 & 5.13\\
\end{NiceTabular}
\end{document}
В
{NiceTabular}
, вы можете объединять ячейки как по вертикали, так и по горизонтали с помощью встроенной команды\Block
.С помощью ключа
hvlines
вы рисуете все правила, исключенные в блоках (что здесь и ожидается).Встроенная команда
\rotate
используется для поворота содержимого ячеек и блоков.Вы можете раскрашивать ячейки, строки и столбцы с помощью команд в ключе
code-before
(однако, также возможно использовать синтаксис, похожий на синтаксисcolortbl
). Обычно вывод хорош во всех просмотрщиках PDF на всех уровнях масштабирования.Однако вам понадобится несколько компиляций.