# How to define the symbol by command?

There is a notation:

\mathbf{P}^{m}_{b}(n)


How can it be defined using \newcommand ?

PS The variables m, b, n should be as arguments

• \newcommand*\mysymbol{\mathbf{P}^{m}_{b}(n)} and then in the document use \mysymbol in math mode. – Skillmon likes topanswers.xyz Oct 7 '19 at 7:59
• Thanks, it works, but I want to be able to edit the vaieables, how could I do it ? – PKK Oct 7 '19 at 8:09
• In mathematical practice, you will want these various arguments to be optional, so you really want to use xparse. – Benjamin McKay Oct 7 '19 at 8:17
• @BenjaminMcKay, it is true, but need to be very careful using xparse package, since the not all online tex processors are able to use new version of xparse, for example, in case of submission to arXiv.org, you have to proceed xparse of TeX-Live 2016, i.e avoid to use the actual syntax of xparse, but proceed the old one – PKK Oct 17 '19 at 9:07


\newcommand*\mycmd{my replacement}


defines a new macro called \mycmd that is replaced by my replacement when expanded.

\newcommand\mycmd[1]{my replacement with the argument #1''}


defines a new macro that takes one argument. Correct usage would be something like \mycmd{mandatory}.

\newcommand\mycmd[2][default]{optional argument: #1''; mandatory argument: #2''}


defines a new macro with two arguments, the first being optional, the second mandatory. Correct usage would be something like \mycmd[optional]{mandatory} or \mycmd{mandatory}.

So in your case, if nothing should change, you could use

\newcommand*\mysymbol{\mathbf{P}^{m}_{b}(n)}


if you want the indices to be flexible, you can use

\newcommand\mynotation[2]{\mathbf{P}^{#1}_{#2}(n)}


and then you could use \mynotation{m}{b} in the document.

If also the P should be changeable, you can use something like

\newcommand\mynotation[3][P]{\mathbf{#1}^{#2}_{#3}(n)}


Then you could use \mynotation[P]{m}{b} or \mynotation{m}{b}.

If you even want the (n) to be variable, you can add another argument

\newcommand\mynotation[4][P]{\mathbf{#1}^{#2}_{#3}(#4)}


Then \mynotation[P]{m}{b}{n} or \mynotation{m}{b}{n} could be used.

To get a more powerful interface to define macros, you could use xparse, with it you could define your macro with

\usepackage{xparse}
\NewDocumentCommand \mynotation { O{P} E{^_}{mb} D(){n} }{\mathbf{#1}^{#2}_{#3}(#4)}


Then you could use

• \mynotation and it would expand to \mathbf{P}^{m}_{b}(n)

• \mynotation[B] and it would expand to \mathbf{B}^{m}_{b}(n)

• \mynotation^{e} and it would expand to \mathbf{P}^{e}_{b}(n)

• \mynotation_{d} and it would expand to \mathbf{P}^{m}_{d}(n)

• \mynotation(x) and it would expand to \mathbf{P}^{m}_{b}(x)

• \mynotation[B]^{e}_{d}(x) and it would expand to \mathbf{B}^{e}_{d}(x), which would be the same as \mynotation[B]_{d}^{e}(x).

• Thanks, exactly what required – PKK Oct 7 '19 at 8:18
• @PetroKolosov take a look at the xparse example. – Skillmon likes topanswers.xyz Oct 7 '19 at 8:22
• Ah, I dont even have this package installed on my tex editor :( [And I don't know how to install it actually :)] – PKK Oct 7 '19 at 8:27
• @PetroKolosov which LaTeX distribution and which version of it do you use? xparse is a pretty standard package that is used by many other packages. If your installation isn't ancient, xparse should be contained in it. – Skillmon likes topanswers.xyz Oct 7 '19 at 8:29
• I use WinEdt 8.1 and MikTeX 2.9 on board, seems that long time i've not updated it – PKK Oct 7 '19 at 8:33

Following the usual notations for projective space, I use:

\documentclass{amsart}
\usepackage{xparse}
\NewDocumentCommand\Proj{e^e_d()}{%
\IfNoValueTF{#1}{\IfNoValueTF{#2}{\mathbb{P}}{\mathbb{P}_{\!#2}}}%
{\IfNoValueTF{#2}{\mathbb{P}^{#1}}{\mathbb{P}^{#1}_{\!#2}}}%
\IfValueTF{#3}{\!\left(#3\right)}{}%
}%
\begin{document}
$$\Proj^n, \Proj_k, \Proj^n_k, \Proj(V), \Proj^n(k)$$
\end{document}

• good suggestion, I'd giva an upvote, but acnnot [too low score] :) – PKK Oct 7 '19 at 9:39