newcommand 后的额外空格

newcommand 后的额外空格

我试图编写一个宏来将名称加粗。我使用了:

\newcommand{\authorship}[2]{\textbf{#1 #2}}

然后在文本中使用

\authorship{Dave Bridges}

不幸的是,当通过 pdflatex 运行时,我在名称后面得到了一个额外的空格。例如,

\authorship{Bridges, D.}, M. E. Fraser and G. B. G. Moorhead.  2005.  Cyclic Nucleotide Binding Domains in the Arabidopsis thaliana and Oryza satviva Genomes.  BMC Bioinformatics 6(1): 6.

在 D 后的句号和逗号之间添加了一个额外的空格。如何删除该额外的空格?

答案1

尽管您指定命令\authorship采用两个参数,但实际上在调用期间只为其提供了一个参数,例如:

\authorship{Dave Bridges}

因此,#2以下是令牌,在本例中为 a),但 TeX 仍然会打印#1,后跟一个空格,后跟#2(a大胆的逗号)。使用这样的宏

\newcommand{\authorship}[1]{\textbf{#1}}%

或者甚至只是

\let\authorship\textbf

就足够了。当然,如果你想要突出(大胆的) 名称的某些部分,则需要做其他事情,例如保留原始定义,但使用以下形式:

\authorship{Bridges}{Dave}

答案2

尽管 Werner 已经发现了这个问题并提供了解决方案,但您也可以查看xspaceCTAN 上提供的软件包。在定义可能后跟某种标点符号的命令时,该软件包特别有用。

xspace但是,根据提供的示例代码,无法解决这个问题,因为正如@Andrey Vihrov 指出的那样,逗号仍然会被解释为第二个参数。

相关内容