tikz 曲线中的错误来自节点

tikz 曲线中的错误来自节点

这可能是众所周知的,但我不记得以前遇到过这种情况。这是一个最简单的例子:

\documentclass[12pt,a4paper]{amsart}
\usepackage{tikz}
\begin{document}

\tikzset{vert/.style={circle,inner sep=1mm,draw}}
\tikzset{edge/.style={draw=#1,very thick}}
\begin{center}
\begin{tikzpicture}[scale=2.5]
\node[vert] (a) at (1.,1.3){};
\node[vert] (b) at (1.7,1.3){};
\draw[edge=blue,out=0,in=225] (a) to (b);
\end{tikzpicture}
\begin{tikzpicture}[scale=2.5,rotate=225]
\node[vert] (a) at (1.,1.3){};
\node[vert] (b) at (1.7,1.3){};
\draw[edge=blue,out=0,in=225] (a) to (b);
\end{tikzpicture}
\end{center}

\end{document}

在旋转的图片中,线没有正确连接到节点:

在此处输入图片描述

这真的是一个错误吗?还是我遗漏了什么?有任何已知的修复方法吗?

答案1

我同意 Shady Puck 的观点,这不是一个错误。但是,一种可能更精确的解释方式是回想一下默认情况下节点不会被转换。如果你想要转换它们,即对节点锚点进行转换,你需要说transform shape。(在你的设置中,需要撤消比例转换以匹配可能期望的结果。)

\documentclass[12pt,a4paper]{amsart}
\usepackage{tikz}
\begin{document}

\tikzset{vert/.style={circle,inner sep=1mm,draw}}
\tikzset{edge/.style={draw=#1,very thick}}
\begin{center}
\begin{tikzpicture}[scale=2.5]
\node[vert] (a) at (1.,1.3){};
\node[vert] (b) at (1.7,1.3){};
\draw[edge=blue,out=0,in=225] (a) to (b);
\end{tikzpicture}
\begin{tikzpicture}[scale=2.5,rotate=225,transform shape]
\node[vert,scale=1/2.5] (a) at (1.,1.3){};
\node[vert,scale=1/2.5] (b) at (1.7,1.3){};
\draw[edge=blue,out=0,in=225] (a) to (b);
\end{tikzpicture}
\end{center}
\end{document}

在此处输入图片描述

答案2

这不是一个错误——该行为很容易修复。

当你为整个画面指定修饰符时,TiZ 所做的就是将此修改器应用于图片每个对象都是独立的。因此,有必要用我们自己的比例个性化旋转来抵消这种单独的旋转。在摆弄了一会儿符号后,我得到了这个代码来产生这个结果。

\tikzset{vert/.style={circle,inner sep=1mm,draw}}
\tikzset{edge/.style={draw=#1,very thick}}
\begin{tikzpicture}[scale=2.5]
    \node[vert] (a) at (1.,1.3){};
    \node[vert] (b) at (1.7,1.3){};
    \draw[edge=blue,out=0,in=225] (a) to (b);
\end{tikzpicture}
\begin{tikzpicture}[scale=2.5,rotate=225]
    \node[vert,rotate=-225] (a) at (1.,1.3){};
    \node[vert,rotate=225] (b) at (1.7,1.3){};
    \draw[edge=blue,out=0,in=225] (a) to (b);
\end{tikzpicture}

在此处输入图片描述

相关内容