![我可以在複雜性包的所有指令中註入 \xspace 嗎?](https://rvso.com/image/328447/%E6%88%91%E5%8F%AF%E4%BB%A5%E5%9C%A8%E8%A4%87%E9%9B%9C%E6%80%A7%E5%8C%85%E7%9A%84%E6%89%80%E6%9C%89%E6%8C%87%E4%BB%A4%E4%B8%AD%E8%A8%BB%E5%85%A5%20%5Cxspace%20%E5%97%8E%EF%BC%9F.png)
該complexity
軟體包對於計算機科學家來說非常有用。最近,我發現了這個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}