Объединение двух пользовательских команд

Объединение двух пользовательских команд

Я столкнулся с проблемой при наборе отчета. Я не знаю, как ее исправить. Проблема заключается в следующем:

У меня есть две пользовательские команды, определенные следующим образом:

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

Связанный контент