我正在尝试定义一个宏,用单个乳胶表达式替换一个短语,例如,我想\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
后面有一半以上的时间是空格时,您的方法才能节省输入时间。我不确定这是否是一个好的假设。