\newcommand 和间距

\newcommand 和间距

我如何定义自己的简写命令,但确保后面的间距正确?

\newcommand{\abc}{\textsc{abc}}产生“ABC”,但存在问题“ABCmoretexthere”(即下一个单词前没有空格)。

反之亦然

\newcommand{\abc}{\textsc{abc} }生成“ABC moretexthere”,但存在问题“ABC,”(即逗号前有一个空格)。

我怎样才能让两者发挥作用?

答案1

您可以使用该包空间

\usepackage{xspace} 
\newcommand{\abc}{\textsc{abc}\xspace}

此命令决定是否插入空格,通常效果很好。

答案2

您可以使用 xspace 包。为了避免已知的错误,您必须使用

\usepackage{xspace}[2006/05/08]
\makeatletter
% usually \check@icr is \@empty and therefore
% not appropriate for \xspaceaddexceptions.
\begingroup
  \text@command\relax
  \global\let\xspace@check@icr\check@icr
\endgroup
\xspaceaddexceptions{\xspace@check@icr}
\makeatother 

查看 Latex 错误报告工具/3895

答案3

我认为这里值得一提的是(来自xspace 的缺点),因为您可以使用def来代替,并在名称后面newcommand放置 a 。/

\def\abc/{\textsc{abc}}

def如果可以避免,通常不建议使用它,但对于更改字符串字体的简单命令(例如),它非常方便。

Now use \abc/ in a sentence, and it won't eat up the trailing white space.

/是命令使用中必需的部分,如果您忘记了,编译器将抛出错误:

Now use \abc incorrectly.

\abc 的使用与其定义不符

这很好,因为它将确保你绝不忘记了/。另一方面,使用newcommand和 并{}不能保证你不会忘记它,编译器也不会警告你。因此,如果你没有仔细校对,你的最终文档可能会缺少空格。

答案4

当您创建不带参数的宏时,您应该使用空语句来调用它。例如,在您的例子中是 \abc{}。请参阅https://tex.stackexchange.com/a/31094/36596非常好的解释!

相关内容