关于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 2 的结果截图:
\draw (0cm, 0cm)...
如您所见,两种代码都会创建完全相同的图像。因此:相对于\draw (0, 0)...
, 反之亦然,的优势是什么?
答案1
这两个表达式在原则上非常不同,并且“意外地”给出了相同的结果。恕我直言,这个网站最清晰的讨论可以在这里找到在 LoopSpace 的这个很好的回答中,我在这里回收了一些相关部分。Ti钾(x,y)
根据是否x
携带单位,Z 的解释会有所不同y
。
- 如果它们是无量纲的,那么坐标
(x,y)
意味着x times unit vector in x direction plus y times unit vector in y direction
。 - 如果他们携带单位,那么这就意味着
x to the right and y up
。
默认情况下,方向上的单位向量x
为(1cm,0)
,方向上的单位向量y
为(0,1cm)
,因此对于两个无量纲数x
和y
在默认设置中 (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}