可选参数

可选参数

我想要一个采用可选参数的宏。

  • 如果未传递任何内容,则会产生 G。
  • 如果传递了 i,它会产生 G_{p_i}。

但是,以下代码面临一些错误“无法在数学模式下使用‘\spacefactor’”。

\documentclass{article}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amsthm}
\newcommand{\cabGo}[1][\@empty]{
    \ifx\@empty#1{{\sf G}}
    \else{{\sf G}_{p_{#1}}}
    \fi
}
\begin{document}
$\cabGo$
$\cabGo[3]$
\end{document}

答案1

主要问题缺失了\makeatletter

另一方面,代码写得不太好:

\newcommand{\cabGo}[1][]{%
  \mathsf{G}%
  \if\relax\detokenize{#1}\relax
  \else
    _{p_{#1}}%
  \fi
}

对论证空虚性的检验更加严格;也\sf已经被弃用了 20 多年。

如果加载xparse,代码就更简单了:

\usepackage{xparse}

\NewDocumentCommand{\cabGo}{o}{%
  \mathsf{G}\IfValueT{#1}{_{p_{#1}}}%
}

评论中请求的更改(可以提供任意数量的选项)

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}

\ExplSyntaxOn

\NewDocumentCommand{\cabGo}{o}
 {
  \mathsf{G}
  \IfValueT{#1}
   {
    \sb{\clist_map_inline:nn { #1 } { p\sb{##1} }}
   }
 }

\ExplSyntaxOff

\begin{document}

$\cabGo$ (no option)

$\cabGo[1]$ (single option)

$\cabGo[1,2]$ (double option)

$\cabGo[1,2,3]$ (triple option)

\end{document}

在此处输入图片描述

相关内容