![\path 中的无单位比率 let](https://linux22.com/image/237879/%5Cpath%20%E4%B8%AD%E7%9A%84%E6%97%A0%E5%8D%95%E4%BD%8D%E6%AF%94%E7%8E%87%20let.png)
我想计算\path let
构造中距离的纯比率;例如,在文档片段中
\path let \p1 = (1cm, 2cm), \n1 = {\y1 / \x1} in ...
我希望\n1
是数字 2,而不是字符串2pt
,这是 TikZ 实际写入的,因为计算涉及一个单位某处,即使它们相互抵消。一个糟糕的解决方案是\expandafter\strip@pt\n1
到处写入,但有没有办法向 PGF 数学引擎发出信号,让\ifpgfmathunitsdeclared
(控制这个决定并设置在 内部的某个地方\pgfmathparse
)让\iffalse
?我想象一个像这样的构造
\path let \p1 = (1cm, 2cm), \n1 = {nounits(\y1 / \x1)} in ...
或者可以放在数学表达式本身内部的其他东西。
答案1
再次浏览文档后,我发现了\pgfmathpostparse
在之后调用的函数\pgfmathparse
。它是应该进行修改\pgfmathresult
,但没有理由你不能这样做:
\documentclass{article}
\usepackage{tikz} \usetikzlibrary{calc}
\begin{document}
\def\pgfmathpostparse{\global\pgfmathunitsdeclaredfalse}
\tikz \path let \n1 = {1pt} in node {\n1};
\end{document}
它打印“1.0”;注释掉该\def
行会打印“1.0pt”,所以这确实是我想要的。这\global
是必要的,因为显然是\pgfmathpostparse
在组内运行的。抱歉,我回答了自己的问题。