关于 xfp 封装:比较

关于 xfp 封装:比较

xfp 封装我们读:

  • 浮点表达式可能包括:比较运算符:x < y、x <= y、x >? y、x != y 等。但是他们没有给出示例。下面我有一个示例,我用它来\fpeval{\x<\y }在条件命令中做出决定:

    \documentclass{article}
    \usepackage{xfp, ifthen}
    \begin{document}
    \edef\x{6.25}
    \edef\y{-2}
    \noindent $x=\fpeval{\x}$.\\
     $y=\fpeval{\y}$.\\
    \ifthenelse{\fpeval{\x<\y }}
     {$x\lt y$}
     {$x\ge y$}
     \end{document}
    

但出现错误:

! \ifnum 中缺少 = 插入。 \relax l.10 \ifthenelse{\fpeval{\x<\y }}

你知道如何修复它吗?

答案1

第一个参数\ifthenelse必须包含一个测试(默认情况下是整数相等性的测试)。

如果实际上小于,则可以执行\ifthenelse{\fpeval{\x<\y}=1}{...}{...}此操作以返回 true 。\x\y

例子:

\documentclass{article}
\usepackage{xfp,ifthen}

\begin{document}

\def\x{6.25}
\def\y{-2}

\ifthenelse{\fpeval{\x<\y}=1}{TRUE}{FALSE} (should be F)

\ifthenelse{\fpeval{\y<\x}=1}{TRUE}{FALSE} (should be T)

\end{document}

在此处输入图片描述

使用我已经建议的更灵活(并且完全可扩展)的代码

\documentclass{article}
\usepackage{xfp,xparse}

\usepackage{xparse}

\ExplSyntaxOn
\NewExpandableDocumentCommand{\xifthenelse}{mmm}
 {
  \bool_if:nTF { #1 } { #2 } { #3 }
 }

\cs_new_eq:NN \numtest     \int_compare_p:n
\cs_new_eq:NN \oddtest     \int_if_odd_p:n
\cs_new_eq:NN \fptest      \fp_compare_p:n
\cs_new_eq:NN \dimtest     \dim_compare_p:n
\cs_new_eq:NN \deftest     \cs_if_exist_p:N
\cs_new_eq:NN \namedeftest \cs_if_exist_p:c
\cs_new_eq:NN \eqdeftest   \token_if_eq_meaning_p:NN
\cs_new_eq:NN \streqtest   \str_if_eq_p:ee
\cs_new_eq:NN \emptytest   \tl_if_blank_p:n
\prg_new_conditional:Nnn \xxifthen_legacy_conditional:n { p,T,F,TF }
 {
  \use:c { if#1 } \prg_return_true: \else: \prg_return_false: \fi:
 }
\cs_new_eq:NN \boolean \xxifthen_legacy_conditional_p:n
\ExplSyntaxOff

\begin{document}

\def\x{6.25}
\def\y{-2}

\xifthenelse{\fptest{\x<\y}}{TRUE}{FALSE} (should be F)

\xifthenelse{\fptest{\y<\x}}{TRUE}{FALSE} (should be T)

\end{document}

相关内容