Передо мной стоит задача: подкрашивать серым названия клавиш в обозначениях хоткеев. Я это реализовал через рекурсию, подобную приведённой в The TeXbook в самом конце 20-й главы и пакет color. Документ компилировал с помощью pdflatex из терминала. Это работает, но если вызвать команду \hk в середине абзаца, то появляется совершенно лишний пробел. Минимальный пример кода приведён с комментариями:
\documentclass[14pt]{report}
\RequirePackage[dvipsnames, usenames]{color}
\begin{document}
\def\hotKeyColor#1{
\ifx#1\end % выходим из рекурсии, записывая текущее слово в бокс с фоном
\def\next{\edef\hkstr{\hkstr\noexpand\colorbox{Gray}{\thisKey}}} % без завершающего плюса
\else
\let\next=\hotKeyColor % назначаем следующий шаг рекурсии
\if#1+ % если попался плюс, то запишем в итоговую строку название клавиши
\edef\hkstr{\hkstr\noexpand\colorbox{Gray}{\thisKey}+}
\def\thisKey{} % обнулим название
\else
\edef\thisKey{\thisKey#1} % добавляем текущий токен в название
\fi
\fi \next} % идём на следующий уровень рекурсии
\def\hk#1{{\def\hkstr{} \def\thisKey{} % создаём команды для хранения строки вывода и текущего слова
\hotKeyColor#1\end \hkstr % вызываем рекурсивную ф-цию, а затем выводим результат
}}
\hk{Ctrl+Alt+F4}txt. % здесь порядок, Ctrl начинается сразу после абзацного отступа
txt.\hk{Ctrl+Alt+F4}txt. % а тут после txt. появляется пропуск примерно в полторы длины от сочетания
\end{document}
Как можно избавиться от лишнего клея во второй строке итогового файла?
Перемещено hobbit из general