我很难弄清楚 Tikz 如何决定如何将我提供的 2d 坐标映射到我给它绘制的区域。有时它似乎会根据我在其中绘制的内容自动调整大小,从而导致我绘制边框来定义我的范围,但其他时候它似乎不遵循该规则。
这很令人困惑,而且很难找到文档。我找到了几百页的 pdf 文件,但它们似乎遗漏了很多命令 - 比如 tkzInit,它看起来可能可以做我想要的事情,但我找不到文档来证实这一点,而且我的测试表明它不能做我想要的事情!
例如,我希望它绘制 4 个正方形,但它却绘制了 4 个长度是宽度两倍的矩形。
\begin{tikzpicture}[x=8cm,y=4cm]
\tkzInit[xmax=2,ymax=1,xmin=0,ymin=0]
% border
\draw (-0.1,-0.2) rectangle (2,1.2);
\foreach \x in {0,...,4}
\draw (\x * 0.1 - 0.05,0.45) rectangle (\x * 0.1 + 0.05, 0.55);
\end{tikzpicture}
在这种情况下,我希望我的窗口宽度是高度的两倍,并在内部使用坐标 (0,0) 到 (2,1)。我可能还想稍微填充边缘并添加边框。
谁能告诉我我做错了什么?
谢谢你!!
答案1
除了 cfr 所说的[x=8cm,y=4cm]
为 x 和 y 轴设置步骤之外,还有一种更简单的方法来做同样的事情(红色是我的)。
输出
代码
\documentclass[margin=10pt]{standalone}
\usepackage{tikz}%, tkz-euclide}
%\usetkzobj{all}
\begin{document}
\begin{tikzpicture}%[x=8cm,y=4cm]
%\tkzInit[xmax=2,ymax=1,xmin=0,ymin=0]
% border
% \draw (-0.1,-0.2) rectangle (2,1.2);
\begin{scope}[x=1mm, y=1mm]
\foreach \x in {0,...,4}{
\draw[red] (\x,0) rectangle ({\x+1},1);
}
\end{scope}
\begin{scope}[xshift=.5mm]
\foreach \x in {0,...,4}
\draw (\x * 0.1 - 0.05,0.25) rectangle (\x * 0.1 + 0.05, 0.35);
\end{scope}
\end{tikzpicture}
\end{document}
答案2
您的矩形来自第一行,您在那里写入[x=8cm,y=4cm]
。这重新定义了用于 x 和 y 的单位。使用 重试您的代码,[x=4cm,y=4cm]
甚至完全删除它,看看会发生什么。我擅自更改了您的矩形定义代码,使用相对坐标计算,使用++(0.1,0.1)
。这样,计算正方形所需的坐标时就不需要考虑那么多了。
\begin{tikzpicture}[x=4cm,y=4cm]
\tkzInit[xmax=2,ymax=1,xmin=0,ymin=0]
% border
\draw (-0.1,-0.2) rectangle (2,1.2);
\foreach \x in {0,...,4}
\draw (\x * 0.1 - 0.05,0.45) rectangle ++(0.1,0.1);
\end{tikzpicture}
答案3
/tikz/x=<dimension>
和的使用/tikz/y=<dimension>
记录在 TikZ 手册第 25.2 节(目前为第 358-9 页)。
粗略地说,x=8cm
表示方向上的每个单位x
为8cm
。对于 也是如此y
。因此,如果您将 传递x=8cm, y=4cm
给tikzpicture
环境,则(1,1)
将8cm
在原点的右侧4cm
上方。因此,(0,0) rectangle (1,1)
将是矩形而不是正方形。要获得正方形,您需要(0,0) rectangle (.5,1)
补偿您指定的单位的不同大小。
可能你想要的是更像这样的东西。(我注释掉了这个\tkzInit
命令,因为我不知道它来自哪里。)
\documentclass[12pt,tikz]{standalone}
\begin{document}
\begin{tikzpicture}
% \tkzInit[xmax=2,ymax=1,xmin=0,ymin=0]% what package or library defines this?
% window
\path (-4cm,-2cm) rectangle (4cm,2cm);
% border
\draw (-0.1,-0.2) rectangle (2,1.2);
\foreach \x in {0,...,4}
\draw (\x * 0.1 - 0.05,0.45) rectangle (\x * 0.1 + 0.05, 0.55);
\end{tikzpicture}
\end{document}
更可能的是,您要么想要指定,比如说,x=4cm, y=4cm
将x=8cm, y=8cm
窗口内的图片放大,要么想要更改图片内的坐标,这样您就不会有这么大的边框。而且很可能图像也应该居中。
您可能想使用backgrounds
库来实现这一点。下面,我将图片放在一个\fbox
位置,以显示“窗口”的边框与绘制的边框(显示为绿色)的对比。蓝色用于在图片内进行绘制。
\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\begin{document}
\fbox{\begin{tikzpicture}[inner frame sep=5pt, draw=blue, background rectangle/.style={draw=green}, show background rectangle]
% \tkzInit[xmax=2,ymax=1,xmin=0,ymin=0]% what package or library defines this?
\foreach \x in {0,...,4}
\draw (\x * 0.1 - 0.05,0.45) rectangle (\x * 0.1 + 0.05, 0.55);
\end{tikzpicture}}
\end{document}