删除二元运算符一侧的空格

删除二元运算符一侧的空格

后续行动这个答案,我想创建一个\num基于的命令,使二元运算符左侧的空格无效,并保留其右侧的空格。

换句话说,我需要保留减号,在第一行下面的例子,与页边距对齐,同时在它和数字之间留有空白,3就像第二行减号周围的空白一样。

在此处输入图片描述

\documentclass{article}

\usepackage{siunitx}
\usepackage[showframe]{geometry}

\ExplSyntaxOn

\NewExpandableDocumentCommand{\snum}{O{}m}
{
    \mathbin
    {
        \fp_compare:nTF { #2 >= 0 }
        { + }
        { - }
    }
    \num[#1]{ \fp_eval:n { abs(#2) } }
}

\ExplSyntaxOff

\parindent=0pt

\begin{document}
    \def\numb{-3}
    
    $\snum{\numb}$\\
    ${}\snum{\numb}$
\end{document}

答案1

\mynum您可能对该答案中定义的宏感兴趣。

在此处输入图片描述

\documentclass{article}
\usepackage{showframe} % draw framelines around text block
\setlength\parindent{0pt}
\usepackage{siunitx} % for '\num' macro
\usepackage{amsmath} % for '\ensuremath' macro

\newcommand\mynum[1]{\ensuremath{\mskip-\medmuskip{}\num[retain-explicit-plus]{#1}}}

\begin{document}
\obeylines % just for this example
\num{-3}
\num[retain-explicit-plus]{+8}
$\mskip-\medmuskip{}-3$
\mynum{-3}
\mynum{+8}
\end{document}

答案2

在此处输入图片描述

mathbin 有\medmuskip两边,因此您要么想要一个左侧带有 -\medmuskip 的 mathbin,要么想要一个右侧带有 \medmuskip 的 \mathord。我在这里选择前者。

\documentclass{article}

\usepackage{siunitx}
\usepackage[showframe]{geometry}

\ExplSyntaxOn

\NewExpandableDocumentCommand{\snum}{O{}m}
{
    \mathbin
    {
        \fp_compare:nTF { #2 >= 0 }
        { + }
        { - }
    }
    \num[#1]{ \fp_eval:n { abs(#2) } }
}

\ExplSyntaxOff

\parindent=0pt

\begin{document}
    \def\numb{-3}
    
    $\snum{\numb}$\\
    ${}\snum{\numb}$\\
    ${}\mskip-\medmuskip\snum{\numb}$
\end{document}

相关内容