\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}