在 \foreach 列表中使用可变参数计数对边缘样式参数进行编码

在 \foreach 列表中使用可变参数计数对边缘样式参数进行编码

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);

相关内容