不完整 \iffalse:如何在极坐标中移动范围?

不完整 \iffalse:如何在极坐标中移动范围?

我需要scope根据极变量(不是xshift和)来转移一些环境yshift。假设此功能尚未实现(是吗?!)并且我没有重新发明轮子,我认为这将是一个很好的机会来pgf自己动手做这件事。

这是我尝试过的:

\documentclass[tikz]{standalone}
\usepackage{graphicx}
\usepackage{pgf}

\newcommand\object{
    \draw[fill=red] (0,0) rectangle ++(2,2);
}

\newcommand\polarshift[2]{
    xshift = \pgfmathparse{multiply(#1,cos(#2))}
    yshift = \pgfmathparse{multiply(#1,sin(#2))}
}

\begin{document}
    \begin{tikzpicture}
    \object;
    \begin{scope}[\polarshift{60}{30}]
        \object;
    \end{scope}
    \end{tikzpicture}
\end{document}

但是 LaTeX 抱怨如下:不完整 \iffalse。

此代码片段有什么问题?

答案1

这是试图说服你让事情变得更 TiZy。与宏相比,\object定义一个 可能更好pic object。然后移位只是 的(相对)坐标pic

\documentclass[tikz]{standalone}

\begin{document}
\begin{tikzpicture}[pics/object/.style={
    code={\draw[fill=red] (0,0) rectangle ++(2,2);}}]
 \path pic{object} (30:60pt) pic{object} ;
\end{tikzpicture}
\end{document}

在此处输入图片描述

如你所见,代码变得更短了。而且自定义也更容易了:

\documentclass[tikz]{standalone}

\begin{document}
\begin{tikzpicture}[pics/object/.style={
    code={\draw[fill=red,pic actions] (0,0) rectangle ++(2,2);}}]
 \path pic{object} (30:60pt) pic[rotate=30,scale=1.2,dashed,draw=blue]{object} ;
\end{tikzpicture}
\end{document}

在此处输入图片描述

附录:至于你的评论:当然,你的方法也可以奏效。首先,TiZ 会自动解析这些表达式,因此无需说\pgfmathparse。除此之外,您还缺少一个逗号,并且需要扩展宏。

\documentclass[tikz]{standalone}
%\usepackage{graphicx} %<-loaded by tikz
%\usepackage{pgf}% <- loaded by tikz

\newcommand\object{
    \draw[fill=red] (0,0) rectangle ++(2,2);
}

\newcommand\polarshift[2]{
    xshift ={#1*cos(#2)},
    yshift ={#1*sin(#2)}
}

\begin{document}
    \begin{tikzpicture}
    \object;
    \begin{scope}[style/.expanded=\polarshift{60}{30}]
        \object;
    \end{scope}
    \end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

似乎命令不能用作 的选项scope。请尝试以下操作:

\documentclass[tikz, margin=3mm]{standalone}
\usepackage{graphicx}
\usepackage{pgf}

\newcommand\object{
    \draw[fill=red] (0,0) rectangle ++(2,2);
}
\tikzset{polarshift/.style args={#1/#2}{xshift=#1*cos(#2),yshift=#1*sin(#2)}}

\begin{document}
    \begin{tikzpicture}
    \object;
    \begin{scope}[polarshift=60/30]
        \object;
    \end{scope}
    \end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

如果我正确理解了你的问题,只需将其转移到polar coordinate

\begin{scope}[shift={(30:2)}]

截屏

\documentclass[tikz]{standalone}
\usepackage{graphicx}
\usepackage{pgf}

\newcommand\object{
    \draw[fill=red] (0,0) rectangle ++(2,2);
}

%\newcommand\polarshift[2]{
%    xshift = \pgfmathparse{multiply(#1,cos(#2))}
%    yshift = \pgfmathparse{multiply(#1,sin(#2))}
%}

\begin{document}
    \begin{tikzpicture}
    \object;
    \begin{scope}[shift={(30:2)}]
        \object;
    \end{scope}
    \end{tikzpicture}
\end{document}

相关内容