`tikz-cd` 图表的样式行/列

`tikz-cd` 图表的样式行/列

显然,tikz 键row n/在图表column n中不起作用:tikz-cd

\documentclass{scrartcl}
\usepackage{tikz-cd, tikz}

\begin{document}
    \[
        \begin{tikzcd}[row 1/.style={nodes={font=\color{red}}}]
            A \rar \dar & B \dar \\
            C \rar & D
        \end{tikzcd}
    \]
    \[
        \begin{tikzpicture}
            \matrix[matrix of math nodes, row 1/.style={nodes={font=\color{red}}}]{
                A & B \\
                C & D \\
            };
        \end{tikzpicture}
    \]
\end{document}

我原本以为第一个方程的第一行会像第二个方程一样显示为红色。正如您所看到的,事实并非如此。

如何才能实现我想要的效果,而无需将样式应用于每个节点和每个箭头?

编辑:我可以使用图表前面的 来控制节点的样式tikzcdset。但是箭头怎么办呢?

编辑2:如果可能的话,我希望第一行内的所有箭头都为红色。如果不可能,那么所有箭头都从第一行开始或在第一行定义也可以。

答案1

节点:

要更改行的样式,请使用nodes={row 1/.style=red}

在此处输入图片描述

\documentclass{article}
\usepackage{tikz-cd}

\begin{document}
    \[
        \begin{tikzcd}[nodes={row 1/.style=red}]
            A \rar \dar & B \dar \\
            C \rar & D
        \end{tikzcd}
    \]
\end{document}

其他 TikZ 矩阵选项的工作方式类似:

在此处输入图片描述

\begin{tikzcd}[nodes={every odd column/.style=red}]
    A \rar \dar & B \dar \rar & X \dar \\
    C \rar & D \rar & Y
\end{tikzcd}

箭头:[注意——之前的代码有一个错误。]

箭头更难。原因是\arrow命令(或其快捷方式)在调用时对图表没有任何作用。最初,有一个空<paths>字符串,每次\arrow遇到命令时,

\path[⟨options⟩] (⟨source node⟩) to (⟨target node⟩); 

附加到<paths>。因此,要更改某一行(例如,行<r>)中箭头的颜色,我们必须进入箭头的路径。代码有些复杂,需要插入一些代码\pgfextra,然后将当前的 y 坐标<source node>与条目<r>-1(位于(\tikzcdmatrixname-<r>-1))的 y 坐标进行比较。

这一切都放入一个叫做(定义类似)tikzcdset的样式中:rowarrowscolarrows

\tikzcdset{rowarrows/.style args={#1/#2}{arrows={to path={\pgfextra{\pgfsetstrokecolor{black}}
        (\tikztostart)--(\tikztotarget) let \p1=(\tikztostart), \p2=(\tikzcdmatrixname-#1-1), \p3=(\tikztotarget) 
        in \pgfextra{\ifthenelse{\equal{\y1}{\y2}\AND\equal{\y3}{\y2}}
        {\pgfsetstrokecolor{#2}}{}}(\tikztostart)--(\tikztotarget)}}},
    colarrows/.style args={#1/#2}{arrows={to path={\pgfextra{\pgfsetstrokecolor{black}}
        (\tikztostart)--(\tikztotarget) let \p1=(\tikztostart), \p2=(\tikzcdmatrixname-1-#1), \p3=(\tikztotarget) 
        in \pgfextra{\ifthenelse{\equal{\x1}{\x2}\AND\equal{\x3}{\x2}}
        {\pgfsetstrokecolor{#2}}{}}(\tikztostart)--(\tikztotarget)}}}}

然后当你调用时\begin{tikzcd}[rowarrows=1/red],结果是

在此处输入图片描述

注意语法rowarrows=<row number>/<color>

将其与上面的节点解决方案相结合:

\begin{tikzcd}[rowarrows=1/red, nodes={row 1/.style=red}]
    A \rar \dar & B \dar \rar & X \dar \\
    C \rar & D \rar & Y
\end{tikzcd}

在此处输入图片描述

您可以混合搭配节点颜色和箭头颜色:

\begin{tikzcd}[rowarrows=2/blue, nodes={row 2/.style=red}]
    A \rar \dar & B \dar \rar & X \dar \\
    C \rar & D \rar & Y
\end{tikzcd}

在此处输入图片描述

列中的着色箭头类似:

在此处输入图片描述

\[\begin{tikzcd}[colarrows=1/red, nodes={column 1/.style=red}]
    A \rar \dar & B \dar \rar & X \dar \\
    C \rar \dar & D \dar \rar & Y \dar \\
    E \rar \dar & F \dar \rar & Z \dar \\
    G \rar & H \rar & W
\end{tikzcd}\hspace{2cm}
\begin{tikzcd}[colarrows=3/red, nodes={column 2/.style=red}]
    A \rar \dar & B \dar \rar & X \dar \\
    C \rar \dar & D \dar \rar & Y \dar \\
    E \rar \dar & F \dar \rar & Z \dar \\
    G \rar & H \rar & W
\end{tikzcd}\]

目前的一个缺点是,只能为一行或一列的箭头着色。不能同时为两者着色。

完整代码如下:

\documentclass{article}
\usepackage{tikz-cd, ifthen}
\usetikzlibrary{calc} % needed for "let" operation

\tikzcdset{rowarrows/.style args={#1/#2}{arrows={to path={\pgfextra{\pgfsetstrokecolor{black}}
        (\tikztostart)--(\tikztotarget) let \p1=(\tikztostart), \p2=(\tikzcdmatrixname-#1-1), \p3=(\tikztotarget) 
        in \pgfextra{\ifthenelse{\equal{\y1}{\y2}\AND\equal{\y3}{\y2}}
        {\pgfsetstrokecolor{#2}}{}}(\tikztostart)--(\tikztotarget)}}},
    colarrows/.style args={#1/#2}{arrows={to path={\pgfextra{\pgfsetstrokecolor{black}}
        (\tikztostart)--(\tikztotarget) let \p1=(\tikztostart), \p2=(\tikzcdmatrixname-1-#1), \p3=(\tikztotarget) 
        in \pgfextra{\ifthenelse{\equal{\x1}{\x2}\AND\equal{\x3}{\x2}}
        {\pgfsetstrokecolor{#2}}{}}(\tikztostart)--(\tikztotarget)}}}}

\begin{document}
\[\begin{tikzcd}[rowarrows=1/red, nodes={row 1/.style=red}]
    A \rar \dar & B \dar \rar & X \dar \\
    C \rar & D \rar & Y
\end{tikzcd}\hspace{2cm}
\begin{tikzcd}[rowarrows=2/red, nodes={row 1/.style=red}]
    A \rar \dar & B \dar \rar & X \dar \\
    C \rar & D \rar & Y
\end{tikzcd}\]

\[\begin{tikzcd}[colarrows=1/red, nodes={column 1/.style=red}]
    A \rar \dar & B \dar \rar & X \dar \\
    C \rar \dar & D \dar \rar & Y \dar \\
    E \rar \dar & F \dar \rar & Z \dar \\
    G \rar & H \rar & W
\end{tikzcd}\hspace{2cm}
\begin{tikzcd}[colarrows=3/red, nodes={column 2/.style=red}]
    A \rar \dar & B \dar \rar & X \dar \\
    C \rar \dar & D \dar \rar & Y \dar \\
    E \rar \dar & F \dar \rar & Z \dar \\
    G \rar & H \rar & W
\end{tikzcd}\]

\end{document}

答案2

\tikzcdset{arrow style=tikz,
           arrows =  {>=Straight Barb, very thick, gray}
           }

对于节点的颜色,您只能在本地更改其颜色:

完成 MWE

\documentclass[margin=3mm, varwidth]{standalone}
\usepackage{amsmath}
\usepackage{tikz-cd}

\tikzcdset{
    arrow style=tikz,
    arrows =  {>=Straight Barb, very thick, gray}
}

\begin{document}
\[
    \begin{tikzcd}
    \color{red}A \rar \dar & \color{red}B \dar \\
        C \rar & D
    \end{tikzcd}
\]
\end{document}

在此处输入图片描述

相关内容