限制 TikZ 节点矩阵中的样式范围

限制 TikZ 节点矩阵中的样式范围

假设我想让节点矩阵的第一列采用与矩阵中其他节点不同的格式。使用 ,column 1/.style=mycol我可以为该列指定样式,但无论我如何指定样式,如果在行中设置了某些列的关键设置,则无法覆盖这些设置。

例如,如果我在行中设置rounded corners或,那么我随后如何使列具有除了在每个单元格中单独设置之外的功能(如我在示例中的第 2 行中所做的那样)?text depthsharp corners

我对text depth键特别感兴趣,因为设置text depth会使节点中的文本居中,但我希望text depth在行中设置,而不是在第一列中设置。有没有办法取消设置?

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\tikzset{
    myrow/.style={align=center,minimum size=2cm,fill=#1,text width=2cm,anchor=center,
    rounded corners,
%   text depth=2cm
    },
    mycol/.style={sharp corners, align=center, minimum size=2cm,text width=2cm,anchor=center},
    ,column sep=.25cm,row sep=.25cm}

\begin{document}
\begin{tikzpicture}[
    row 1/.style={nodes={myrow=red!80}},
    row 2/.style={nodes={myrow=blue!60}},
    column 1/.style={nodes={mycol}}]
\matrix[matrix of nodes]{
A title 
    & Some text 
    & More text
    & Even more\\
|[sharp corners]|Another title
    & Some text
    & More text
    & Even more\\
};
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案1

关于第二个问题,如何撤消/取消设置text depth=2cm:使用不带参数的选项:

..., text depth=, ...

关于第一个问题,如何在行样式之后执行列样式,观察Tikz 手册在第 20.3.3 节 (单元格样式和选项) 中解释道,以下样式按给定的顺序执行:column<数字>every odd/even columnrow<数字>every odd/even rowrow〈行号〉column〈列号〉

因此,列选项会被行选项覆盖。要获取最后应用的列选项,我们必须将代码添加到行选项中,因为计数器\pgfmatrixcurrentcolumn包含当前列号。对于给定的示例代码,这意味着:

\tikzset
   {myrow/.style={rounded corners, dominant column \the\pgfmatrixcurrentcolumn/.try},
    mycol/.style={sharp corners}
   }

\begin{tikzpicture}%
   [row 1/.style={nodes={myrow}},
    dominant column 1/.style={mycol}
   ]

以下是完整的示例代码。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\tikzset{
    myrow/.style={align=center,minimum size=2cm,fill=#1,text width=2cm,anchor=center,
    rounded corners,
    text depth=2cm,
    dominant column \the\pgfmatrixcurrentcolumn/.try
    },
    mycol/.style={sharp corners, text depth=},
    column sep=.25cm,row sep=.25cm}

\begin{document}
\begin{tikzpicture}[
    row 1/.style={nodes={myrow=red!80}},
    row 2/.style={nodes={myrow=blue!60}},
    dominant column 1/.style={mycol}]
\matrix[matrix of nodes]{
A title 
    & Some text 
    & More text
    & Even more\\
Another title
    & Some text
    & More text
    & Even more\\
};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容