如何创建具有三个可选参数的命令?

如何创建具有三个可选参数的命令?

抱歉我的英语不好,但无论如何,我想知道如何创建一个带有三个可选参数的新命令?我想得到图片上显示的内容。我还有其他方法可以实现这一点,但它们并不像我想要的那样舒服。我尝试使用twoopt包,但只有两个可能的可选参数,所以它不能让我满意。我希望“1”、“2”和“l”是可选的,这样我就可以在文本中输入类似的内容\fff并准确获取图片上的内容,或者例如输入\fff[][][3]并获取我需要的内容。有什么方法可以实现我所问的内容吗?谢谢。 在此处输入图片描述

答案1

这是一个可能的解决方案

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}
\DeclareDocumentCommand\fff { O{1} O{A} O{2} } {#1 \underset{l}{\overset{#2}{\to}} #3 }
\begin{document}
\[
\fff \quad \fff[3][B][4]
\]
\end{document}

答案2

这里有一个解决方案xparse——实际上它展示了xparse与传统方法相比有多么优越:

\documentclass[10pt]{article}
\usepackage{amsmath}
\makeatletter

\def\fff{%
  \bgroup
  \@ifnextchar[{\@fff}{\@fff[]}%
}

\def\@fff[#1]{%
  \ifx\\#1\\%
    \def\@fffi{1}%
  \else
    \def\@fffi{#1}%
  \fi
  \@ifnextchar[{\@@fff}{\@@fff[]}%
}

\def\@@fff[#1]{%
  \ifx\\#1\\%
    \def\@fffii{A}%
  \else
    \def\@fffii{#1}%
  \fi
  \@ifnextchar[{\@@@fff}{\@@@fff[]}%
}

\def\@@@fff[#1]{%
  \ifx\\#1\\%
    \def\@fffiii{2}%
  \else
    \def\@fffiii{#1}%
  \fi
  \ensuremath{\@fffi
    \underset{l}{\overset{\@fffii}{\to}}\@fffiii}%
  \egroup
}
\makeatother

\begin{document}
\noindent
\fff \quad \fff[][][]\quad \fff[9]\quad \fff[][Z] \\
\fff[][][5]\quad \fff[3][B][4]\quad \fff
\end{document}

在此处输入图片描述

答案3

您可以定义如下内容:

\newcommand{\parcial}[2]{\frac{\partial #1}{\partial #2}}

使

\parcial{f}{x}:

在此处输入图片描述

请注意,这[2]是变量的数量。还请注意变量的顺序。您可以使用此代码来创建自己的新命令。

答案4

当尝试处理多个可选参数时,使用键值方法几乎总是更方便。以下是使用xkeyval

在此处输入图片描述

\documentclass{article}

\usepackage{xkeyval,amsmath}

\makeatletter
\define@cmdkey{myfam}{left}{}
\define@cmdkey{myfam}{right}{}
\define@cmdkey{myfam}{bottom}{}

\newcommand{\fff}[2][]{%
  \setkeys{myfam}{%
    left=1,right=2,bottom=l,% Defaults
    #1}%
    \underset{%
      \overset
        {\cmdKV@myfam@left \rightarrow \cmdKV@myfam@right}
        {\scriptscriptstyle \cmdKV@myfam@bottom}%
      }{#2}
}
\makeatother

\begin{document}

$ \fff{A} \quad \fff[left=a]{A} \quad \fff[right=b]{A} \quad \fff[left=c,right=d]{A} \quad \fff[left=e,right=f,bottom=h]{A} $

\end{document}

我已将一个参数设为\fff必填项,但是它也可以在函数中进行硬编码,或者设为键值选项。

参考:如何创建带有键值的命令?

相关内容