我如何定义自己的简写命令,但确保后面的间距正确?
\newcommand{\abc}{\textsc{abc}}
产生“ABC”,但存在问题“ABCmoretexthere”(即下一个单词前没有空格)。
反之亦然
\newcommand{\abc}{\textsc{abc} }
生成“ABC moretexthere”,但存在问题“ABC,”(即逗号前有一个空格)。
我怎样才能让两者发挥作用?
答案1
答案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非常好的解释!