# Combining two custom commands

I came across a problem when typing my report. I do not know how to fix this. The problem is as follows:

I have two custom commands defined like this:

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

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


So that the first command gives an output like ${\bf SL}(n,\mathbb{R})$ and the second command gives the output like ${\bf L}(G)$. Here $n$ and $G$ are respectively the default arguments.

Now when I use these two commands together, I hope to get

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


However, for some reason what I am getting is

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


Any ideas of what is going on here?

• In LaTeX, don't use \bf; use \bfseries or \textbf{...} or \mathbf{...}. – jub0bs Mar 25 '14 at 8:33

The problem in \lie[\slr[2]] is that the optional argument to \lie is taken to be \slr[2. You can solve the issue with 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}


I removed \ensuremath as I believe that you gain nothing from using \lie in text rather than $\lie$; to the contrary, I firmly believe that the latter form is much better, because math is always treated as math.

I cannot see it:

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


You have to put the optional argument into braces: [{\slr[2]}]

• I am still getting the same problem. I am using the book class, if that helps. – Vishal Gupta Mar 25 '14 at 8:40
• Also, as suggested above, I am now using \textbf instead of \bf. – Vishal Gupta Mar 25 '14 at 8:40
• see myedited answer. – user2478 Mar 25 '14 at 8:46
• It works by putting {} around the second argument. – Vishal Gupta Mar 25 '14 at 8:51
• [\slr[2]] takes the first ] as closing brace for the first [ and not for the second one, because [ looks only for a following ] – user2478 Mar 25 '14 at 8:54