TikZ:使自定义长度与缩放无关

TikZ:使自定义长度与缩放无关

我已经定义了用于绘制点的自定义长度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作品进行更一般的绘图。spicnodes 一样,默认仅应用移动部分。

\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}

在此处输入图片描述

最终的解决方案是扩展tikzpgf以及可能的底层,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}

相关内容