TikZ 中的增量/减量变量

TikZ 中的增量/减量变量

我需要在 TikZ 中增加/减少变量,即我有

\def\a{0}

然后我需要执行

\a=\a-1.5;

代码可以编译,但是它不会改变变量的值\a

我该怎么做呢?

答案1

您的问题没什么可说的。所以,我会尽力回答。您可以采取几种方法。您想减少\a;我在以下示例中将其增加,以直观地强调效果是如何发生和使用的:只需对减少进行必要的更改即可。

第一种是将\pgfmathparse\edef

在此处输入图片描述

上图的代码:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}

Use \verb`\pgfmathparse` together with \verb`\edef`

\begin{tikzpicture}
  \edef\mya{0}
  \pgfmathparse{\mya+1.5}
  \edef\mya{\pgfmathresult}
  \node[circle,draw] at (\mya,\mya) {\mya};
\end{tikzpicture}

\end{document}

如果你想记住改变的宏,那么tikzpicture你可以使用\xdef

在此处输入图片描述

上图的代码:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}

To remember outside of the picture use \verb`\xdef`

\begin{tikzpicture}
  \edef\mya{0}
  \pgfmathparse{\mya+1.5}
  \xdef\mya{\pgfmathresult}
  \node[circle,draw] at (\mya,\mya) {\mya};
\end{tikzpicture}

\verb`\mya`=\mya

\end{document}

您可以将\foreach循环与上述技巧结合使用:

在此处输入图片描述

上图的代码:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}

If used within a \verb`\foreach` loop, you have several choices:

Use \verb`\xdef`

\begin{tikzpicture}
  \edef\mya{0}
  \foreach \x in {1,2,...,8}
  {   
      \pgfmathparse{\mya+1.5}
      \xdef\mya{\pgfmathresult}
      \node[circle,draw,inner sep=\mya pt] at (\mya*0.50cm,\mya*0.25cm) {\makebox[0pt]{\mya}};
  }
\end{tikzpicture}
\end{document}

更好的是,你可以使用evaluate=\x as ...

在此处输入图片描述

上图的代码:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}

Using \verb`evaluate=\x as ...`

\begin{tikzpicture}
  \edef\mya{0}
  \foreach \x [evaluate=\x as \mya using \x*1.5] in {1,2,...,8}
  {   
      \node[circle,draw,inner sep=\mya pt] at (\mya*0.5cm,\mya*0.25cm) {\makebox[0pt]{\mya}};
  }
\end{tikzpicture}

\end{document}

最后,如果您需要记住循环之外的值\foreach,您可以执行以下操作:

在此处输入图片描述

上图的代码:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}

Using \verb`evaluate=\x as ...` and remembering

\begin{tikzpicture}
  \edef\mya{0}
  \foreach \x [evaluate=\x as \mya using \x*1.5] in {1,2,...,8}
  {   
      \node[circle,draw,inner sep=\mya pt] at (\mya*0.5cm,\mya*0.25cm) {\makebox[0pt]{\mya}};
      \xdef\remembermya{\mya}
  }
  \edef\mya{\remembermya}
  \node at (0,0) {\mya};
\end{tikzpicture}

\end{document}

这应该足以让您入门。如果您可以发布更详尽的 MWE 来说明您尝试如何使用\a,那么我可能会给您更完整的答案。

您还可以采用一种相当不同的方法,即使用坐标算法:

在此处输入图片描述

上图的代码:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}

Using \verb`calc` package to perform coordinate arithmetic: \verb`($(0,0)+\x*(<coordinate>)$)` 

\begin{tikzpicture}
  \coordinate (myinc) at (1.5*0.5cm,0.25cm);
  \foreach \x  in {1,2,...,8}
  {   
      \pgfmathparse{\x*1.5}
      \edef\mya{\pgfmathresult}
      \node[circle,draw,inner sep=\mya pt] at ($(0,0)+\x*(myinc)$) {\makebox[0pt]{\mya}};
  }
\end{tikzpicture}

\end{document}

相关内容