Когда макрос предшествует нежелательному пространству,% не требуется, если вы используете \ @ifnextchar и \ @ gobble.
Рассмотрим что-то вроде (в преамбуле, конечно):
\makeatletter
\let\oldtodo\todo
\renewcommand\todo[1]{%
\oldtodo{#1}%
\@ifnextchar\par{\@gobble}{}}
\makeatother
Таким образом, если у вас есть что-то вроде:
\todo{Stuff}
Things
будет действовать так же, как
\todo{Stuff}
%
Things
или
\todo{Stuff}
Things
Вы можете обобщать такие вещи с помощью макроса типа
\makeatletter
\newcommand\gobblepars{%
\@ifnextchar\par%
{\expandafter\gobblepars\@gobble}%
{}}
\makeatother
Затем вы можете использовать \gobblepars
там, где вы хотите съесть место (например, после задачи). Вы также можете переопределить todo (как показано выше), чтобы автоматически ставить \gobblepars
после него.
Для обработки ведущего пустого пространства. Вы также можете использовать \gobblepars
, но вы должны быть явными. Например:
Some text\gobblepars
\todo{Stuff}
предотвратит отображение \ par между двумя строками.