显然,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
的样式中:rowarrows
colarrows
\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}