![如何用命令来定义符号?](https://linux22.com/image/402769/%E5%A6%82%E4%BD%95%E7%94%A8%E5%91%BD%E4%BB%A4%E6%9D%A5%E5%AE%9A%E4%B9%89%E7%AC%A6%E5%8F%B7%EF%BC%9F.png)
有一个符号:
\mathbf{P}^{m}_{b}(n)
如何使用来定义它\newcommand
?
PS 变量 m、b、n 应该作为参数
答案1
在 LaTeX 中,您可以使用 来定义一个新宏\newcommand
。\newcommand
可以有一个可选的星号,它决定新创建的宏的参数是否可以包含一个\par
(或两个连续的换行符)。接下来是新宏的名称。之后是两个可选参数,第一个指定参数的数量,第二个如果使用则定义可选参数的默认值,该参数始终是第一个参数。之后是宏的定义。
\newcommand*\mycmd{my replacement}
定义一个新的宏,称为,展开时\mycmd
被替换为。my replacement
\newcommand\mycmd[1]{my replacement with the argument ``#1''}
定义一个接受一个参数的新宏。正确用法如下\mycmd{mandatory}
。
\newcommand\mycmd[2][default]{optional argument: ``#1''; mandatory argument: ``#2''}
定义一个带有两个参数的新宏,第一个是可选的,第二个是必选的。正确的用法应该是\mycmd[optional]{mandatory}
或\mycmd{mandatory}
。
因此,就你的情况而言,如果什么都不需要改变,你可以使用
\newcommand*\mysymbol{\mathbf{P}^{m}_{b}(n)}
如果你希望索引灵活,你可以使用
\newcommand\mynotation[2]{\mathbf{P}^{#1}_{#2}(n)}
然后您就可以\mynotation{m}{b}
在文档中使用。
如果也P
应该是可变的,你可以使用类似
\newcommand\mynotation[3][P]{\mathbf{#1}^{#2}_{#3}(n)}
然后您可以使用\mynotation[P]{m}{b}
或\mynotation{m}{b}
。
如果你甚至希望它(n)
是变量,你可以添加另一个参数
\newcommand\mynotation[4][P]{\mathbf{#1}^{#2}_{#3}(#4)}
然后\mynotation[P]{m}{b}{n}
或者\mynotation{m}{b}{n}
就可以使用。
为了获得更强大的接口来定义宏,你可以使用xparse
,你可以用它定义你的宏
\usepackage{xparse}
\NewDocumentCommand \mynotation { O{P} E{^_}{mb} D(){n} }{\mathbf{#1}^{#2}_{#3}(#4)}
然后你可以使用
\mynotation
它会扩大到\mathbf{P}^{m}_{b}(n)
\mynotation[B]
它会扩大到\mathbf{B}^{m}_{b}(n)
\mynotation^{e}
它会扩大到\mathbf{P}^{e}_{b}(n)
\mynotation_{d}
它会扩大到\mathbf{P}^{m}_{d}(n)
\mynotation(x)
它会扩大到\mathbf{P}^{m}_{b}(x)
\mynotation[B]^{e}_{d}(x)
它将扩展为\mathbf{B}^{e}_{d}(x)
,这与 相同\mynotation[B]_{d}^{e}(x)
。
答案2
按照射影空间的通常符号,我使用:
\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}