是否可以在命令中创建最小间距断言?

是否可以在命令中创建最小间距断言?

可能重复:
水平间距:删除双重 \hspace?

我试图使我的文档尽可能抽象,因为我可能会定期更改我使用的术语的表示。为此,我创建了许多类似于以下内容的命令:

\newcommand{\gtDepth}{\texttt{depth}}
\newcommand{\gnInt}{\textit{int}}
\newcommand{\gtSemi}{\texttt{;}}

然后我可以使用这些命令来描述一个简单的语法规则:

\gtDepth \gnInt \gtSemi

当然,问题是这些术语之间没有间距。我想写类似以下内容的内容:

\newcommand{\gspc}{\minspace{3mm}}
\newcommand{\gtDepth}{\gspc\texttt{depth}\gspc}
\newcommand{\gnInt}{\gspc\textit{int}\gspc}
\newcommand{\gtSemi}{\gspc\texttt{;}\gspc}

具体来说,我希望这个“minspace”结构仅在它尚未与那么多空间相邻时才创建空间。例如,我希望

a\minspace{3mm}b

相当于

a\minspace{3mm}\minspace{2mm}b

因为 3mm 的空间更大。这似乎\mathop以一种非常粗糙的方式提供了这种行为:内容在\mathop左侧和右侧填充,但\mathop彼此相邻的两个不会产生两倍的空间。

有什么想法吗?

谢谢!

答案1

刚刚发现另一个可以解决该问题的 stackexchange 帖子。 耻辱! 就在这儿:水平间距:删除双重 \hspace?

具体来说,我正在寻找以下内容。我根据原始帖子对其进行了修改,以删除水平模式断言;这使其在我这里可以在数学模式下工作。

\makeatletter
\def\@xaddhskip{%
\ifdim\lastskip<\@tempskipb
    \unskip
    \hskip\@tempskipb
\else
    \ifdim\@tempskipb<\z@
    \ifdim\lastskip<\z@
    \else
        \advance\@tempskipb\lastskip
        \unskip
        \hskip \@tempskipb
    \fi
    \fi
\fi}
\def\addhspace#1{%
    \ifdim \lastskip =\z@
    \hskip #1\relax
    \else
    \@tempskipb#1\relax
    \@xaddhskip
    \fi}
\makeatother

抱歉,我复制了您的作品!

相关内容