2つのカスタムコマンドを組み合わせる

2つのカスタムコマンドを組み合わせる

レポートを入力しているときに問題が発生しました。これを修正する方法がわかりません。問題は次のとおりです。

次のように定義された 2 つのカスタム コマンドがあります。

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

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

したがって、最初のコマンドは のような出力を生成し${\bf SL}(n,\mathbb{R})$、2 番目のコマンドは のような出力を生成します${\bf L}(G)$。ここで$n$、 と は$G$それぞれデフォルトの引数です。

これら2つのコマンドを一緒に使用すると、

$${\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]}]

関連情報