在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}