Ich benutze das todonotes
Paket, um kleine Randnotizen zu meinem Text hinzuzufügen, aber das Schreiben
Hello\todo{test} World!
entfernt den Zwischenwortraum, wie bereits erwähnt indiese Frage. Also habe ich versucht
\pretocmd{\todo}{\@bsphack}{}{}
\apptocmd{\todo}{\@esphack}{}{}
und dies fügt den Zwischenwortraum hinzu, gibt aber einfach alle Parameter aus, anstatt sie an zu übergeben \todo
.
Vollständiges MWE:
\documentclass{article}
\usepackage{etoolbox}
\usepackage{todonotes}
\makeatletter
\pretocmd{\todo}{\@bsphack}{}{}
\apptocmd{\todo}{\@esphack}{}{}
\makeatother
\begin{document}
Hello\todo{test} World!
\end{document}
Antwort1
Da \todo
mit definiert ist, \newcommand
um ein optionales Argument zu haben, ist das zu patchende Makro wirklich
\\todo
(mit einem Backslash im Namen), daher ist es schwierig, es anzugeben: Sie können es patchen oder dies mit dem Paket \csname
tun :xpatch
\documentclass{article}
\usepackage{todonotes}
\usepackage{xpatch}
\makeatletter
\xpretocmd{\todo}{\@bsphack}{}{}
\xapptocmd{\todo}{\@esphack}{}{}
\makeatother
\begin{document}
Hello\todo{test} World!
\end{document}
Mit etoolbox
müsstest du schreiben
\expandafter\pretocmd\csname\string\todo\endcsname{\@bsphack}{}{}
\expandafter\apptocmd\csname\string\todo\endcsname{\@esphack}{}{}
Antwort2
Das kann man einfacher erreichen. Denn die Definition von \todo
einfach ist
\newcommand{\todo}[2][]{\@todo[#1]{#2}}%
Sie können es einfach neu definieren (auf eine etwas sicherere Weise als die ursprüngliche Definition, siehe Bruno Le Flochs Kommentar zu dieser Antwort (danke!)):
\documentclass{article}
\usepackage{todonotes}
\makeatletter
\renewcommand{\todo}[2][]{\@bsphack\@todo[{#1}]{#2}\@esphack}%
\makeatother
\begin{document}
Hello\todo{test} World!
\end{document}