第 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
变量并想在论文中引用某位土耳其作者时,你就会明白我的意思。