定义一个宏,其可选参数为空格

定义一个宏,其可选参数为空格

我正在尝试定义一个宏,用单个乳胶表达式替换一个短语,例如,我想\myPhrase返回短语“这是狗”。问题是,当你以明显的方式执行此操作时

\def\myPhrase{this is the dog}

那么你必须记住在宏后面添加一个空格,即

\myPhrase that I like

将返回

this is the dogthat I like.

因为我的合著者永远不会记得总是写

\myPhrase\ that I like 

我尝试定义一个带有可选参数的宏。默认值是空格,如果您想要标点符号,则可以将其添加为参数。

例如

\documentclass[11pt,reqno,fleqn]{amsart}
\newcommand{\myPhrase}[1][\ ]{This is the dog{#1}}
\begin{document}
\myPhrase that I was telling you about.  \myPhrase{,} which is a collie.
\end{document}

原则上,上述方法应该可以解决问题,但即使有可选参数,它也会增加空间,即

\myPhrase{,}

返回

This is my dog , which is a collie

当它应该返回

This is my dog, which is a collie 

非常感谢您的任何建议!谢谢 Leo

答案1

您的宏定义得很好,但您使用大括号{}而不是方括号错误地调用了它[]。可选参数通过后者传递。因此,只需更改 MWE 以将调用大括号替换为方括号即可获得预期结果:

\documentclass[11pt,reqno,fleqn]{amsart}
\newcommand{\myPhrase}[1][\ ]{This is the dog{#1}}
\begin{document}
\myPhrase that I was telling you about.  \myPhrase[,] which is a collie.
\end{document}

在此处输入图片描述

正如 Aditya 提到的,该xspace软件包也是一个选择,但它也附带“买家要小心”的警告:xspace 的缺点

最后我想补充一点,大多数人处理这个问题的标准方法是不与任何参数相关\myphrase,而是以以下方式使用它:

\myphrase{} that I was telling you about. \myphrase, which is a collie.

比较这两种方法,发现只有当\myphrase后面有一半以上的时间是空格时,您的方法才能节省输入时间。我不确定这是否是一个好的假设。

相关内容