TikZ 矩阵,组合或行和列的样式

TikZ 矩阵,组合或行和列的样式

在 TikZ 手册中,我们有下面的示例,展示了如何将样式应用于矩阵的条目。将其应用于整行和整列也很容易。我的问题是,我们如何才能对多个条目实现相同的效果?有吗?一个简单的方法指定一种风格,比如说,第 1 行和第 3 行以及第 1 列和第 2 列

\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}[row 2 column 3/.style=red]
\matrix [matrix of nodes]
{
 8 & 1 & 6 \\
 3 & 5 & 7 \\
 4 & 9 & 2 \\
  };
 \end{tikzpicture}
 \end{document}

答案1

您可以使用/.listJohn Kormylo 在他的回答中提到的功能来为不同的输入重复一种样式。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\tikzset{myset/.style={row 2 column #1/.style={nodes={text=red}}}}
\begin{tikzpicture}[myset/.list={1,3,5}]
\matrix [matrix of nodes]
{
 8 & 1 & 6 & 8 & 1 & 6 \\
 3 & 5 & 7 & 3 & 5 & 7 \\
 4 & 9 & 2 & 4 & 9 & 2 \\
  };
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

更多的是长篇评论而不是真正的答案...基于percusse 的回答,此样式允许同时指定行和列。

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\tikzset{myset/.style args = {(#1,#2)}{%
    row #1 column #2/.style={nodes={text=red}}}}
\begin{tikzpicture}[myset/.list={(2,1),(3,3),(1,5)}]
\matrix [matrix of nodes]
{
 8 & 1 & 6 & 8 & 1 & 6 \\
 3 & 5 & 7 & 3 & 5 & 7 \\
 4 & 9 & 2 & 4 & 9 & 2 \\
  };
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

这确实可以通过 来实现\foreach,但由于 设置的键\pgfkeys不是全局的,因此退出循环时它们的分配将丢失。除非你弄乱\globaldef,如下例所示:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}

\newcommand{\rows}[2]{% #1 = rows, #2 = style
\foreach \r in {#1} {%
  \globaldefs=1\relax
  \tikzset{row \r/.style={#2}}
}%
}

\newcommand{\cols}[2]{% #1 = columns, #2 = style
\foreach \r in {#1} {%
  \globaldefs=1\relax
  \tikzset{column \r/.style={#2}}
}%
}

\begin{tikzpicture}
\cols{1,3}{blue}
\rows{1,3}{red}
\matrix [matrix of nodes]
{
 8 & 1 & 6 \\
 3 & 5 & 7 \\
 4 & 9 & 2 \\
  };
 \end{tikzpicture}
\end{document}

结果

答案4

我重新提出这个老问题,因为从 percusse 和 cjorssen 的回答中,我设法将样式分配给一个单元格块,仅指定其(顶部、从左到下、右侧)坐标。我在这里分享我的解决方案,希望它能帮助其他人。

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\tikzset{myblocks/.style args = {(#1,#2 to #3,#4)}{
            blockrows/.style={
                block/.style={
                    row ##1 column ####1/.style={nodes={text=red}}
                },
                block/.list={#2,...,#4}
            },
            blockrows/.list={#1,...,#3}
        }
}
\begin{tikzpicture}[myblocks/.list={(1,1 to 2,2),(1,4 to 3,5)}]
\matrix [matrix of nodes]
{
 8 & 1 & 6 & 8 & 1 & 6 \\
 3 & 5 & 7 & 3 & 5 & 7 \\
 4 & 9 & 2 & 4 & 9 & 2 \\
  };
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容