在 xfp 包中:三元运算符 x ? y : z

在 xfp 包中:三元运算符 x ? y : z

第 1/2 页xfp 封装我们将其视为ternary operator x ? y : z有效的布尔表达式。它值得作者至少给出它的定义。在 CI 中,我们被告知:

variable = Expression1 ? Expression2 : Expression3相当于 if(Expression1) { variable = Expression2;} else {variable = Expression3;}.

为了检查上述定义的有效性,我编写了下面的代码:

\documentclass{article}
\usepackage{xfp}

\begin{document}
\edef\x{6.25}
\edef\y{-1}
\edef\z {{\x > \y} ? {\x} :{ \y}}
$(x>y)?x:y=\fpeval{\z}$
\end{document}

但出现错误:

! File ended while scanning use of \__fp_parse_continue:NwN.

你知道如何修复它吗?

答案1

\edef首先你不应该使用,除非你不断改变\x和的含义\y

但这不是错误的原因;fp 表达式中永远不应该使用括号。(<fp-expression>)如果您担心大表达式中某些部分的解释,您可以自由使用。

\documentclass{article}
\usepackage{xfp}

\begin{document}

\def\x{6.25}
\def\y{-1}
\def\z {\x > \y ? \x : \y}

$(x>y)?x:y=\fpeval{\z}$

\def\y{6.25}
\def\z {\x >= \y ? \x+1 : \y-1}

$(x>=y)?x:y=\fpeval{\z}$

\end{document}

以下几段代码有何区别?

% with \edef
\edef\x{6.25}
\edef\y{-1}
\edef\z {\x > \y ? \x : \y}

% with \def
\def\x{6.25}
\def\y{-1}
\def\z {\x > \y ? \x : \y}

\x和的定义\y不受影响。在第一种情况下, 的定义\z将是

6.25 > -1 ? 6.25 : -1

在第二种情况下

\x > \y ? \x : \y

\x并且和的值将被替换为运行时的当前值。这很可能就是使用和\y的目的。\x\y

另一方面,我已经建议你使用“命名变量”的方法,这样可以避免使用短命令名的怪癖。当你第一次使用\c变量并想在论文中引用某位土耳其作者时,你就会明白我的意思。

相关内容