到 TikZ 中的路径+相对坐标?

到 TikZ 中的路径+相对坐标?

以下是 PGF 2.00 的错误:

\begin{tikzpicture}
  \draw (0,0) to +(1,1);
\end{tikzpicture}

我可以发誓,这曾经在另一个版本中起作用,但我不知道是哪个版本。问题似乎是“到”路径的目标坐标必须以括号开头。但将“到”路径绘制到相对坐标是一件非常有用的事情!有什么办法可以解决这个问题吗?到目前为止,我想到的唯一办法是改用“calc”包:

\begin{tikzpicture}
  \draw (0,0) to ($(0,0)+(1,1)$);
\end{tikzpicture}

但这很快变得麻烦,特别是中间有几段使用 ++ 相对坐标的路径。

编辑:是的,当然在这个简单的例子中我可以to用替换--,但重点是我想要使用其他to路径,具体来说curve to

编辑:这是我想要做的一件更复杂的事情:

\begin{tikzpicture}
  \filldraw[fill=gray] (0,0) to[out=20,in=180] ++(2,1)
    to[out=0,in=160] ++(2,-1) -- cycle;
\end{tikzpicture}

答案1

更新(2011-05-15):我刚刚用 PGF2.10 测试了这一点,似乎现在(再次)支持相对坐标。因此,如果您能够升级到 2.10,则以下技巧就没有必要了。


真烦人!

如果您只是绘制直线,那么您可以替换 by to--这样就可以了。但是,这不会修复更通用的to路径。如果您有很多to基本相同的路径,您可以指定自己的采用相对坐标的变体。例如,要使您提供的示例工作(我添加了节点以显示它们按预期工作),您可以执行以下操作:

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw (0,0) to node {x} (1,1);
\begin{scope}[to path={-- +(\tikztotarget) \tikztonodes}]
\draw (0,1) to node {y} (1,1);
\end{scope}
\end{tikzpicture}
\end{document}

要全局定义它,您可以使用以下\tikzstyle命令:

\documentclass{article}
\usepackage{tikz}
\tikzstyle{rel line to}= [to path={-- +(\tikztotarget) \tikztonodes}]
\begin{document}
\begin{tikzpicture}
\draw (0,0) to node {x} (1,1);
\draw (0,1) to[rel line to] node {y} (1,1);
\end{tikzpicture}
\end{document}

要了解如何修改其他类型的to路径,您需要查看文件tikzlibrarytopath.code.tex(使用zsh: less $(kpsewhich tikzlibrarytopath.code.tex))。有些定义看起来很容易修改(只需+在正确的位置添加),但有些定义可能稍微复杂一些,因为目标坐标可能在多个地方使用。如果您想要让某个特定类型工作,但又搞不清楚,只需询问即可!

答案2

这够简单吗?:

\path (0,0) node (y) {} +(-1,-2) edge [-] (y);

(是的,我理解这意味着反转坐标,但是......)

相关内容