“ifthenelse”在 tikz 中造成问题-convexhull

“ifthenelse”在 tikz 中造成问题-convexhull

我正在尝试制作“凸包”代码这个问题适用于 pgf/tikz 3.0 和更早版本(atan 的定义从 2.9 版更改为 3.0 版)。但是,到目前为止我还没有做到这一点。

在序言中我定义了

\newboolean{curr_tikzv}    
\makeatletter
\@ifpackagelater{tikz}{2013/12/01}
 { \setboolean{curr_tikzv}{true}}
 { \setboolean{curr_tikzv}{false}
}
\makeatother

我将 \n1 和 \n2 的关键定义替换为

    \n1 = {\ifthenelse{\boolean{curr_tikzv}}{atan2(\y1,\x1) + 90}{atan2(\x1,\y1) + 90}},

并将其对应更改为 \n2。然而,这会产生错误,声称存在不匹配的“}”。

我做错了什么?我收到的第一条错误消息是

! Argument of \XC@definec@lor has an extra }.

答案1

\ifthenelse不是可扩展,并且不支持 的设置参数\n1。一个简单的\if开关应该可以工作:

\newif\ifCurrTikzV
\makeatletter
\@ifpackagelater{tikz}{2013/12/01}{\CurrTikzVtrue}{\CurrTikzVfalse}
\makeatother

\n1 = {\ifCurrTikzV atan2(\y1,\x1) + 90\else atan2(\x1,\y1) + 90\fi},

除了\ifCurrTikzVfor each之外atan2,还可以定义一个宏:

\makeatletter
\@ifpackagelater{tikz}{2013/12/01}{%
  \def\AtanTwo(#1,#2){atan2({#1},{#2})}%
}{%
  \def\AtanTwo(#1,#2){atan2({#2},{#1})}%
}
\makeatother

\n1 = {\AtanTwo(\y1,\x1) + 90},

相关内容