最小示例

最小示例

SX. 在这种情况下,我想创建一个\newcommand名为\fun的函数。

\ fun当我再次使用带有名称的命令f(字母 f 在我的文档中被广泛使用)并避免第一个定义时,就会出现问题,因为否则,我会得到第一个情况。

最小示例

\documentclass{memoir}
\usepackage{amsmath,amssymb}
\usepackage{xstring}
\newcommand{\rn}[1][n]{%
    \IfEqCase{#1}{%
        {1}{\mathbb{R}}%
        {2}{\mathbb{R}^{2}}%
        {3}{\mathbb{R}^{3}}%
        {n}{\mathbb{R}^{n}}
        {#1}{\mathbb{R}^{#1}}
        % You can add a finite number of more cases :)
   }%
}%

\newcommand{\fun}[3][f]{%
    \IfEqCase{#1}{
        {f}{f\colon\mathcal{A}\rightarrow\mathcal{B}}
        {g}{g\colon\mathcal{C}\rightarrow\mathcal{D}}
        {#1}{#1\colon #2\rightarrow #3}
% Maybe "othercase" can generate case like f or g.
    }
}

\begin{document}

If I use $f$ function like this $\fun[f]{\rn}{\rn[m]}$,

but I expect to use a function called $f\colon\rn\rightarrow\rn[m]$.

This example works fine, e.g, $\fun[\omega]{\rn}{\rn[1]}$ but I want to use 
this command

%\fun[othercase]{f}{\rn}{\rm[1]}

\end{document}

这个例子运行良好,例如$\fun[\omega]{\rn}{\rn[1]}$

如果我使用$f$这样的函数$\fun[o]{f}{\rn}{\rn[m]}$

但我希望使用一个名为的函数$f\colon\rn\rightarrow\rn[m]$

更新

我尝试构建如下命令:

\newcommand{\fun}[5][default]{%
    \IfEqCase{#1}{
        {default}{
            \IfEqcase{#2}{
                {f}{#2\colon\mathcal{A}\rightarrow\mathcal{B}}
                {g}{#2\colon\mathcal{C}\rightarrow\mathcal{D}}
            }
        }
        {other}{
            {}{#3\colon #4 \rightarrow #5}
        }
    }
}

因为我不想丢失分别使用ff\colon\mathcal{A}\rightarrow\mathcal{B})和gg\colon\mathcal{C}\rightarrow\mathcal{D})的默认选项。

我发现我需要在其他可选参数内添加一个可选参数。

来源

我使用这个想法来创建命令。

提前致谢!

答案1

我非常不清楚您在这里想要做什么,或者为什么(考虑到您期望的输出)您要这样做\fun

跟踪扩展(\tracingmacros=1如果有帮助的话请使用,尽管 xstring 有很多垃圾):

  • 你打电话\fun[f]{\rn}{\rn[m]}

  • 处理完可选参数后,这归结为使用具有模板的命令\fun[#1]{#2}{#3}。在您的第一个示例中,这些是#1=f,#2=\rn#3=rn[m]`。

  • 您要做的\fun第一件事是使用 case 语句来考虑可选参数#1。第一行匹配 if #1is f,结果就是如此。

  • 因此,该线路被扩展为\mathcal{A}\rightarrow\mathcal{B}

  • 由于您没有要求在这种情况下执行任何操作,它们就会消失,就像任何其他未使用的参数一样\fun#2#3

我不明白的是,为什么你会有这样的定义:\fun如果你想要你所说的你想要的东西:我完全不明白你为什么要看第一个可选参数。在我看来,你只是想要:

\newcommand{\fun}[3]{%
  \ensuremath{#1:#2#3}}

然后使用它作为\fun{f}{\rn}{\rn[m]}

答案2

在此处输入图片描述

如果你取消注释你想要的那一行,则会出现一个错误,指出缺少了什么,因为$你省略了;$如果你用 包围表达式,$则会收到错误,! Class memoir Error: Font command \rm is not supported.因为\rm没有定义要执行任何操作。也许这是你的意图,\rn但这两个错误都与你的宏根本无关。

我不明白为什么您要在\fun没有做任何有用事情的地方使用测试(在前两种情况下,这意味着您丢弃了参数??)xstring 测试\rn也没有做太多事情(只有针对 1 的测试,省略上标,做了任何有用的事情)但我保留了它。

\documentclass{memoir}
\usepackage{amsmath,amssymb}
\usepackage{xstring}
\newcommand{\rn}[1][n]{%
    \IfEqCase{#1}{%
        {1}{\mathbb{R}}%
        {2}{\mathbb{R}^{2}}%
        {3}{\mathbb{R}^{3}}%
        {n}{\mathbb{R}^{n}}
        {#1}{\mathbb{R}^{#1}}
        % You can add a finite number of more cases :)
   }%
}%

\newcommand{\fun}[3][f]{%
        #1\colon #2\rightarrow #3
}

\begin{document}

If I use $f$ function like this $\fun[f]{\rn}{\rn[m]}$,

but I expect to use a function called $f\colon\rn\rightarrow\rn[m]$.

This example works fine, e.g, $\fun[\omega]{\rn}{\rn[1]}$ but I want to use 
this command

$\fun[f]{\rn}{\rn[1]}$

\end{document} 

答案3

在这个小例子中,我创建了两个子命令,第一个子命令我称之为默认命令,第二个子命令我称之为通用命令,我使用了字符串打包命令\IfEqCase,但是我得到了一些意想不到的结果,希望对你有帮助。

\documentclass[14pt]{memoir}
\usepackage{amsmath,amsfonts,amssymb}
\usepackage{xstring}

\newcommand{\comdefault}[1][f]{
    \IfEqCase{#1}{
        {f}{\ensuremath{f\colon\mathcal{A}\rightarrow\mathcal{B}}}
        {g}{\ensuremath{g\colon\mathcal{C}\rightarrow\mathcal{D}}}}%[other case]
}

\newcommand{\comgeneral}[3]{
    \ensuremath{#1\colon#2\rightarrow#3}
}

\newcommand{\comfinal}[4][default]{
    \IfEqCase{#1}{
        {default}{\comdefault[#2]}
        {general}{\comgeneral{#2}{#3}{#4}}}
}

\begin{document}

\begin{enumerate}
    \item The function $g$ is \comdefault[g]. % Subcommand 1
    \item The function $f$ is \comgeneral{f}{X}{Y}. % Subcommand 2
    \item La función $h_1$ does not work correctly %\comfinal{h_1}. %{}%{}{}
    \item La función $h_2$ does not work correctly either. %\comfinal{h_2}{}
    \item The function $h_3$ works \comfinal[general]{X}{Y}{Z}
\end{enumerate}
\end{document}

相关内容