我已经定义了用于绘制点的自定义长度tikzpicture
:
\documentclass{article}
\usepackage{tikz}
\newcommand*{\point}{1.5pt}
\begin{document}
\begin{tikzpicture}
\filldraw (1,1) circle[radius=\point];
\end{tikzpicture}
\end{document}
scale=0.7
但有时在更复杂的绘图中,我会使用全局(可选)将整个图片缩小\begin{tikzpicture}
。
\documentclass{article}
\usepackage{tikz}
\newcommand*{\point}{1.5pt}
\begin{document}
\begin{tikzpicture}[scale=0.7] % Scaled!
\filldraw (1,1) circle[radius=\point];
\end{tikzpicture}
\end{document}
问题是,由于长度不是预先定义的\pgflinewidth
,因此点的半径也会缩小。有没有办法让它不受缩放的影响\pgflinewidth
?
编辑:澄清一下我的目标:我想保持缩放后的圆的半径不变,但中点显然应该缩放。从这个意义上讲,MWE 不是最佳的,因为圆位于原点(已更改)。
答案1
您可以使用选项在本地重置转换矩阵reset cm
(或者shift only
如果您想保留移动部分):
更正:reset cm
甚至将圆心重置为原点,这是错误的。应用shift only
似乎circle[...]
有效。
使用pic
作品进行更一般的绘图。spic
与node
s 一样,默认仅应用移动部分。
\documentclass{article}
\usepackage{tikz}
\newcommand*{\point}{1.5pt}
\begin{document}
\parindent=0pt
Before: \\
\begin{tikzpicture}[scale=0.7] % Scaled!
\draw[help lines] (0,0) grid (3,3);
\filldraw (0,0) circle[radius=\point]
(1,1) circle[radius=\point];
\end{tikzpicture}
Using \verb|circle[shift only ...]|: \\
\begin{tikzpicture}[scale=0.7] % Scaled!
\draw[help lines] (0,0) grid (3,3);
\filldraw (0,0) circle[shift only, radius=\point]
(1,1) circle[shift only, radius=\point];
\end{tikzpicture}
Using \verb|pic|: \\
\tikzset{
dot/.pic={
\filldraw circle[radius=\point];
}
}
\begin{tikzpicture}[scale=0.7] % Scaled!
\draw[help lines] (0,0) grid (3,3);
\draw (0,0) pic {dot}
(1,1) pic {dot};
\end{tikzpicture}
\end{document}
最终的解决方案是扩展tikz
、pgf
以及可能的底层,pgfmath
以便它们都识别某种绝对维度并遵循某种绝对性组合规则。
答案2
一个可能的解决方案是将半径除以比例:
\documentclass{article}
\usepackage{tikz}
\newcommand*{\point}{1.5pt}
\begin{document}
\begin{tikzpicture}
\filldraw circle[radius=\point];
\end{tikzpicture}
\newcommand{\scl}{0.7}
\begin{tikzpicture}[scale=\scl] % Scaled!
\filldraw circle[radius=\point/\scl];
\end{tikzpicture}
\end{document}