TikZ 复制命令

TikZ 复制命令

TikZ 有copy命令吗?复制命令的意思是,例如,

我首先绘制一个矩形,然后在矩形中绘制任意内容,例如圆形、书写文字等。让我定义一个source object包含矩形中的所有对象和矩形本身的。现在我想copy根据source object矩形的左下角将移动到新位置。

@Martin @Jan @Caramdir,下面是一个例子,但是它有一些错误。请参考我的评论。

\documentclass[titlepage,a4paper]{article}

\usepackage[english]{babel}
\usepackage{TikZ}   %Create PostScript and PDF graphics in TeX

\begin{document}
\begin{tikzpicture}[scale=0.962661,thick]
  \foreach \xbase/\ybase in {0mm/0mm,46.700000mm/0mm}
  {
    %grid line
    \draw[xstep=11.200000mm,ystep=12.051000mm] (\xbase,\ybase) grid (\xbase + 44.800000mm,\ybase + 36.153000mm);
  }
\end{tikzpicture}

\end{document}

@Martin @Jan @Caramdir,我更新了上面的例子。除了缺少右侧网格最左边的垂直线之外,它更好了。

\documentclass[titlepage,a4paper]{article}

\usepackage[english]{babel}
\usepackage{TikZ}   %Create PostScript and PDF graphics in TeX

\begin{document}
\begin{tikzpicture}[scale=0.962661,thick]
  \foreach \xbase/\ybase/\xoffset in {0mm/0mm/0mm,44.800000mm/0mm/1.9mm}
  {
    %grid line
    \draw[xstep=11.200000mm,ystep=12.051000mm,xshift=\xoffset] (\xbase,\ybase) grid (\xbase + 44.800000mm,\ybase + 36.153000mm);
  }
 \end{tikzpicture}

 \end{document}

它似乎grid总是使用原点 (0,0) 作为参考。我的方法是将偏移添加到基点并自己关心坐标。但是右边网格最左边的垂直线不见了。我不知道为什么。看起来那条线应该在网格范围内。

这有什么道理吗?我的意思是grid使用 (x,y) 而不是 (0,0) 作为参考点。

答案1

除了使用\foreach命令或定义新命令之外,您还可以通过至少两种其他方式重复图片。(网格问题的解决方案位于我的答案的末尾)

1-(非 tikz 专用):使用\newsavebox\savebox\usebox命令。savebox 的优点是每次调用时都不会重新绘制图片。例如:

\documentclass{minimal}

\usepackage{tikz}

\begin{document}

\newsavebox{\test}
\savebox{\test}{\tikz \draw[red] (0,0) circle (1cm);}

\begin{tikzpicture}
\draw (0,0) node {\usebox{\test}};
\draw (7,0) node {\usebox{\test}};
\end{tikzpicture}


\end{document}

2-(tikz 特定)使用 tikz 和 pgf 的面向对象功能。详细信息请参阅 tikz 手册。例如,手册第 554 页上的代码:

\documentclass{minimal}

\usepackage{tikz}
\usepgfmodule{oo}

\begin{document}

\pgfooclass{stamp}{ % This is the class stamp
    \method stamp() { % The constructor 
    }
    \method apply(#1,#2) { % Causes the stamp to be shown at coordinate (#1,#2)
        %Draw the stamp:
        \node [rotate=20] at (#1,#2) {Passed};
    }
}
\pgfoonew \mystamp=new stamp()
\begin{tikzpicture}
        \mystamp.apply(1,2)
        \mystamp.apply(3,4)
\end{tikzpicture}

\end{document}

关于网格问题。除了 tikz 处理坐标的偏移的方式与你期望的方式不同(我承认这没什么好解释的),我无法很好地解释为什么会出现此问题。解决这个问题的一个好方法是使用环境,scope并移动整个环境,如以下代码所述(我稍微简化了你的循环以使环境scope脱颖而出):

\begin{tikzpicture}[scale=1,thick]
  \foreach \xoffset in {0,5.2}
  {
    \begin{scope}[shift={(\xoffset,0)}]
        \draw[xstep=1,ystep=1] (0,0) grid (5,5);
    \end{scope}
  }
\end{tikzpicture}

环境scope充当一个可以整体移动(移动或旋转)的框。如果您熟悉pstricks,它类似于\rput命令。

答案2

如果我不得不在不同的地方多次使用相同的内容,我会定义一个新的 tex 命令来绘制所有对象,然后在不同位置使用它,可能还会scope进行移动。像这样:

\newcommand\mytikzcontents{
  \draw (0,0) rectangle (4,5);
  \draw (1,1) circle (1cm);
  \draw[dashed,->] (4,5) -- (1,1);
}

然后在 tikzpicture 中我将使用它作为

\begin{scope}[xshift=2cm,yshift=3cm]
   \mytikzcontents
\end{scope}

或者您可以制作命令的 xshift 和 yshift 参数。

相关内容