钛钾Z 有一个\foreach
构造,可以用来迭代项目列表并根据需要绘制它们。
是否可以像这样在列表中对边缘样式参数进行编码(不幸的是,这会导致 Runaway Argument 错误):
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.markings}
\begin{document}
\begin{tikzpicture}
\tikzset{
sty1/.style args={#1:#2}{postaction=decorate,decoration={name=markings, mark=at position #1 with {\draw (0,0) -- (1,1) node {#2}; }}},
sty2/.style args={#1:#2:#3}{postaction=decorate,decoration={name=markings, mark=at position #1 with {\draw (0,0) -- node {#3} (1,1) node {#2}; }}}
}
% option 1
\foreach \a/\b in {sty1/.7:AParam2, sty2/.7:AParam2:AParam3, sty1/.7:AParam2, sty2/.7:AParam2:AParam3}{
\path (0,0) edge[\a=\b] (1,1);
}
% option 2 - the preferred option because I need the number at different independent places
\foreach \a/\b in {1/.7:AParam2, 2/.7:AParam2:AParam3, 1/.7:AParam2, 2/.7:AParam2:AParam3}{
\path (0,0) edge[sty\a=\b] (1,1);
}
\end{tikzpicture}
\end{document}
如您所见,列表项的相应样式决定了赋予该样式的参数数量。
是否有一条捷径可用\foreach
列表中的可变参数计数对样式参数进行编码?
我想做的是用不同颜色的可变数量的线条标记边缘。我想定义列表中的线条和颜色数量\foreach
以及每条边的其他参数,例如注释节点中的文本、入角和出角等。
答案1
在 OP 的代码中,样式接收\b
作为值,而它们期望的是...:...
( sty1
) 和...:...:...
( sty2
) 形式的值。这就是Runaway argument
引发错误的原因。解决方案是.expanded
在将值传递给样式之前使用处理程序扩展该值,如下所示:
\path (0,0) edge[sty\a/.expanded=\b] (1,1);