访问 Tikz 中数组中的条目,并将其作为参数传递给宏?

访问 Tikz 中数组中的条目,并将其作为参数传递给宏?

我尝试用 标记路径,该路径由坐标列表(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}  

相关内容