在下面的代码中,绘制矩形后cycle
不会返回(-1,-1)
路径的起始点。这是一个错误吗?
让我说清楚一点:首先我们的笔在(-1,-1)的初始点
\draw[red] (-1,-1) node{x};
然后笔移动到(1,1)
\draw[red] (-1,-1) node{x} rectangle (1,1) node{y};
但笔没有移动到初始点
\draw[red] (-1,-1) node{x} rectangle (1,1) node{y}--cycle;
请注意,它可以与其他路径操作配合良好,例如parabola
,,,...我在 Windows 10 上使用最新版本的 TikZ。arc
to
\documentclass[tikz,border=1mm]{standalone}
\begin{document}
\begin{tikzpicture}
% cycle works well as usual
\draw[teal] (-1,1) node{a} parabola bend (0,0) (2,4) node{b}--cycle;
\draw[blue] (-1,0) node{m} arc(180:0:1) node{n}--cycle;
\draw[orange] (-2,0) node{p} to[out=80,in=120] (1,4) node{q}--cycle;
% cycle does not come back the initial point (-1,-1) of the path. Is it a bug?
\draw[red] (-1,-1) node{x} rectangle (1,1) node{y}--cycle;
%\draw[red] (-1,-1) node{x} rectangle (1,1) node{y}--(-1,-1); %<<< work!
\end{tikzpicture}
\end{document}
附录1我在绘制汇丰银行的标志时遇到了这种情况。
附录 2。我发现decoration.markings
改变了 TikZ 计算路径上位置的方式rectangle
。加载此库后,(A) rectangle (B)
意味着(A)--(A|-B)--(B)--(B|-A)--A
,即:pos=0
从 A 开始,然后逆时针前进,到达 B 处pos=0.5
,然后继续逆时针前进,再回到 A 处。
\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[gray!50] (-1,0) grid (5,5);
\draw (0,1) node{start} rectangle (4,4) node{end}
foreach \i in {.1,.2,...,.9}
{node[pos=\i]{\pgfmathprintnumber{\i}}};
\end{tikzpicture}
\usetikzlibrary{decorations.markings}
\begin{tikzpicture}[markpos/.style={
decoration={markings,mark=at position #1
with {\node[red,scale=.7]{pos=\pgfmathprintnumber{#1}};}
},
postaction={decorate}}]
\draw[gray!50] (-1,0) grid (5,5);
\foreach \i in {.1,.2,...,.9}{
\draw[markpos=\i] (0,1) node{start} rectangle (4,4) node{end};}
\end{tikzpicture}
\end{document}
使用时情况会更有趣(跳起来pos=0.7
)pos=0.8
\foreach \i in {.1,.2,...,.9}{
\draw[markpos=\i] (0,1) node{start} rectangle (4,4) node{end}--(0,1);}
答案1
我不一定同意这些评论,但我认为你说得有道理 (+1)。要了解原因,让我们看看
\draw[red] (-1,-3) node{x} rectangle (1,-1) node{y}
foreach \X in {0,0.2,...,1} {node[pos=\X]{\pgfmathprintnumber{\X}}};
生成:
也就是说,是包含矩形pos=0
第一角和第二角的路径。可以利用这一点,例如pos=1
\newcommand{\RectCycle}{ coordinate[pos=0] (aux) -- (aux)}
\draw[red] (-1,-6) node{x} rectangle (1,-4) node{y} \RectCycle;
产量
这似乎就是您要找的。重新定义矩形路径构造tikz.code.tex
可能太危险了。
这是一个完整的例子。
\documentclass[tikz,border=1mm]{standalone}
\begin{document}
\begin{tikzpicture}
% cycle works well as usual
\draw[teal] (-1,1) node{a} parabola bend (0,0) (2,4) node{b}--cycle;
\draw[blue] (-1,0) node{m} arc(180:0:1) node{n}--cycle;
\draw[orange] (-2,0) node{p} to[out=80,in=120] (1,4) node{q}--cycle;
% cycle does not come back the initial point (-1,-1) of the path. Is it a bug?
\draw[red] (-1,-3) node{x} rectangle (1,-1) node{y}
foreach \X in {0,0.2,...,1} {node[pos=\X]{\pgfmathprintnumber{\X}}};
\newcommand{\RectCycle}{ coordinate[pos=0] (aux) -- (aux)}
\draw[red] (-1,-6) node{x} rectangle (1,-4) node{y} \RectCycle;
\end{tikzpicture}
\end{document}