Пакет 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
должно быть помещено точно в конец вызываемого макроса (а не макроса, расширенного из него). Пакет определяет все свои макросы с помощью простых \newcommand
s, поэтому я не думаю, что есть способ зацепиться за него.
Можно ли каким-то образом автоматизировать это переопределение или мне следует предложить эту функцию напрямую автору пакета?
решение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}