我正在使用几个宏来快速绘制图形中的点(我必须画很多)。例如,我使用:
\newcommand{\punt}[3]{\draw[fill,scale=1]#1 coordinate(#2)circle(0.5pt)node[#3]{$#2$};}
快速绘制一个点及其名称,并赋予其正确的坐标。
我的问题是,在绘制过程中,我可能会稍后决定缩放整个图片(使用scale
)。这会导致描绘点的点变大。我不想这样,因为我可能会将一张图片缩放到其大小的 2 倍,将另一张图片缩放到其大小的 0.5 倍,这会导致整个文档中的点大小不一致。
xscale
当我使用或yscale
导致圆圈变形时,会出现更大的问题。
有没有办法让我的宏忽略所有其他缩放?如您所见,我尝试输入scale=1
绘图选项,但这没有帮助...
答案1
您可以使用shift only
密钥。摘自手册:
此选项不带任何参数。其效果是取消除平移之外的所有当前变换。这意味着原点将保持原位,但围绕原点的任何旋转或相对于原点的缩放或倾斜将不再有效。
此选项在使用复杂的变换“到达某个位置”但随后希望在此位置绘制一些“正常”的东西的情况下很有用。
以下命令首先将一个坐标节点放置在所需位置并启用缩放功能,然后在该节点周围放置一个圆圈而不启用缩放功能:
\newcommand{\punt}[3]{
\draw #1 coordinate (#2);
\fill[shift only] (#2) circle (0.5pt) node[#3] {$#2$};
}
答案2
以下内容实际上并没有回答实际问题,但确实解决了您的问题。 (而我,就我个人而言,很想知道如何解决实际问题。)
\documentclass{minimal}
\usepackage{tikz}
\newcommand{\punt}[3]{\draw[fill,scale=1]#1 coordinate(#2) node[circle,fill,inner sep=1pt] {} node[#3]{$#2$};}
\begin{document}
\begin{tikzpicture}
\begin{scope}
\punt{(0,0)}{a}{above}
\end{scope}
\begin{scope}[scale=5]
\punt{(0,-1)}{a}{above}
\end{scope}
\begin{scope}[scale=2]
\punt{(0,-2)}{b}{below}
\end{scope}
\end{tikzpicture}
\end{document}
这是有效的,因为缩放不适用于节点的形状,因此通过使用语法绘制圆圈node
,缩放不会应用于圆圈大小。