我正在写一个较大的文档,我使用该todonotes
包来添加提醒。出于某种原因,当我添加注释时,注释插入点后的空格会被删除。以下是最简单的示例:
\documentclass[12pt,a4paper,oneside]{book}
\usepackage[textsize=scriptsize,textwidth=2cm,shadow]{todonotes}
\begin{document}
Lorem ipsum dolor sit amet,\todo{stolen space} consectetuer adipiscing elit.
\end{document}
以下是我得到的结果:
缺失部分被放大了:
我认为这可能只是注释处于活动状态时遇到的现象,这是可以接受的,因为最终文档将没有任何注释,所以我尝试通过 禁用它们\usepackage[disable,textsize=scriptsize,textwidth=2cm,shadow]{todonotes}
。现在注释消失了,但空间仍然缺失。这很糟糕。
是我做错了什么,还是这个包有缺陷todonotes
?
另外,我注意到当我{}
在注释末尾添加 ( \todo{correct? spacing}{}
) 时,缺失的空格会神奇地重新出现。但是,我不确定这是否是一个好的解决方案。
答案1
我最好的猜测是,这是一个特征和之间todonotes
应该留一个空格。我测试过:这给出了正确的间距。,
\todo
答案2
我简短地查看了源代码,todonotes
发现启用和禁用版本\ignorespaces
末尾都有一个,所以是的,它是一个特征不是一个漏洞。显然这是软件包作者的偏好。
手册中没有提到任何有关空格的内容,也没有禁用 的选项\ignorespaces
。因此,您需要自己手动添加空格(只要您不使用自己的副本todonotes.sty
并\ignorespaces
删除两者即可)。
保留空间的可能方法(其他答案中已经提到过一些):
lorem ipsum \todo{...}dolor sit amet
lorem ipsum \todo{...} dolor sit amet
lorem ipsum\todo{...}\ dolor sit amet
lorem ipsum{\todo{...}} dolor sit amet
答案3
您还可以按照以下说明进行环绕\@bsphack
...\@esphack
\todo
修补命令以删除周围的空格以及解释如何正确修补命令的答案:)
具体来说,添加
\usepackage{xpatch}
\makeatletter
\xpretocmd{\todo}{\@bsphack}{}{}
\xapptocmd{\todo}{\@esphack}{}{}
\makeatother
对前导码进行非侵入式转换,转换\todo
为不占用任何空间的命令。
答案4
这可能是在诸如空格被“删除”之类的命令之后观察到的结果 \LaTeX
。因此,即使使用禁用选项,该命令仍然在代码中,并且显然以某种方式被解释。
解决方案可能是添加xspace
包并使用
\newcommand{\mytodo}[1]{\todo{#1}\xspace}
(未经测试)