意外的 TikZ ifthenelse 行为

意外的 TikZ ifthenelse 行为

Z 用户指南(版本 3.18b,第 1042 页)指出:

ifthenelse(x,y,z)如果 x 的计算结果为某个非零值,则返回 y,否则返回 z。

看起来两个都 y z首次评估然后返回,这对我来说是一个惊喜;TeX\if不会评估没用过选项——那么为什么 TiZ 费心去评估没用过选项?我在徒劳地试图避免除以零时发现了这一点:

\documentclass{article}

\usepackage{tikz}

\begin{document}

\pgfmathsetmacro{\foo}{0}

\pgfmathsetmacro{\foobar}{ifthenelse(equal(\foo,0),0,1)}\foobar

%% Both return the error: "You've asked me to divide `1' by `0'..."
% Uncomment the following to see the problem:
%\pgfmathsetmacro{\foobar}{ifthenelse(equal(\foo,0),0,1/\foo)}\foobar
%\pgfmathsetmacro{\foobar}{ifthenelse(greater(\foo,0),1/\foo,0)}\foobar

\end{document}

有许多非钛Z 方法(目前我已经确定了\ifdim\foo pt=0...\else...\fi)。只是想知道什么是更 Ti可能是 Z 惯用方法。

答案1

别戳正在跳舞的熊。

\documentclass{article}

\usepackage{tikz}

\begin{document}

\pgfmathsetmacro{\foo}{0}

\pgfmathsetmacro{\foobar}{ifthenelse(equal(\foo,0),0,1/ifthenelse(equal(\foo,0),1,\foo))}\foobar

\end{document}

相关内容