我想要检索除了空格(制表符)之外的所有字符,包括、
~
、\space
、\enspace
、\quad
等\qquad
作为参数传递的字符。
假设我们有一个命令\removespaces{...}
,它将打印
Loremipsumdolorsitamet
如果我在文档中使用以下序列
\removespaces{Lorem ipsum~dolor\hskip2ex sit\quad amet}
实现这一目标的最简单的方法是什么?
答案1
您需要一份要删除的命令列表并对其进行本地定义。
\documentclass{article}
\newcommand{\removespaces}[1]{%
\begingroup
\removespacesdef
#1%
\endgroup}
\NewExpandableDocumentCommand{\fakehspace}{sm}{}
\newcommand{\fakehskip}{\skip0= }
\newcommand{\fakekern}{\dimen0= }
\newcommand{\removespacesdef}{%
\RenewCommandCopy{\hspace}{\fakehspace}%
\let\hskip\fakehskip
\let\kern\fakekern
\let~\ignorespaces
\spaceskip=1sp
}
\begin{document}
\removespaces{Lorem\hspace*{1em}ipsum~dolor\hskip2ex sit\quad
amet\enspace what \kern0.2em is this?}
\end{document}
如果不进行局部定义,是否可以得到相同的结果?不能,但是如您所见,您不需要为\quad
或提供重新定义\enspace
。