仅在 \newcommand 范围内重新定义 ~

仅在 \newcommand 范围内重新定义 ~

我想创建一个命令(\newcommand)来对文本进行一些修饰(基本上是在文本周围画一个框),用于技术报告:

例如:

  Use \pdobj{frob}{noz zle} for achievers

渲染如下:

在此处输入图片描述

现在参数文本(在本例中frob为 和noz zle)非常常用波浪符号~。由于波浪符号显然很特殊,我目前必须使用

And \pdobj{slurp$\sim$}{} they did.

实现:

在此处输入图片描述

现在,我真正想做的是简单地写

And \pdobj{slurp~}{} they did.

达到同样的效果。据我所知,这需要重新定义命令~,例如

\def~{$\sim$}

虽然这似乎有效,但它也使得传统的~不间断空格用法(在我的命令之外)变得不可能。

但是,该\url命令以某种方式完成了渲染~某些特殊字形(例如\url{~T})的操作,而不会影响其范围之外的 NBSP 使用。

我看过url.sty,但坦率地说,这远远超出了我的 TeX-foo 的能力。

~那么,当我在命令的参数内部遇到与在外部遇到完全不同的事情时,是否存在(简单/容易/直接的)方法来做这件事?

答案1

只需~在组中重新定义

\newcommand{\pdobj}[2]{%
  \begingroup\def~{$\sim$}%
  <the other code for boxing the material
  \endgroup
}

使用当前的定义\pdobj,可以更好地优化代码。

相关内容