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 参数。