忽略 Tikz 中的“全局”缩放?

忽略 Tikz 中的“全局”缩放?

我正在使用几个宏来快速绘制图形中的点(我必须画很多)。例如,我使用:

\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,缩放不会应用于圆圈大小。

相关内容