假设我们经常需要在数学公式中添加或删除空格,并允许根据需要自动拉伸和收缩。有两个命令就可以了(归功于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
}