このcomplexity
パッケージは、コンピュータ サイエンティストにとって非常に便利なものです。最近、私は、後続の空白のグロブを回避するためにエスケープを必要としないマクロを定義するのに役立つマクロxspace
を提供するパッケージを発見しました。\xspace
\
\newcommand{\myname}{Nicola\xspace}
...
\myname is walking on the street % No need to write \myname\ or \myname{}
今、私は多く複雑性パッケージのコマンドの 1 つで、テキスト内でよく使用される数十のコマンドが定義されているため、エスケープが必要になることが非常に多くあります。これらを\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}