tikz 中 \foreach 循环内的数学计算

tikz 中 \foreach 循环内的数学计算

下面的最小代码演示了这个问题。代码本身并没有给出所需的输出。我认为没有\x-\y得到正确处理。我试过包括括号、方括号,但无济于事。

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{calc} 


\newcommand{\connection}[4][]{\draw[{#1}] (#2#3)--([yshift={#4cm}]#2#3) --([yshift={#4cm}]#2#3-|#3#2)--(#2#3-|#3#2)}

\begin{document}

\begin{tikzpicture}

% create the coordinates
\foreach \Lletter/\l in {A/0,B/1,C/2}
    {\foreach \Rletter/\r in {A/0,B/1,C/2}
        {\coordinate (\Lletter\Rletter) at ({\l+\r/10},0);}
}

% create the paths
\foreach \L/\x in {A/5}
{\foreach \R/\y in {A/0,B/1,C/2}
    {\connection{\L}{\R}{\x-\y};}
}

% this is the desired result
% \connection{A}{A}{5};
% \connection{A}{B}{4};
% \connection{A}{C}{3};


\end{tikzpicture}

\end{document}

答案1

作为图哈米说\pgfmathsetmacro一种方法是在循环内包含对的显式调用。但是,由于这循环,我们不妨使用它\foreach自己提供的功能,使用 pgfmath 表达式来评估变量。

例如

\documentclass[tikz,border=10pt,multi]{standalone}
\newcommand{\connection}[4][]{%
  \draw [{#1}] (#2#3) -- ([yshift={#4cm}]#2#3) -- ([yshift={#4cm}]#2#3 -| #3#2) -- (#2#3 -| #3#2)
}
\begin{document}
\begin{tikzpicture}
  \foreach \Lletter/\l in {A/0,B/1,C/2}
  {\foreach \Rletter/\r in {A/0,B/1,C/2}
    {\coordinate (\Lletter\Rletter) at ({\l+\r/10},0);}
  }
  \foreach \L/\x in {A/5}
  {\foreach \R/\y [evaluate=\y as \z using {\x-\y}] in {A/0,B/1,C/2}
    {\connection{\L}{\R}{\z};}
  }
\end{tikzpicture}
\end{document}

块

相关内容