我有一张 tikz 图片,我想旋转和移动它。如果我用数字坐标定义图片,效果很好。如果我用命名坐标(我为许多图片使用的方便参考点)定义图片,则变换不适用。
(呃,抱歉,图片比较小。我猜是因为默认单位是厘米?)。
在第一个例子中,我定义了一个named line
从点 (A) 到 (B) 的图片。在下面的例子中,我定义了一个unnamed line
从点 (0,0) 到 (1, 0) 的图片(分别是 A 和 B)。
然后我对图片应用变换 ( xscale=-1
)。命名的线没有变换,而未命名的线变换了。
我猜想 (A) 和 (B) 的坐标定义对变换是不变的?有没有办法让它们服从变换?(我有相当多的坐标,我重复使用了好几次,如果只用标签而不是数字来引用它们就好了。我想我可以,\def\coordA{(0,0)}
但我想知道是否有 Tikz 解决方案)。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{scopes}
\tikzset{
named line/.pic = {
\draw (A) -- (B);
},
unnamed line/.pic = {
\draw (0,0) -- (1, 0);
}
}
\begin{document}
\begin{tikzpicture}
\coordinate (A) at (0, 0);
\coordinate (B) at (1, 0);
\draw pic [red] {named line};
\draw pic [blue,xscale=-1] {named line};
\begin{scope}[yshift=-1cm]
\draw pic [red] {unnamed line};
\draw pic [blue,xscale=-1] {unnamed line};
\end{scope}
\end{tikzpicture}
\end{document}
答案1
需要注意的一点是,您可以\coordinate
随意重新定义 s,因此您可能做的一件事就是定义以下命令:
\newcommand\setcoordinates{
\coordinate (A) at (0, 0);
\coordinate (B) at (1, 0);
}
\setcoordinates
然后,每次需要转换时,都可以说。Tikz 坐标不应该被转换。但是,如果您确实想转换它们,则以下代码定义了一个键,(A)
该键会更改查找节点坐标的方式以实现此目的:(B)
transform coordinates
tikz
\documentclass{article}
\usepackage{tikz}
\makeatletter
\def\tikz@calc@anchor@modified#1.#2\tikz@stop{%
\bgroup
\pgftransformreset
\pgfpointanchor{\tikz@pp@name{#1}}{#2}%
\edef\tikz@point@smuggle{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
\expandafter\egroup
\tikz@point@smuggle
}
\tikzset{transform coordinates/.code={\let\tikz@calc@anchor\tikz@calc@anchor@modified}}
\makeatother
\begin{document}
\begin{tikzpicture}
\coordinate (A) at (0, 0);
\draw (A) circle [radius=10pt];
\draw[xshift=1cm,red] (A) circle [radius=10pt];
\end{tikzpicture}
\begin{tikzpicture}[transform coordinates]
\coordinate (A) at (0, 0);
\draw (A) circle [radius=10pt];
\draw[xshift=1cm,red] (A) circle [radius=10pt];
\end{tikzpicture}
\begin{tikzpicture}
\coordinate (A) at (0, 0);
\draw (A) circle [radius=10pt];
\draw[xshift=1cm,red,transform coordinates] (A) circle [radius=10pt];
\end{tikzpicture}
\end{document}
输出: