LaTeX 中是否有“不执行任何操作”的命令?

LaTeX 中是否有“不执行任何操作”的命令?

我自己是这样定义的:

\newcommand\nothing[1]{#1}

也许同样的东西已经存在于 LaTeX 中,我可以使用它吗?

PS. 这样做的目的是.tex为了另一个后处理器(拼写检查器)突出显示文档的某些部分。实际上,我的命令名称是\nospellcheck

答案1

任何时候使用标准方法吸收参数,您都可能会丢失信息……例如,吸收参数前的空格。另一个例子是,如果吸收的参数是一个单独的标记,您将不知道它最初是否有括号。由于这些不确定性,我倾向于不将参数吸收视为“不执行任何操作”的命令。

在下面的 MWE 中,active-Q被设置为 OP 的定义\nothing。它在第二行中使用了两次。在第一个例子中,由于参数吸收而丢失了空格。在第二个例子中,丢失了 周围的括号a

\documentclass{article}
\usepackage[T1]{fontenc}
\newcommand\nothing[1]{#1}
\begin{document}
\catcode`\Q=\active

\letQ\nothing

a b\detokenize{{a}}

aQ b\detokenize\expandafter{Q{a}}
\end{document}

在此处输入图片描述

更好的“不执行任何操作”命令是

\newcommand\nothing{}

或者,等价地,

\let\nothing\empty

然而,即便如此,这也并非万无一失。任何新引入的代币,即使是\empty,如果成为扩张或吸收的目标,也可能会造成干扰。

下面是一个例子,其中引入简化\nothing仍然会改变结果(尽管在这种情况下,会\nothing改善结果):

\documentclass{article}
\usepackage[T1]{fontenc}
\let\nothing\empty
\begin{document}
\def\z|#1|{\detokenize\expandafter{#1}}

\z|{abc}|

\z|\nothing{abc}|
\end{document}

在此处输入图片描述

注意:这个确切的情况是我昨天在 tokcycle 包中发现的一个错误,当时文本逃脱放在分隔符之间时,循环|就会丢失。如果转义文本是单个括号组,则会丢失括号,如上面第一行所示。我即将提交给 CTAN 的修复方法是使用第二行所示的带 的技术\empty,这将保留这些括号。

相关内容