bug tikz na curva para os nós

bug tikz na curva para os nós

Isso pode ser bem conhecido, mas não me lembro de ter encontrado isso antes. Aqui está um exemplo mínimo:

\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}

Na imagem girada, a linha não está anexada corretamente aos nós:

insira a descrição da imagem aqui

Isso é realmente um bug ou estou faltando alguma coisa? alguma correção conhecida?

Responder1

Concordo com Shady Puck que isso não é um bug. No entanto, uma maneira possivelmente mais precisa de explicar o que está acontecendo é lembrar que, por padrão, os nós não são transformados. Se você quiser transformá-los, ou seja, submeter as âncoras dos nós às transformações, você precisa dizer transform shape. (Na sua configuração, é necessário desfazer a transformação da escala para corresponder ao resultado presumivelmente desejado.)

\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}

insira a descrição da imagem aqui

Responder2

Não é um bug – o comportamento é facilmente corrigido.

Quando você especifica um modificador para toda a imagem, o que TikZ faz é aplicar este modificador à imagemecada objeto individualmente. Portanto, é necessário compensar esta rotação individual da geral com as nossas próprias rotações proporcionais e individualizadas. Depois de mexer nos sinais por um segundo, consegui esse código para produzir esse resultado.

\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}

insira a descrição da imagem aqui

informação relacionada