\pgfmathresult 不能作为 yshift 值起作用的原因是什么?

\pgfmathresult 不能作为 yshift 值起作用的原因是什么?

这里有一件令人费解的事情:我一直在尝试使用 for 循环来创建本质上相同的图片的多个副本,这些副本垂直堆叠在一起。但是当我使用\pgfmathresultyshift值时,它会将图片的所有副本放在同一个位置 - 本质上,它就像\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}

奇怪的是,如果我将其更改yshiftxshift,图片的副本会像我预期的那样水平展开。这种行为有什么原因吗,还是一个错误?

答案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}

结果正是您想要的:

在此处输入图片描述

相关内容