在 LaTeX 宏中强制使用括号参数

在 LaTeX 宏中强制使用括号参数

我想在 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 成为地图

我的问题是:

  1. 有没有办法强制 LaTeX 宏仅在括号内时才接受参数?
  2. 获得具有所需行为的宏的最佳方法是什么?

答案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}

相关内容