曲線からノードへの 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}

ここに画像の説明を入力してください

関連情報