在 tikzpicture 中对范围进行 xshift 不起作用

在 tikzpicture 中对范围进行 xshift 不起作用

考虑文件中保存的以下 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实际输出是:

实际输出:两个方块从相同的 x 位置开始

为什么下部方块没有相对于上部方块向右移动 1 厘米?有没有办法在tikzpicture不更改绘制矩形的代码的情况下从环境内部影响这种移动?

答案1

这里有两个问题:

  1. Ti 时的默认测量单位Z 期望长度为pt,因此您的1意思是1pt1cm不像您期望的那样。

  2. 即使如此,如果你将内部坐标移动 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}

在此处输入图片描述

相关内容