忽略空/可选命令参数之间的空格

忽略空/可选命令参数之间的空格

(这可能是重复的,但我在一堆类似的问题中找不到答案......)

假设我们有以下命令:

% <month> <year> <month> <year>
\newcommand{\timeperiod}[4] {%
#1 #2 -- #3 #4%
}

只要提供了所有参数,一切就可以正常工作。例如,如果省略第二个月份参数(#3),则破折号和结束年份之间会出现一个额外的空格:

June 2000 – July 2001
June 2000 –  2001

我该如何隐藏多余的空格?或者更好的是,我该如何让 LaTeX 忽略空命令参数之间的任何空格?

答案1

让我们看看发生了什么:

\timeperiod{June}{2000}{July}{2001}

变成

June•2000•--•July•2001

(我用它来使空间更加明显)。使用

\timeperiod{June}{2000}{}{2001}

你得到

June•2000•--••2001

实际上,只有当 TeX 读取输入并将其转换为标记时,连续空格才会减少为一个;定义文本已被标记化,因此保留了这两个空格。您可以通过以下方式避免使用双空格:

\newcommand{\timeperiod}[4]{%
  #1 #2 -- #3\unskip\space#4%
}

如果#3为空,则将删除和(空)参数\unskip之间的空格。如果不为空,则不执行任何操作。--#3\unskip

答案2

使用

\newcommand\timeperiod[4] {#1 #2 -- \ifx\relax#3\relax\else#3~\fi#4}


答案3

您还可以使用xspace包(在命令后插入空格:{}, vs \ , vs \space):

\usepackage{xspace}

% <month> <year> <month> <year>
\newcommand{\timeperiod}[4] {%
#1\xspace#2\xspace--\xspace#3\xspace#4%
}

但别忘了xspace 的缺点

相关内容