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

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

\addvspace可用于创建可以堆叠在一起而不会产生不必要的填充的命令。这对于创建以 开头和结尾的命令非常有用,\addvspace这样它们就可以彼此相邻放置,而不会占用所需的两倍填充空间。有人知道用于水平空间的类似命令吗?我有许多形式为

\newcommand{\fooAnd}{\hspace{1ex}\texttt{and}\hspace{1ex}}

我想将它们串在一起,但我希望它们之间只相隔 1ex。(而且我想在中间使用\hspace它们中没有的命令,因此仅将空间减少到 0.5ex 并不是解决方案。)有什么想法吗?

答案1

我不知道\addvspace水平间距的版本,但在您的情况下,您可以\unskip在宏的开头添加一个,以删除\hspace由正常空格引起的任何先前或其他跳过:

\newcommand{\fooAnd}{\unskip\hspace{1ex}\texttt{and}\hspace{1ex}}

例子:

\documentclass{article}

\newcommand{\oldfooAnd}{\hspace{1ex}\texttt{and}\hspace{1ex}}
\newcommand{\fooAnd}{\unskip\hspace{1ex}\texttt{and}\hspace{1ex}}

\begin{document}

Text \oldfooAnd\oldfooAnd\oldfooAnd text

Text \fooAnd\fooAnd\fooAnd text

\end{document}

比较结果:

结果

答案2

这是改编自\addvspace

\documentclass[a4paper]{article}

\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{%
  \ifhmode
    \ifdim \lastskip =\z@
      \hskip #1\relax
    \else
      \@tempskipb#1\relax
      \@xaddhskip
    \fi
  \else
    \errmessage{\noexpand\addhspace not in horizontal mode}%
  \fi}
\makeatother

\begin{document}

\addhspace{2cm} % this issues an error message!

x\addhspace{1cm}\addhspace{2cm}x

x\addhspace{2cm}x
\end{document}

相关内容