组合两个自定义命令

组合两个自定义命令

我在编写报告时遇到了一个问题。我不知道如何解决这个问题。问题如下:

我有两个自定义命令定义如下:

\newcommand{\slr}[1][n]{\ensuremath{{\bf SL}(#1,\mathbb{R})}}

\newcommand{\lie}[1][G]{\ensuremath{{\bf L}(#1)}}

因此第一个命令给出的输出类似于${\bf SL}(n,\mathbb{R})$,而第二个命令给出的输出类似于${\bf L}(G)$。这里$n$$G$分别是默认参数。

现在,当我一起使用这两个命令时,我希望得到

$${\bf L}({\bf SL}(2,\mathbb{R}))$$

然而,由于某种原因,我得到的是

$$ {\bf L}({\bf SL}(2),\mathbb{R})$$

知道这里发生什么事了吗?

答案1

中的问题\lie[\slr[2]]是,可选参数\lie被视为\slr[2。您可以使用以下方法解决该问题xparse

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

\DeclareMathOperator{\slrop}{\mathbf{SL}}
\DeclareMathOperator{\lieop}{\mathbf{L}}

\NewDocumentCommand{\slr}{O{n}}{\slrop(#1,\mathbb{R})}
\NewDocumentCommand{\lie}{O{G}}{\lieop(#1)}

\begin{document}
Here it is: $\lie[\slr]$

With optional argument: $\lie[\slr[2]]$
\end{document}

在此处输入图片描述

我删除了,因为我相信使用文本而不是\ensuremath不会有任何好处;相反,我坚信后一种形式要好得多,因为数学总是被视为数学。\lie$\lie$

答案2

我看不到:

\documentclass{article}
\usepackage{amsmath}
\usepackage{amssymb}
\newcommand\slr[1][n]{\ensuremath{\mathbf{SL}(#1,\mathbb{R})}}
\newcommand\lie[1][G]{\ensuremath{\mathbf{L}}(#1)}

\begin{document}

\[ {\bf L}({\bf SL}(2,\mathbb{R})) \]

\[ \lie[{\slr[2]}] \]

\[ \slr[\lie] \]

\end{document}

在此处输入图片描述

您必须将可选参数放在括号中:[{\slr[2]}]

相关内容