Estoy usando el todonotes
paquete para agregar pequeñas notas al margen de mi texto, sin embargo, al escribir
Hello\todo{test} World!
elimina el espacio entre palabras como ya se señala enesta pregunta. Así que lo intenté
\pretocmd{\todo}{\@bsphack}{}{}
\apptocmd{\todo}{\@esphack}{}{}
y esto agrega el espacio entre palabras pero simplemente genera todos los parámetros en lugar de pasarlos a \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}
Respuesta1
Dado que \todo
se define con \newcommand
tener un argumento opcional, la macro a parchear es realmente
\\todo
(con una barra invertida en su nombre), por lo que es difícil especificarlo: puedes parchearlo usando \csname
o hacerlo con el xpatch
paquete:
\documentclass{article}
\usepackage{todonotes}
\usepackage{xpatch}
\makeatletter
\xpretocmd{\todo}{\@bsphack}{}{}
\xapptocmd{\todo}{\@esphack}{}{}
\makeatother
\begin{document}
Hello\todo{test} World!
\end{document}
Con etoolbox
tendrías que escribir
\expandafter\pretocmd\csname\string\todo\endcsname{\@bsphack}{}{}
\expandafter\apptocmd\csname\string\todo\endcsname{\@esphack}{}{}
Respuesta2
Puedes lograr esto más fácilmente. Dado que la definición de \todo
simplemente es
\newcommand{\todo}[2][]{\@todo[#1]{#2}}%
simplemente puede redefinirlo (de una manera un poco más segura que la definición original, consulte el comentario de Bruno Le Floch a esta respuesta (¡gracias!)):
\documentclass{article}
\usepackage{todonotes}
\makeatletter
\renewcommand{\todo}[2][]{\@bsphack\@todo[{#1}]{#2}\@esphack}%
\makeatother
\begin{document}
Hello\todo{test} World!
\end{document}