Могу ли я внедрить \xspace во все команды из пакета сложности?

Могу ли я внедрить \xspace во все команды из пакета сложности?

Пакет complexityочень полезен для Computer Scientist. Недавно я обнаружил пакет xspace, который предоставляет макрос \xspace, помогающий определять макросы, которым не требуется экранирование, \чтобы избежать подстановки последующего пробела:

\newcommand{\myname}{Nicola\xspace}
...
\myname is walking on the street % No need to write \myname\ or \myname{}

Теперь я используюмногокоманд из пакета сложности, который определяет десятки команд, которые обычно используются внутри текста, так что необходимость экранирования возникает очень часто. Я бы хотел, чтобы они использовались \xspaceпо умолчанию, но переопределение, скажем, \ComplexityFontне работает, потому что, по-видимому, \xspaceдолжно быть помещено точно в конец вызываемого макроса (а не макроса, расширенного из него). Пакет определяет все свои макросы с помощью простых \newcommands, поэтому я не думаю, что есть способ зацепиться за него.

Можно ли каким-то образом автоматизировать это переопределение или мне следует предложить эту функцию напрямую автору пакета?

решение1

Поскольку по сути все команды определены в терминах \ComplexityFont, это довольно просто:

\documentclass{article}
\usepackage[small]{complexity}
\usepackage{etoolbox,xspace}

\robustify\ComplexityFont
\apptocmd\ComplexityFont{\xspace}{}{}


\begin{document}

\section{An \NP problem}

An \NP problem

\end{document}

Я также усилил основную команду, так что вам не нужно указывать \protectперед complexityмакросами при перемещении аргументов, например, \sectionи \caption.

Однако я советую следовать тому, что говорит автор в руководстве:

Таким образом, лучше всегда использовать complexityкоманды внутри математического режима.

ЧитатьНедостатки xspaceпо причинам, по которым не используется \xspace.

\documentclass{article}
\usepackage[small]{complexity}
\usepackage{etoolbox}

\robustify\ComplexityFont    

\begin{document}

\section{An $\NP$ problem}

An $\NP$ problem

\end{document}

введите описание изображения здесь

Связанный контент