(这可能是重复的,但我在一堆类似的问题中找不到答案......)
假设我们有以下命令:
% <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 的缺点