嵌套 Tikz 环境中的键值冲突

嵌套 Tikz 环境中的键值冲突

我正在使用 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一次。

相关内容