使用 `\pgfmathsetmacro` 和 `ifthenelse` 运算符时出现“缺失数字”错误

使用 `\pgfmathsetmacro` 和 `ifthenelse` 运算符时出现“缺失数字”错误

我尝试在 中使用逻辑函数,pgfmath但出现意外错误。这似乎与 的使用有关\pgfmathsetmacro,根据我的理解, 应该等同于\pgfmathparse{whatever}\let\macro=\pgfmathresult。但是,以下手册中的示例与 一起使用\pgfmathparse并给出错误

! Missing number, treated as zero.
<to be read again> 
                   n
l.52 ...etmacro\macro{ifthenelse(5==4,"yes","no")}
                                                   \macro

与以下对象一起使用时\pgfmathsetmacro

\pgfmathparse         {ifthenelse(5==4,"yes","no")}% Works
\pgfmathsetmacro\macro{ifthenelse(5==4,"yes","no")}% Fails

我难道不应该能够做到这一点吗?

答案1

\pgfmathsetmacro这是文件中的定义pgfmathcalc.code.tex

\def\pgfmathsetmacro#1#2{%
  \begingroup%
    \pgfmathsetlength\pgfmath@x{#2}%
    \edef#1{\pgfmath@tonumber{\pgfmath@x}}%
    \pgfmath@smuggleone{#1}%
  \endgroup%
}

使用\pgfmathsetlength可以防止在求值#2by时使用除数字以外的其他内容\pgfmathparse(示例代码中就是这种情况)。正如 Bruno Le Floch 在评论中指出的那样,这会导致分配给不起作用的nopt维度。\pgfmath@x

我必须承认,这不是我根据文档所期望的行为。因此,至少应该在文档中指定它,或者应该修改宏以处理此类字符串情况。

相关内容