使用 `\pgfgetlastxy`

使用 `\pgfgetlastxy`

我正在尝试使用这个答案提取没有。但为什么下面的方法不起作用?第一个\JustNumber方法按预期工作,但第二个方法却不行,尽管\show\X给出了> \X=macro:->0.0pt.

\documentclass{article}
\usepackage{tikz}
\def\JustNumber#1pt{#1}
\begin{document}
    \JustNumber0.0pt.
    \begin{tikzpicture}
        \path (0,0);
        \pgfgetlastxy{\X}{\Y}
        \show\X
        \xdef\X{\expandafter\JustNumber\X}
    \end{tikzpicture}
\end{document}

我为什么要这样做?我想用虚线网格填充两点之间的矩形。由于图案在精确定位时似乎会导致各种问题,所以我想到提取坐标(不带pt)并将它们输入到\foreach

答案1

它不起作用的原因是:

\JustNumber根据您对参数 delimiter的定义,pt在从 .tex-input-file 读取时对其进行标记。
因此,您将获得两个类别 11(字母)的显式字符标记,即。 但通过 传递的字符标记似乎来自,而这又提供了类别 12(其他)的显式字符标记,即。(例外:由 类别 10(空格)的 are 传递的空格。) 因此 TeX 找不到匹配的分隔符。p11t11
\pgfgetlastxy\thep12t12\the

通过您的定义,确保形成参数分隔符的明确字符标记属于类别 12(其他):

\documentclass{article}
\usepackage{tikz}

% \string delivers explicit character tokens with the same catcode-régime
% as \the, so let's stringify the delimiter:
\csname @ifdefinable\endcsname\JustNumber{%
  \edef\JustNumber{##1\string p\string t}%
  \expandafter\def\expandafter\JustNumber\JustNumber{#1}%
}%

\begin{document}
    \begin{tikzpicture}
        \path (0,0);
        \pgfgetlastxy{\X}{\Y}
        \show\X
        \xdef\X{\expandafter\JustNumber\X}
        \show\X
    \end{tikzpicture}
\end{document}

相关内容