Estou usando o todonotes
pacote para adicionar pequenas notas de margem ao meu texto, porém escrevendo
Hello\todo{test} World!
remove o espaço entre palavras como já foi apontado emessa questão. Então eu tentei
\pretocmd{\todo}{\@bsphack}{}{}
\apptocmd{\todo}{\@esphack}{}{}
e isso adiciona o espaço entre palavras, mas simplesmente gera todos os parâmetros em vez de passá-los para \todo
.
MWE completo:
\documentclass{article}
\usepackage{etoolbox}
\usepackage{todonotes}
\makeatletter
\pretocmd{\todo}{\@bsphack}{}{}
\apptocmd{\todo}{\@esphack}{}{}
\makeatother
\begin{document}
Hello\todo{test} World!
\end{document}
Responder1
Como \todo
é definido para \newcommand
ter um argumento opcional, a macro a ser corrigida é realmente
\\todo
(com uma barra invertida no nome), por isso é difícil especificá-lo: você pode corrigi-lo usando \csname
ou com o xpatch
pacote:
\documentclass{article}
\usepackage{todonotes}
\usepackage{xpatch}
\makeatletter
\xpretocmd{\todo}{\@bsphack}{}{}
\xapptocmd{\todo}{\@esphack}{}{}
\makeatother
\begin{document}
Hello\todo{test} World!
\end{document}
Com etoolbox
você teria que escrever
\expandafter\pretocmd\csname\string\todo\endcsname{\@bsphack}{}{}
\expandafter\apptocmd\csname\string\todo\endcsname{\@esphack}{}{}
Responder2
Você pode conseguir isso mais facilmente. Como a definição de \todo
simplesmente é
\newcommand{\todo}[2][]{\@todo[#1]{#2}}%
você pode simplesmente redefini-lo (de uma forma um pouco mais segura que a definição original, veja o comentário de Bruno Le Floch a esta resposta (obrigado!)):
\documentclass{article}
\usepackage{todonotes}
\makeatletter
\renewcommand{\todo}[2][]{\@bsphack\@todo[{#1}]{#2}\@esphack}%
\makeatother
\begin{document}
Hello\todo{test} World!
\end{document}