这里有一件令人费解的事情:我一直在尝试使用 for 循环来创建本质上相同的图片的多个副本,这些副本垂直堆叠在一起。但是当我使用\pgfmathresult
该yshift
值时,它会将图片的所有副本放在同一个位置 - 本质上,它就像\pgfmathresult
计算结果为 0 一样,无论计算的实际结果是什么。这个 MWE 可能最好地说明了这一点:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \i in {1,...,4} {
\pgfmathparse{2*\i}
\begin{scope}[yshift=\pgfmathresult cm]
\fill (0,0) circle(3pt);
\end{scope}
}
\end{tikzpicture}
\end{document}
奇怪的是,如果我将其更改yshift
为xshift
,图片的副本会像我预期的那样水平展开。这种行为有什么原因吗,还是一个错误?
答案1
更好的解决方案是:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \i in {1,...,4} {
\draw[yshift=2*\i cm,fill] (0,0) circle(3pt);
}
\end{tikzpicture}
\end{document}
但
在个人宏中储存\pgfmathresult
或使用\pgfmathsetmacro
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \i in {1,...,4} {
%\pgfmathparse{2*\i}
\pgfmathsetmacro{\myshift}{2*\i}
\begin{scope}[yshift=\myshift cm]
\fill (0,0) circle(3pt);
\end{scope}
}
\end{tikzpicture}
\end{document}
现在有了75*(\i - 1)
,Caramdir 的评论很好,我们可以使用75*(\i - 1)*1pt
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \i in {1,...,4} {
\draw[yshift=75*(\i - 1)* 1 pt,fill] (0,0) circle(3pt);
}
\end{tikzpicture}
\end{document}
答案2
我发现使用shift={(x,y)}]
不太容易产生不良影响(我不知道为什么)。对于你的情况,你应该写
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \i in {1,...,4} {
\pgfmathparse{2*\i}
\begin{scope}[shift={(0,\pgfmathresult)}]
\fill (0,0) circle(3pt);
\end{scope}
}
\end{tikzpicture}
\end{document}
结果正是您想要的: