我正在尝试制作“凸包”代码这个问题适用于 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},
除了\ifCurrTikzV
for 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},