考虑文件中保存的以下 LaTeX 代码test.tex
。
\documentclass{minimal}
\usepackage{tikz}
\begin{document}
Hello, world!
\begin{tikzpicture}
\draw (0,0) rectangle (1,1);
\end{tikzpicture}
Hello, world!
\begin{tikzpicture}
\begin{scope}[xshift=1]
\draw (0,0) rectangle (1,1);
\end{scope}
\end{tikzpicture}
\end{document}
此代码旨在创建以下输出:
然而,一旦编译,pdflatex test
实际输出是:
为什么下部方块没有相对于上部方块向右移动 1 厘米?有没有办法在tikzpicture
不更改绘制矩形的代码的情况下从环境内部影响这种移动?
答案1
这里有两个问题:
Ti 时的默认测量单位钾Z 期望长度为
pt
,因此您的1
意思是1pt
,1cm
不像您期望的那样。即使如此,如果你将内部坐标移动 1cm,但你有一个包含在坐标 (1,0) 和 (2,1) 之间的图形,则该图形的边界框仍然是 1cm x 1cm 的正方形......并且它被定位为一个字符,所以最终的输出没有区别。
如果你想要一张有更大边界框的移位图片,你需要放一些东西在(0,0):
\documentclass{minimal}
\usepackage{tikz}
\begin{document}
Hello, world!
\begin{tikzpicture}
\draw (0,0) rectangle (1,1);
\end{tikzpicture}
Hello, world!
\begin{tikzpicture}
\begin{scope}[xshift=1cm]
\draw (0,0) rectangle (1,1);
\end{scope}
\end{tikzpicture}
Hello, world!
\begin{tikzpicture}
\path (0,0);
\begin{scope}[xshift=1cm]
\draw (0,0) rectangle (1,1);
\end{scope}
\end{tikzpicture}
\end{document}
如果在每张图片周围添加一个fbox{}
,你就可以看到效果:
答案2
的坐标系tikzpicture
不尊重您的文档页面,因此由于第二个tikzpicture
只有一个元素(您的新矩形),因此没有比较点来查看向右移动 1 个单位。它已被移动,但您无法看到它,直到您将其他元素放入同一图像中以产生某种“透视”。
\documentclass{minimal}
\usepackage{tikz}
\begin{document}
%Hello, world!
%\begin{tikzpicture}
% \draw (0,0) rectangle (1,1);
%\end{tikzpicture}
%Hello, world!
\begin{tikzpicture}
\node (A) at (0,0) {Hello, world!};
\draw (A.west) ++ (0.15,-0.2) rectangle ++ (1,-1);
\node (B) at (0, -1.2-0.4) {Hello, world!};
\draw (B.east) ++ (-0.15,-0.2) rectangle ++ (-1,-1);
% Or using scope:
%\begin{scope}[yshift=-28mm, xshift=-1mm]
% \draw (0,0) rectangle (1,1);
%\end{scope}
\end{tikzpicture}
\end{document}