我想在 LaTeX 中定义一个宏,比如\mymap
,在空输入时只返回函数名称,即“mymap”;在输入“a”时返回“a”中函数的评估(名称),即“mymap(a)”。
为此我尝试了以下宏定义:
\usepackage{xifthen}
\newcommand{\mymap}[1]{
\ifthenelse{\isempty{#1}}
{\operatorname{mymap}}
{\operatorname{mymap}(#1)}
}
问题是(按照 LaTeX 惯例)每当我单独编写宏名称时,LaTeX 都会将以下非空字符作为参数。例如,如果我编码:
Let \mymap be a map
结果是:
让 mymap(b)ea 映射
而不是期望的:
让 mymap 成为地图
我的问题是:
- 有没有办法强制 LaTeX 宏仅在括号内时才接受参数?
- 获得具有所需行为的宏的最佳方法是什么?
答案1
使用可选参数。
但是,空格有点棘手。这里我使用了\xspace
,但我更愿意不使用。
\documentclass{article}
\usepackage{xifthen,amsmath,xspace}
\newcommand{\mymap}[1][]{%
\ifthenelse{\isempty{#1}}%
{\ensuremath{\operatorname{mymap}}\xspace}
{\ensuremath{\operatorname{mymap}(#1)}}%
}
\begin{document}
\scshape
Let \mymap be a map, whereas \mymap[x] shows its argument.
\end{document}
如果没有\xspace
,您将被迫使用语法\mymap{}
或\mymap[]
来实现函数名称大小写。
David 评论说,在他看来,最好明确强制指定数学模式,在这种情况下空间问题就会消失,并且需要\ensuremath
得到缓解:
\documentclass{article}
\usepackage{xifthen,amsmath}
\newcommand{\mymap}[1][]{%
\ifthenelse{\isempty{#1}}%
{\operatorname{mymap}}
{\operatorname{mymap}(#1)}%
}
\begin{document}
\scshape
Let $\mymap$ be a map, whereas $\mymap[x]$ shows its argument.
\end{document}