可能重复:
水平间距:删除双重 \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
抱歉,我复制了您的作品!