TikZ:附加单位的位置值的优势?

TikZ:附加单位的位置值的优势?

关于TikZ-images:我什么时候应该输入带有单位的定位值(例如\draw (0cm, 0cm)...),什么时候应该输入不带单位的定位值(例如简单的\draw (0, 0)...)?


最小工作示例 1:

\documentclass[border=5mm]{standalone}
\usepackage{tikz}

\begin{document}
    \begin{tikzpicture} 
           \draw (0, 0) rectangle (4, 4);
    \end{tikzpicture}
\end{document}

最小工作示例2:

\documentclass[border=5mm]{standalone}
\usepackage{tikz}

\begin{document}
    \begin{tikzpicture} 
       \draw (0cm, 0cm) rectangle (4cm, 4cm);
    \end{tikzpicture}
\end{document}

MWE 1 号的结果截图:

MWE 1号截图


MWE 2 的结果截图:

MWE 2 号截图


\draw (0cm, 0cm)...如您所见,两种代码都会创建完全相同的图像。因此:相对于\draw (0, 0)..., 反之亦然,的优势是什么?

答案1

这两个表达式在原则上非常不同,并且“意外地”给出了相同的结果。恕我直言,这个网站最清晰的讨论可以在这里找到在 LoopSpace 的这个很好的回答中,我在这里回收了一些相关部分。Ti(x,y)根据是否x携带单位,Z 的解释会有所不同y

  1. 如果它们是无量纲的,那么坐标(x,y)意味着x times unit vector in x direction plus y times unit vector in y direction
  2. 如果他们携带单位,那么这就意味着x to the right and y up

默认情况下,方向上的单位向量x(1cm,0),方向上的单位向量y(0,1cm),因此对于两个无量纲数xy 在默认设置中 (x,y)(xcm,ycm)产生相同的结果,这就是您的 MWE 所说明的。但是,如果我们改变基向量,情况就不再如此,如下例所示(使用矩形可能不是说明这些问题的最佳示例,但至少它很简单)。

\documentclass[border=5mm]{standalone}
\usepackage{tikz}

\begin{document}
    \begin{tikzpicture}[font=\sffamily] 
        \begin{scope}[local bounding box=standard]
           \begin{scope}[local bounding box=without units 1]
            \draw (0, 0) rectangle (4, 4);
           \end{scope}
           \node[above] at (without units 1.north){without units};
           \begin{scope}[xshift=5cm,local bounding box=with units 1]
            \draw (0cm, 0cm) rectangle (4cm, 4cm);
           \end{scope}
           \node[above] at (with units 1.north){with units};
        \end{scope}   
        \node[rotate=90,above=2em] at (standard.west){standard unit vectors};
        \begin{scope}[local bounding box=nonstandard,
        yshift=-5cm,x={(0.75,0.25)},y={(0,0.8)}]   
           \begin{scope}[local bounding box=without units 2]
            \draw (0, 0) rectangle (4, 4);
           \end{scope}
           \node[above] at (without units 2.north){without units};
           \begin{scope}[xshift=5cm,local bounding box=with units 2]
            \draw (0cm, 0cm) rectangle (4cm, 4cm);
           \end{scope}
           \node[above] at (with units 2.north){with units};
        \end{scope}   
        \node[rotate=90,above=2em] at (nonstandard.west){nonstandard unit vectors};
    \end{tikzpicture}
\end{document}

在此处输入图片描述

在内部,pgf 使用 pt 作为单位,这就是为什么 pgf 键xshift=2会产生移位2pt(因为Zarko 评论道)。然而,这并不意味着圆的半径被解释为 pt,而是,正如所解释的在 LoopSpace 的这个很好的回答中该命令\draw[ultra thick] (0,0) circle[x radius=2,y radius=2];在默认坐标系中产生一个半径为 2cm 的圆。

因此,这个问题的可能答案是

什么时候应该输入带有单位的定位值(例如\draw (0cm, 0cm)...),什么时候应该输入不带单位的定位值(例如,简单地说 \draw (0, 0)...)

这取决于您需要什么和/或正在做什么。在许多情况下,您会出于某种原因安装非标准坐标系,这就是为什么您可能不想cm在处理它们时添加它们。

旁注:tikz-3dplot包在所有坐标上添加了 cm,这可能导致混乱在某些情况下。

答案2

作为补充marmot 的精彩回答,下面的图片可能会有所帮助:

\documentclass[border=5mm]{standalone}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}[x={(2cm,2cm)}, y={(0cm,2cm)},
                    every node/.style={inner sep=2pt}]
  \draw[blue, ->] (0,0) -- (1,0) node[below right] {$\vec{x}$};
  \draw[blue, ->] (0,0) -- (0,1) node[above]       {$\vec{y}$};

  \begin{scope}[shift={(1,0)}]  % very different from shift={(1cm,0)}
  \draw[red, ->] (0cm,0cm) -- (1cm,0cm) node[right] {$\vec{u}$};
  \draw[red, ->] (0cm,0cm) -- (0cm,1cm) node[above] {$\vec{v}$};
  \end{scope}
\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容