xspace 在注释前留空格

xspace 在注释前留空格

\xspace我对与命令结合的行为感到困惑。当我用注释符号切断所有空格时,\todo我没想到会留下空格。通常这会按预期工作,参见反例。\xspace%

然而,在我的环境下它不起作用而且我也不知道为什么。

MWE(编辑:添加反例)

\documentclass{scrbook}
\setlength{\parindent}{0pt}

\usepackage{todonotes}
\usepackage{xspace}
% define mtodo WITH xspace
\newcommand{\mtodo}[1]{\todo[fancyline,noline]{#1}\xspace}
% define mmtodo WITHOUT xspace
\newcommand{\mmtodo}[1]{\todo[fancyline,noline]{#1}}
% counterexample
\newcommand{\mylabel}[1]{\label{#1}\xspace}

\begin{document}
  % with xspace (mtodo)
  \mtodo{Margin Note 1}%
  This is an\mtodo{Margin Note 2} example with xspace.\\
  This is an example with xspace.

  % without xspace (mmtodo)
  \mmtodo{Margin Note 1}%
  This is an\mmtodo{Margin Note 2} example without xspace.\\
  This is an example without xspace.

  % without xspace (mmtodo)
  \mylabel{label1}%
  This is a\mylabel{label1} counterexample.\\
  This is a counterexample.      
\end{document}

输出

答案1

的定义\todo位于的末尾todonotes.sty

\newcommand{\todo}[2][]{\@bsphack\@todo[#1]{#2}\@esphack\ignorespaces}%

的用法意味着,如果您希望输出中出现空格,则\@bsphack需要在 之前有一个空格。添加则没有用。\todo\xspace

任何状况之下

\xspace%
X

是一样的\xspace X,因为后面有一个字母,所以会添加一个空格。

所以答案是:

  1. 不要用于\xspace带参数的命令
  2. \todo如果希望在输出中出现空格,请在前面(或以该空格开头的宏)留一个空格
  3. \xspace在任何情况下都不要使用

你可能得到了\xspace来自待办事项占用空间别跟着它。

相关内容