我尝试在 中使用逻辑函数,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
可以防止在求值#2
by时使用除数字以外的其他内容\pgfmathparse
(示例代码中就是这种情况)。正如 Bruno Le Floch 在评论中指出的那样,这会导致分配给不起作用的nopt
维度。\pgfmath@x
我必须承认,这不是我根据文档所期望的行为。因此,至少应该在文档中指定它,或者应该修改宏以处理此类字符串情况。