(SX.](https://tex.stackexchange.com),我想定义一个新的命令,在这种情况下我想表示一个功能,就像问题的标题一样。
我的尝试
\documentclass{memoir}
\usepackage{xparse} % Possible \usepackage{xstring} :)
\NewDocumentCommand{\fun}{o}{%
\IfValueTF{#1}{%
#1\colon\mathcal{C}\rightarrow\mathcal{D}%
}{%
f\colon\mathcal{A}\rightarrow\mathcal{B}%
}%
}
\begin{document}
$\fun$ %$f\colon\mathcal{A}\rightarrow\mathcal{C}$
$\fun[g]$ %$g\colon\mathcal{C}\rightarrow\mathcal{D}$
% You can add more cases, i.e, $\fun[*]$
% where * is the letter that is defined.
$\fun{h}{X}{Y}$ %h\colon\mathcal{X}\rightarrow\mathcal{Y}
\end{document}
另一个有效的解决方法\IfEqCase
是\IfStrEqCase
使用xstring
包裹:
\IfEqCase{f}{
{f}{f\colon\mathcal{A}\rightarrow\mathcal{C}}
{g}{g\colon\mathcal{C}\rightarrow\mathcal{D}}
}[{#1#2#3}{#1\colon\mathcal{#2}\rightarrow\mathcal{#3}}]
The output that you would expect is $\fun$.
\IfEqCase{g}{
{f}{f\colon\mathcal{A}\rightarrow\mathcal{C}}
{g}{g\colon\mathcal{C}\rightarrow\mathcal{D}}
}[{#1#2#3}{#1\colon\mathcal{#2}\rightarrow\mathcal{#3}}]
The output that you would expect is $\fun[g]$.
\IfEqCase{hXY}{
{f}{f\colon\mathcal{A}\rightarrow\mathcal{C}}
{g}{g\colon\mathcal{C}\rightarrow\mathcal{D}}
}[{#1#2#3}{#1\colon\mathcal{#2}\rightarrow\mathcal{#3}}]
The output that you would expect is $\fun{h}{X}{Y}$.
如图所示,我希望你有一个默认参数和至少一个可选参数。
如果这个建议有效,那么您能帮助我在创建命令时实现它吗?
PD:我以前问过类似的问题。我有一个“困惑的解决方案”这让我仔细考虑了使用额外的括号{}{}
以避免出现错误。
提前致谢。
答案1
该语法有 3 个可选参数
\fun[<case>][<after colon>][<after right arrow>]
如果仅使用一个可选参数,则将通过调用预定义案例\csname funcase#1\endcsname
。如果使用多个可选参数,则使用其他可选参数填充字段,覆盖默认案例。
妇女权利委员会:
\documentclass{article}
\newcommand\fun[1][f]{\def\funcase{#1}\funauxA}
\newcommand\funauxA[1][\relax]{%
\ifx\relax#1\relax\csname funcase\funcase\endcsname\else%
\def\funargA{#1}\expandafter\funauxB%
\fi%
}
\newcommand\funauxB[1][*]{%
\funcase\colon\mathcal{\funargA}\rightarrow\mathcal{#1}
}
\def\funcasef{f\colon\mathcal{A}\rightarrow\mathcal{B}}
\def\funcaseg{g\colon\mathcal{C}\rightarrow\mathcal{D}}
% ADD MORE CASES HERE
\def\funcasem{m\colon\mathcal{Q}\rightarrow\mathcal{R}}
\begin{document}
$\fun$ %$f\colon\mathcal{A}\rightarrow\mathcal{B}$
$\fun[g]$ %$g\colon\mathcal{C}\rightarrow\mathcal{D}$
% You can add more cases, i.e, $\fun[*]$
% where * is the letter that is defined.
$\fun[m]$
$\fun[g][E][T]$
$\fun[h][X][Y]$ %h\colon\mathcal{X}\rightarrow\mathcal{Y}
\end{document}
答案2
答案3
你想要这个吗?
$\fun \quad \fun{f}\quad \fun{f}{N}{R}$
$\fun{g} \quad \fun{g}{M}$
$\fun{h}{X}{Y}\quad \fun{h}\quad \fun{h}{W}{Q}$
生产
[建议来自你的评论在Henri Menke 的回答。
\documentclass{article}
\usepackage{xparse}
\NewDocumentCommand{\fun}{ G{f} g g }{%
\def\tempa{f}\def\tempb{#1}\def\tempc{g}%
\IfValueTF{#2}{\def\tempe{#2}}{%
\ifx\tempa\tempb\def\tempe{A}%
\else\ifx\tempb\tempc\def\tempe{C}%
\else\def\tempe{X}\fi\fi
}%
\IfValueTF{#3}{\def\tempf{#3}}{%
\ifx\tempa\tempb\def\tempf{B}%
\else\ifx\tempb\tempc\def\tempf{D}%
\else\def\tempf{Y}\fi\fi
}%
#1\colon\mathcal{\tempe}\rightarrow\mathcal{\tempf}%
}
\begin{document}
$\fun \quad \fun{f}\quad \fun{f}{N}{R}$
$\fun{g} \quad \fun{g}{M}$
$\fun{h}{X}{Y}\quad \fun{h}\quad \fun{h}{W}{Q}$
\end{document}