使用范围来移动使用与对象本身相同的坐标系的对象

使用范围来移动使用与对象本身相同的坐标系的对象

答案摘要

TorbjørnT. 已通过评论回答了这个问题。如果使用范围,则xshift需要将单位指定为cm。如果稍后缩放整个图片,这也有效。谢谢!所包含的代码现在正常工作。-

JLDiaz 提供的解决方案同样有效,并且不需要任何单位!这里使用 移动图像shift={(x,z)}(确保获得所有括号)。

Ignasi 提出了第三种可能的解决方案,同样是对该问题的评论。对我来说,pic如果需要在同一张图片中重复几次元素,这种方法可能特别有用。

感谢所有好的反馈!

问题

我正在尝试为乳胶文档制作插图,效果很好。我知道代码还可以更好,但目前对我来说已经足够好了。嗯,大部分情况下。

因为代码是纯粹编写的(至少我认为是这样),所以移动一组对象并不是那么容易。我找到的解决方案(这里) 确实scope有效。但是我对它的工作方式有点不满意。

在下面的代码中,对象按预期围绕点 (0,0) 旋转了 15 度。但是,并没有像手动移动所有内容那样以相同的比例xshift=2移动整个scope对象。22

我知道axis环境有自己的坐标系统,可以通过 访问(axis cs:10,10)。 有类似的吗scope

可能是一个可以适应的解决方案(我猜我可以将图像 - 椅子,桌子和电脑 - 分成不同的部分)?

\documentclass[tikz]{standalone}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}%[scale=0.750]
\tikzstyle{every node}=[font=\small]
    % Temp stuff for construction only
        \draw[step=.2, lightgray, very thin] (0,0) grid ++(15.0,8.0);
        \foreach \s in {0,1,...,15.0}{
            \draw [lightgray](\s,0) -- (\s,-.1) node[below, lightgray]{\s};
        }
        \foreach \s in {0,1,...,8.0}{
            \draw [lightgray](0,\s) -- (-.1,\s) node[left, lightgray]{\s};
        }
% The Inside of the house
    \begin{scope}[xshift=2cm, rotate=15] % unit was not in original code for question!
        % Table
        \draw (11.9,0) rectangle ++(0.1,1.); % leg 1
        \draw (12.8,0) rectangle ++(0.1,1.);    % leg 2
        \draw (11.8,1.) rectangle ++(1.2,0.05); % Surface plate
        % Computer (iMac) ;-)
        \fill (12.72,1.45) circle (0.03); % The nob in the back
        \draw (12.74,1.45) .. controls (12.8,1.25) and (12.8,1.22) .. (12.8,1.06) -- (12.55,1.06); % Stand
        \draw [fill=white, rotate around={-10:(12.6,1.15)}] (12.6,1.2) rectangle ++(0.07,0.6); % the iMac
        % Chair
        \draw (11.1,0) -- ++(0.2,0.2) -- ++ (0.2,-0.2); % leg part 1
        \draw (11.3,0.2) -- ++(0,0.45); % leg part 2
        \draw (11.05,0.65) rectangle ++(0.5,0.05); % seat
        \draw (11,0.75) rectangle ++(0.05,0.5); % back support
        \draw (11.15,0.65) .. controls (10.95,0.57) and (10.95,0.75) .. (11,0.95); % connection seat - back
    \end{scope}
\end{tikzpicture}
\end{document}

附言:有人能给我提供一份全面的指南来理解不同的坐标系tikz吗?我还没找到类似的东西。


这是我想要创建的最终图像。我知道它并不多,并且代码(以上只是其中的一部分)可能可以写得更高效,但我对结果还是非常满意的。

最终图像

答案1

有趣的是,该选项shift接受一对坐标作为参数,这些坐标不需要单位(注意括号周围的括号):

\begin{tikzpicture}
\node[draw] {Foo};
\draw (1,1) circle (0.2);
\begin{scope}[shift={(1,1)}]
 \node[draw] {Bar};
\end{scope}
\end{tikzpicture}

结果

您可以像平常一样在 中使用scalex和/或选项。ytikzpicture

相关内容