Tikz 定义 /tikz/cs/x[y] 的长度

Tikz 定义 /tikz/cs/x[y] 的长度

我需要一个长度为 的长度/tikz/cs/x[y]。可以用这样的技巧来实现:

\documentclass{article}
\usepackage{tikz}

\newlength{\scaledx}
\newlength{\scaledy}

\begin{document}
\begin{tikzpicture}[
x=30pt,
y=60pt,
]

\makeatletter
\pgfpointxy{1}{1}
\setlength{\scaledx}{\pgf@x};
\setlength{\scaledy}{\pgf@y};
\makeatother

\node[draw] at (0,0) { \the\scaledx };
\node[draw] at (1,1) { \the\scaledy };
\end{tikzpicture}

\end{document}

但是,在我需要图片的地方,\makeatletter有些东西被破坏了。此外,这种方法对于这项任务来说似乎有点不合时宜。

获取长度的正确方法是什么/tikz/cs/x[y]

答案1

你不能只在前言中定义一个宏来设置\scaledx\scaledy,并且需要用包围起来\makeatletter....\makeatother。稍后在文档中需要它们时调用该宏。这样就tikzpicture不会看到 catcode 发生变化。

更详细地说,是这样的:

\documentclass{article}
\usepackage{tikz}

\newlength{\scaledx}
\newlength{\scaledy}

\makeatletter
\newcommand\SetScales{%
  \pgfpointxy{1}{1}
  \setlength{\scaledx}{\pgf@x};
  \setlength{\scaledy}{\pgf@y};
}
\makeatother

\begin{document}
  \begin{tikzpicture}[x=30pt, y=60pt]\SetScales
    \node[draw] at (0,0) { \the\scaledx};
    \node[draw] at (1,1) { \the\scaledy };
  \end{tikzpicture}
\end{document}

答案2

您还可以使用

\documentclass{article}
\usepackage{tikz}

\newlength{\scaledx}
\newlength{\scaledy}
\newcommand\SetScales{%
  \pgfextractx{\scaledx}{\pgfpointxy{1}{0}}%
  \pgfextracty{\scaledy}{\pgfpointxy{0}{1}}%
}

\begin{document}
\begin{tikzpicture}[
    x=30pt,
    y=60pt,
  ]
  \SetScales
  \node[draw] at (0,0) { \the\scaledx };
  \node[draw] at (1,1) { \the\scaledy };
\end{tikzpicture}
\end{document}

或者

\documentclass{article}
\usepackage{tikz}

\newlength{\scaledx}
\newlength{\scaledy}
\newcommand\SetScales{%
  \pgfpointxy{1}{1}%
  \pgfextractx{\scaledx}{}%
  \pgfextracty{\scaledy}{}%
}

\begin{document}
\begin{tikzpicture}[
    x=30pt,
    y=60pt,
  ]
  \SetScales
  \node[draw] at (0,0) { \the\scaledx };
  \node[draw] at (1,1) { \the\scaledy };
\end{tikzpicture}
\end{document}

相关内容