我正在尝试制作一个表格,其中顶行倾斜 45 度并具有背景填充;我发现有几种不同的方法可以在单元格中制作有角度的文本,但有一件事我无法弄清楚,那就是如何让背景颜色与文本一起跟随角度。我从这里得到了代码:表格中的列标题旋转这会创建我想要的角度,但它会覆盖列颜色。我可以使用该rotating
包来保留颜色,但这不会改变单元格本身的角度,只会改变其中的文本的角度。
\documentclass{article}
\usepackage{adjustbox}
\usepackage{array}
\usepackage{xcolor,colortbl}
\usepackage{multirow}
\newcolumntype{R}[2]{%
>{\adjustbox{angle=#1, lap=\width-(#2)}\bgroup}%
l%
<{\egroup}%
}
\newcommand*\rot{\multicolumn{1}{R{45}{1em}}}
\newcolumntype{a}{>{\columncolor{blue!15}}l}
\begin{document}
\begin{tabular}{lla}
& \rot{Column 1} & \rot{Column 2} \\
\hline
Information & X & \\
More information & & X \\
\end{tabular}
\end{document}
我假设我需要插入一个列颜色,\newcolumntype
但我不确定它与其他代码的位置。
答案1
我不确定您到底想要什么,但这里有一个关于环境{NiceTabular}
的建议nicematrix
。
\documentclass{article}
\usepackage{xcolor}
\usepackage{nicematrix}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\NewDocumentCommand{\rot}{m}{\rlap{\hspace*{2mm}\rotatebox{45}{#1}}}
\NewDocumentCommand{\ColumnColor}{mm} % #1 : number of column ; #2 ; color
{
\begin{tikzpicture} [fill = #2]
\fill let \p1 = (1) , \p2 = (2) , \n1 = { \y1 - \y2 }
in (2-|#1) -- ($(2-|#1)+(\n1,\n1)$)
-- ($(2-|\inteval{#1+1})+(\n1,\n1)$)
-- (2-|\inteval{#1+1})
-- cycle ;
\fill (2-|#1) rectangle (last-|\inteval{#1+1}) ;
\end{tikzpicture}
}
\begin{NiceTabular}{lll}
\CodeBefore
\ColumnColor{2}{red!15}
\ColumnColor{3}{blue!15}
\Body
& \rot{Column 1} & \rot{Column 2} \\
\Hline
Information & X & \\
More information & & X \\
\end{NiceTabular}
\end{document}
您需要多次编译(因为使用了 PGF/Tikz 节点nicematrix
)。
如果您想为第一行添加颜色(“有角度的单元格”除外),则由于技术原因,您无法\rowcolor
在中使用\CodeBefore
:命令\rowcolor
、、\cellcolor
等\columncolor
不会按照它们在中出现的顺序执行,\CodeBefore
因为它们是按颜色分组的(为了避免在某些 PDF 查看器中相同颜色的面板之间出现细的白线)。
也许我应该将密钥添加到包中nicematrix
,以便在这种情况下禁用该功能。
使用 的当前版本nicematrix
,您必须定义自己的命令\RowColor
,该命令将通过使用 Tikz 来填充由 提供的 PGF/Tikz 分隔的矩形来完成工作nicematrix
。
\documentclass{article}
\usepackage{xcolor}
\usepackage{nicematrix}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\NewDocumentCommand{\rot}{m}{\rlap{\hspace*{2mm}\rotatebox{45}{#1}}}
\NewDocumentCommand{\ColumnColor}{mm} % #1 : number of column ; #2 : color
{
\begin{tikzpicture} [fill = #2]
\fill let \p1 = (1) , \p2 = (2) , \n1 = { \y1 - \y2 }
in (2-|#1) -- ($(2-|#1)+(\n1,\n1)$)
-- ($(2-|\inteval{#1+1})+(\n1,\n1)$)
-- (2-|\inteval{#1+1})
-- cycle ;
\fill (2-|#1) rectangle (last-|\inteval{#1+1}) ;
\end{tikzpicture}
}
\NewDocumentCommand{\RowColor}{mm} % #1 number of row ; #2 : color
{
\begin{tikzpicture} [fill = #2]
\fill (#1-|1) rectangle (\inteval{#1+1}-|last) ;
\end{tikzpicture}
}
\begin{NiceTabular}{lll}
\CodeBefore
\RowColor{1}{gray!10}
\ColumnColor{2}{red!15}
\ColumnColor{3}{blue!15}
\Body
& \rot{Column 1} & \rot{Column 2} \\
\Hline
Information & X & \\
More information & & X \\
\end{NiceTabular}
\end{document}