\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
,因为后面有一个字母,所以会添加一个空格。
所以答案是:
- 不要用于
\xspace
带参数的命令 \todo
如果希望在输出中出现空格,请在前面(或以该空格开头的宏)留一个空格\xspace
在任何情况下都不要使用
你可能得到了\xspace
来自待办事项占用空间别跟着它。