考虑以下(xpatch
-fu 来自https://tex.stackexchange.com/a/68741/17423)
\documentclass{article}
\usepackage[marginpar]{todo}
\usepackage{xpatch}
\makeatletter
\xpretocmd{\todo}{\@bsphack}{}{}
\xapptocmd{\todo}{\@esphack}{}{}
\makeatother
\begin{document}
Some text %
\todo{this text shouldn't be displayed}
more text
\end{document}
给出(无需我尝试修复)
如您所见,text
和之间的单词间距more
增加了一倍。从宏的使用来看,这完全合理为什么,但这肯定是不可取的行为(至少对于选项而言marginpar
)。
我的修复完全无效,实际上将所有内容都插入\todo
到了输入流中。:(
我怎样才能获得我需要的行为?
与上面的xpatch
-fu
答案1
在你的序言中添加以下几行:
\makeatletter
\xapptocmd{\@displaytodo}{\ignorespaces}{}{}
\xapptocmd{\@donetodo}{\ignorespaces}{}{}
\xapptocmd{\@@displaynothing}{\ignorespaces}{}{}
\makeatother
你就会实现你的愿望。
该宏\todo
不能直接修补,因此我们修补它调用的所有宏。
梅威瑟:
\documentclass{article}
\usepackage[marginpar]{todo}
\usepackage{xpatch}
\makeatletter
\xapptocmd{\@displaytodo}{\ignorespaces}{}{}
\xapptocmd{\@donetodo}{\ignorespaces}{}{}
\xapptocmd{\@@displaynothing}{\ignorespaces}{}{}
\makeatother
\begin{document}
Some text %
\todo{this text shouldn't be displayed}
more text
\end{document}
输出: