我正在使用 pgfkeys 开发一些 Tikz 命令,我想在新命令中使用我之前开发的命令。这将创建嵌套的 Tikz 和 Tikz 数学环境,如下面给出的 MWE 所示。
在不更改变量名称的情况下,如何\a
在第二次调用中将正确的值传递给\testing
,即 3 而不是 4?我认为在 MWE 中,名称\b
传递给命令,而不是 3。
我问这个问题的原因是我并不想知道命令中用于\testing
更好编码的关键变量。
\documentclass[]{standalone}
\usepackage{tikz}
\usetikzlibrary{math}
\pgfkeys{
/testing/.is family,
/testing,
b/.store in =\b,
a/.store in =\a}
\newcommand{\testing}[1][]{\pgfkeys{/testing, #1}
\tikzmath{
real \a, \b;
print ($Out:$);
print ($a = \a,$);
print ($b = \b |$);
}}
\begin{document}
\begin{tikzpicture}
\tikzmath{\b = 3;}
\path(0,-0.5) -- (6,0.5);
\testing[a = 1, b = 2] %Result: a = 1, b = 2
\testing[a = \b, b = 4] %Result: a = 4, b = 4. Should be: a = 3, b = 4.
\end{tikzpicture}
\end{document}
答案1
TeX 不是编程语言,PGFKeys 和 TikZMath 也不是。
宏不是变量。
如果您使用a = \b
,则宏\b
将存储在\a
而不是其值(即其扩展)中。
如果你想存储\b
扩展,\a
你要么必须定义键
a/.estore in=\a
(这将始终完全扩展密钥的值)
或与
a/.expand once=\b
因此它只扩展\b
一次。