
TikZ
宏包除了提供 tikzpicture 环境外还提供了一个可以嵌套在 tikzpicture
里的子环境 scope
, 简单点说就是可以通过 scope
环境把同一标准的画图命令放在一起, 而只需要声明一次标准, 比如 scale
, thick
, ->
等等之类. 个人用的更多的是通过 scope
环境完成平移做图, 当然命令不多的的时候也可以直接平移做图, 如上图中圆心位于点 $(1,1)$ 的圆.
另外三个小圆都是通过 scope
环境完成的, 需要注意的是通过 shift
用直角坐标表示偏移向量时需要把坐标用 花括号 括起来, 而用 极坐标 表示时则不需要, 用 xshift
或 yshift
表示也不需要.
TikZ
宏包还提供了一个 scopes
library, 以简化 scope
环境的调用, 当个人觉得直接显示 scope
似乎更有利于代码的可读性.
上图完整代码如下, 欢迎交流探讨.
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw (0,0) circle (1cm);
\draw [shift={(1,1)}] (0,0) circle (0.414cm);
\begin{scope}[xshift=-1cm,yshift=1cm]
\draw (0,0) circle (0.414cm);
\end{scope}
\begin{scope}[shift=(225:{sqrt(2)})]
\draw (0,0) circle (0.414cm);
\end{scope}
\begin{scope}[shift={(1,-1)}]
\draw (0,0) circle (0.414cm);
\end{scope}
\begin{scope}[xshift=2cm]
\draw (0,0) circle (1cm);
\end{scope}
\begin{scope}[xshift=-2cm]
\draw (0,0) circle (1cm);
\end{scope}
\end{tikzpicture}
\end{document}
另外一个有时很有用的功能是 scope
里承认在它之前定义的点 (node
或 coordinate
), 如在 scope
环境之外提前定义了
\coordinate (A) at (3,4);
那在 scope
中就可以不用再定义, 直接使用 (A)
; 需要注意的是这个位置还是 scope
外的 位置, 而不会跟着 scope
的偏移量而改变.
另外还可以通过 scope
实现子图的排列, 如下代码即可实现简单的一个排列, 不过个人更建议使用 subcaption
之类处理, 可能更方便以后的维护.
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw (0,0) circle (1);
\draw [-stealth] (-1,-1) -- ++(2,2);
\node [below] at (0,-1) {(a)};
\begin{scope}[xshift=3cm]
\draw (0,0) circle (1);
\draw [-stealth] (-1,-1) -- ++(2,2);
\node [below] at (0,-1) {(b)};
\end{scope}
\end{tikzpicture}
\end{document}
