将参数传递给 \ifnum

将参数传递给 \ifnum

\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

如果您使用pgftikz绘制轴(为什么不呢?),您可以用它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}

相关内容