如何在 TikZ \foreach 循环内的数学表达式中添加 1

如何在 TikZ \foreach 循环内的数学表达式中添加 1

如何修改下面的循环,使得打印的下标不是当前值,\n而是递增的值\n+ 1(如整数,而不是浮点数)?

换句话说,所绘制的三幅图应该将节点标记为$\rho_2$,$\rho_3$,$\rho_4$,而不是$\rho_1$,$\rho_2$,$\rho_3$。

我愿意不是想要改变\draw (0,0) circle(\n)部分(实际上这将是一个涉及的更为复杂的表达式\n

\documentclass[tikz]{standalone}
\usepackage{amsfonts}

\begin{document}

\foreach \n in {1,...,3}{
\begin{tikzpicture}
  \draw (0,0) circle(\n) node {$\rho_{\n}$};
\end{tikzpicture}%
}
\end{document}

答案1

使用 e-TeX 的基本方法\numexpr(所有当前引擎都有此 e-TeX 扩展):

\documentclass[tikz]{standalone}

\begin{document}
\foreach \n in {1,...,3} {%
  \begin{tikzpicture}
    \draw (0,0) circle(\n) node {$\rho_{\the\numexpr \n + 1\relax}$};
  \end{tikzpicture}%
}
\end{document}

在此处输入图片描述

注意:\relax这里可以省略,因为右括号}会终止数字表达式。

答案2

您可以evaluate\foreach循环中使用:

\foreach \n[evaluate=\n as \m using int(\n+1)] in {1,...,3}{
\begin{tikzpicture}
  \draw (0,0) circle(\n) node {$\rho_{\m}$};
\end{tikzpicture}%
}

这将创建一个新的变量\m,其值为。表达式中\n+1需要 ,因为会假设您想要一个浮点数,否则会产生、等。您可以类似地给出 的任何函数的值。intevaluate2.03.0\m\n

在此处输入图片描述

答案3

您可以\inteval从包中使用xfp

\documentclass[tikz]{standalone}
\usepackage{xfp}

\NewExpandableDocumentCommand{\incr}{O{1}m}{\inteval{#1+#2}}

\begin{document}

\foreach \n in {1,...,3}{
\begin{tikzpicture}
  \draw (0,0) circle(\n) node {$\rho_{\incr{\n}}$};
\end{tikzpicture}%
}
\end{document}

您还可以将\incr[2]{\n}其增加 2,等等。

在此处输入图片描述

答案4

另一种方法,仅适用于 TikZ foreach:let\n从 2 运行到 4 而不是从 1 运行到 3,因此 TikZ 接受s\n的内容node

在此处输入图片描述

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\begin{document}
\foreach \n in {2,...,4}{%
\begin{tikzpicture}
\draw (0,0) circle(\n-1) node[magenta]{$\rho_{\n}$};
\end{tikzpicture}%
}
\end{document}

相关内容