我正在尝试使用这个答案提取没有点。但为什么下面的方法不起作用?第一个\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
\the
p12t12\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}