pgfmathparse 在 foreach 中,使用结果作为节点坐标

pgfmathparse 在 foreach 中,使用结果作为节点坐标

我正在尝试在 TikZ 图片中使用计数器,并使用该计数器计算得出的值。例如,我想要的i范围从 0 到 9,ji*5ki*10。我设法通过以下方式使其工作:

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\foreach \i in {0,...,9}
{
\def \j {\pgfmathparse{\i * 5}\pgfmathresult}
\def \k {\pgfmathparse{\i * 10}\pgfmathresult}
\node at (0, -\i) {\tiny \i,\j,\k};
}
\end{tikzpicture}
\end{document}

这正如我预期的那样工作,输出为:

0,0.0,0.0

1,5.0,10.0

2,10.0,20.0

3,15.0,30.0

4,20.0,40.0

5,25.0,50.0

6,30.0,60.0

7,35.0,70.0

8,40.0,80.0

9,45.0,90.0

现在,这就是事情变得棘手的地方,我想使用辅助计数器,比如说j作为节点的坐标:

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\foreach \i in {0,...,9}
{
\def \j {\pgfmathparse{\i * 5}\pgfmathresult}
\def \k {\pgfmathparse{\i * 10}\pgfmathresult}
\node at (0, \j) {\tiny \i,\j,\k};
}
\end{tikzpicture}
\end{document}

我最终遇到了这个错误:

! Incomplete \iffalse; all text was ignored after line 9.
<inserted text> 
\fi 
<*> mwe.tex

为什么不起作用?实现我想要做的事情的正确方法是什么?

答案1

您的尝试不起作用,因为直到在坐标系中使用\pgfmathparse{…}\pgfmathresult 后才会展开\j\node。Ti当然,Z 并不期望这一点,因此它无法解析坐标。要解决这个问题,您可以在定义时扩展宏。

我相信,这是您的代码最直接的类似物:

\documentclass[tikz]{standalone}

\begin{document}

\begin{tikzpicture}
  \foreach \i in {0,...,9} {
    \pgfmathparse{\i * 5}\edef\j{\pgfmathresult}
    \pgfmathparse{\i * 10}\edef\k{\pgfmathresult}
    \node at (0, \j) {\tiny \i,\j,\k};
  }
\end{tikzpicture}

\end{document}

这是一种常见的模式,因此\pgfmathsetmacro提供了一个快捷方式:

\documentclass[tikz]{standalone}

\begin{document}

\begin{tikzpicture}
  \foreach \i in {0,...,9} {
    \pgfmathsetmacro{\j}{\i * 5}
    \pgfmathsetmacro{\k}{\i * 10}
    \node at (0, \j) {\tiny \i,\j,\k};
  }
\end{tikzpicture}

\end{document}

两者的结果相同。

答案2

不完全确定为什么你会得到这个,但是可以使用它evaluate

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\foreach [evaluate=\i as \j using \i*5,evaluate=\i as \k using \i*10] \i in {0,...,9}
{
\node at (0, \j) {\tiny \i,\j,\k};
}
\end{tikzpicture}
\end{document}

答案3

隐式使用的解决方案\pgfmathparse

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[y=1mm]
\foreach \i in {0,...,9}
  \draw let \n1 = {5*\i}, \n2 = {10*\i} in
  (0, -\n1) node {\tiny \i,\n1,\n2};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容