如何在数学模式下以 50% 的拉伸和收缩添加或删除空格?

如何在数学模式下以 50% 的拉伸和收缩添加或删除空格?

假设我们经常需要在数学公式中添加或删除空格,并允许根据需要自动拉伸和收缩。有两个命令就可以了(归功于https://tex.stackexchange.com/a/657446):

\documentclass{standalone}
% Adds space and allows for some flexibility:
\newcommand{\flexAddMSpace}[1]{%%% 50 per cent of the argument after plus and minus. The argument may be a nonnegative integer or a nonnegative floating-point number.
  \mskip#1 plus.5\muexpr#1\relax minus.5\muexpr#1\relax\relax
}
% Removes space and allows for some flexibility:
\newcommand{\flexRemoveMSpace}[1]{%%% 50 per cent of argument after plus and minus. The argument may be a nonnegative integer or a nonnegative floating-point number.
  \mskip-#1 plus.5\muexpr#1\relax minus.5\muexpr#1\relax\relax
}
% Adds space (if the argument is positive) or removes space (if the argument is negative) and allows for some stretching and shrinking:
\newcommand{\flexMSpace}[1]{%%% 50 per cent of the modulus of the argument after plus and minus. The argument may be any integer or floating-point number.
  \mskip#1
  plus.5\muexpr\ifnum#1<0 -#1\else #1\fi\relax
  minus.5\muexpr\ifnum#1<0 -#1\else #1\fi\relax
  \relax
}
\begin{document}
\(a\flexAddMSpace{1.2mu}b\)
\(a\flexRemoveMSpace{1.2mu}b\)
%\(a\flexMSpace{1.2mu}b\)%% this one fails
%\(a\flexMSpace{-1.2mu}b\)%% this one fails, too
\end{document}

输出

但是,我希望有一个命令用于“如果参数为正则添加空格,如果参数为负则删除空格,并根据需要拉伸或收缩一点”,而不是两个单独的命令。但是,我自己计算模数的尝试失败了(见\flexMSpace上文):我得到

缺少 = 插入 \ifnum。`

我做错了什么?如何编写一个命令,以 \mskip(argument) 加 |argument|/2 减 |argument|/2 的方式在数学模式下插入一个弹性空格?mu如果有帮助的话,我们可以同意始终将其作为一个单位。

答案1

诸如 的测试\ifnum1.2mu<0将失败。您可以使用\ifdim,但您需要将 mu 单位更改为 pt (您只想查看给定的长度是正数还是负数),这可以通过 来实现\mutoglue

\newcommand{\flexMSpace}[1]{%
  \mskip#1
  plus \muexpr(\ifdim\mutoglue\muexpr#1<0pt -\fi#1)/2\relax
  minus \muexpr(\ifdim\mutoglue\muexpr#1<0pt -\fi#1)/2\relax
  \relax
}

相关内容