这可能是众所周知的,但我不记得以前遇到过这种情况。这是一个最简单的例子:
\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
这不是一个错误——该行为很容易修复。
当你为整个画面指定修饰符时,Ti钾Z 所做的就是将此修改器应用于图片和每个对象都是独立的。因此,有必要用我们自己的比例个性化旋转来抵消这种单独的旋转。在摆弄了一会儿符号后,我得到了这个代码来产生这个结果。
\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}