我需要在 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}