\ifnum
如果有两个连续的数字,则运行正常。但是,当涉及到计算时,我得到了一堆! Missing = inserted for \ifnum.
错误。有什么办法可以解决这个问题吗?
\newcommand{\axes}[1]{
\ifnum\ifnum#1>180 1\else\ifnum#1>-180 0\else1\fi\fi =1
blah;
\fi}
\axes{200}; % fine
\def\anga{20.5};
\axes{180+\anga}; % not fine
答案1
您不能在 TeX 基元中使用算术表达式。但是,由于现代 TeX 都支持 eTeX 扩展,因此您可以使用它\numexpr
来进行计算:
\newcommand\axes[1]{%
\ifnum\ifnum\numexpr#1\relax>180 1\else\ifnum\numexpr#1\relax>-180 0\else1\fi\fi =1
blah;
\fi}
\axes{200}; % fine
\def\anga{20}
\axes{180+\anga}; % fine
如果您使用pgf
或tikz
绘制轴(为什么不呢?),您可以用它pgfmath
进行长度算术。
\documentclass{article}
\usepackage{tikz} % or pgf
\begin{document}
\newcommand\axes[1]{%
\pgfmathparse{
ifthenelse(abs(#1) > 180, "out", "in")}%
\pgfmathresult
}
\axes{200.3}; % out
\def\anga{-20.4}
\axes{180+\anga}; % in
\axes{-5.5}; % out
\end{document}
答案2
对于浮点,有使用 的方法\dimexpr
,正如 tohecz 所说。但是,对于真正通用的解决方案,我会使用 LaTeX3 FPU
\documentclass{article}
\usepackage{expl3}
\ExplSyntaxOn
\cs_new:Npn \axes #1
{
\fp_compare:nNnT { abs (#1) } > { 180 }
{ blah ; }
}
\ExplSyntaxOff
\begin{document}
\axes{200}; % fine
\def\anga{20.5}
\axes{180+\anga}; % fine
\end{document}