![访问 Tikz 中数组中的条目,并将其作为参数传递给宏?](https://linux22.com/image/398200/%E8%AE%BF%E9%97%AE%20Tikz%20%E4%B8%AD%E6%95%B0%E7%BB%84%E4%B8%AD%E7%9A%84%E6%9D%A1%E7%9B%AE%EF%BC%8C%E5%B9%B6%E5%B0%86%E5%85%B6%E4%BD%9C%E4%B8%BA%E5%8F%82%E6%95%B0%E4%BC%A0%E9%80%92%E7%BB%99%E5%AE%8F%EF%BC%9F.png)
我尝试用 标记路径,该路径由坐标列表(x 和 y 值对,没有“真实”的 tikz 坐标类型)定义。在第二个列表中,我存储了边缘的标签。这两个列表都是宏的输入参数。这个想法是在绘制路径期间使用foreach
第一个列表上的循环,使用我从 获得的索引访问第二个列表的标签count
。但是,我没有获得标签,而是在每个点打印了整个第二个列表。
\documentclass[tikz,margin=10pt]{standalone}
\newcommand{\drawPoints}[2]{
\foreach \x [count=\xi from 2,remember=\x as \lastx] in #1 {
\ifnum\xi>2
\draw \lastx -- \x node[midway] {#2[\xi]};
\fi
}
}
\begin{document}
\begin{tikzpicture}
\drawPoints{{(0,0),(1,2),(3,4),(5,1),(7,0)}}{{l1,l2,l3,l4,l5}}%T1
\end{tikzpicture}
\end{document}
如何让 TeX 扩展,#2[\xi]
以便我在正确的位置获得正确的标签?
可以考虑以“点/标签”的方式将两个列表合并为一个,但这不是问题的重点。我感兴趣的是如何通过索引访问第二个列表。
答案1
坐标会被解析,但节点内容不会被解析,因此您需要自己解析。并且您需要将文本包装在 中"
。由于您决定从 开始计数2
,因此我不得不减去 2 以避免超出范围;如果您从 0 开始,则无需这样做。(请注意,使用 (\xi
代表希腊字母)作为循环变量可能不是最佳选择,但我将其保留了下来。最后,10pt
接近3.14mm
,但并不完全一致。;-)
\documentclass[tikz,margin=10pt]{standalone}
\newcommand{\drawPoints}[2]{
\foreach \x [count=\xi from 2,remember=\x as \lastx] in #1 {
\ifnum\xi>2
\draw \lastx -- \x node[midway] {\pgfmathsetmacro{\pft}{#2[\xi-2]}\pft};
\fi
}
}
\begin{document}
\begin{tikzpicture}
\drawPoints{{(0,0),(1,2),(3,4),(5,1),(7,0)}}{{"l1","l2","l3","l4","l5"}}%T1
\end{tikzpicture}
\end{document}
您还可以将事物绘制为一条路径,放大后看起来会更好。
\documentclass[tikz,margin=10pt]{standalone}
\newcommand{\drawPoints}[2]{\draw foreach \X [count=\Y starting from 0] in #1 {\ifnum\Y>0 --
node[midway]{\pgfmathparse{#2[\Y]}\pgfmathresult} \fi \X} ;}
\begin{document}
\begin{tikzpicture}
\drawPoints{{(0,0),(1,2),(3,4),(5,1),(7,0)}}{{"l1","l2","l3","l4","l5"}}%T1
\end{tikzpicture}
\end{document}