从字符串中删除所有空格(包括 \quad 和 \hspace)

从字符串中删除所有空格(包括 \quad 和 \hspace)

我想要检索除了空格(制表符)之外的所有字符,包括~\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

相关内容