![如何声明“括号式”数学运算符](https://linux22.com/image/372053/%E5%A6%82%E4%BD%95%E5%A3%B0%E6%98%8E%E2%80%9C%E6%8B%AC%E5%8F%B7%E5%BC%8F%E2%80%9D%E6%95%B0%E5%AD%A6%E8%BF%90%E7%AE%97%E7%AC%A6.png)
这个问题很可能之前就被问过,但我无法以能够产生相关搜索结果的方式清晰地表达这个问题。
如何声明数学运算符来简化诸如 之类的表达式\langle x, y \rangle
?我希望能够定义类似的东西\innerproduct{x, y}
。
答案1
我建议您加载该mathtools
包并使用其\DeclarePairedDelimiter
宏来定义一个名为的宏,例如\inprod
。此方法会自动声明一个名为的配套宏,该宏会自动调整尖括号的大小。也可以通过编写、等\inprod*
直接控制“围栏”的大小。\inprod[\big]{...}
\inprod[\Big]{...}
\documentclass{article}
\usepackage{mathtools}
\DeclarePairedDelimiter\inprod\langle\rangle
\begin{document}
$\inprod{a,b}$
$\displaystyle \inprod*{\frac{a}{b},\frac{c}{d}}$
\end{document}
答案2
该解决方案的一个变体,使用和包mathtools
来处理空参数。它使用两个参数,用逗号分隔;如果某个参数为空,则用点替换:xparse
etoolbox
\documentclass{article}
\usepackage{mathtools, nccmath}
\usepackage{xparse, etoolbox}
\DeclarePairedDelimiterX{\innerp}[1]{\langle}{\rangle}{\innpargs{#1}}
\NewDocumentCommand{\innpargs}{>{\SplitArgument{1}{,}}m}
{\innpargsaux#1}
\NewDocumentCommand{\innpargsaux}{mm}
{\ifblank{#1}%
{\ifblank{#2}{\,\cdot\,{,}\,\cdot\,}{{\,\cdot \,}{,}{\mkern2mu#2}}}%
{{#1\,}{,}\ifblank{#2}{\,\cdot\,}{\mkern2mu#2}}%
}%
%}%
\begin{document}
\[ \innerp{x, y}, \quad \innerp[\big]{\tfrac{1}{2}x, y} \quad \innerp*{\frac{x}{2}, y}\quad\innerp{x , }\quad \innerp{ , y}\quad \innerp{ , }\]
\end{document}
答案3
事实上我记得有一次关于这个的对话,但我可能需要一段时间才能找到它。与此同时:
\documentclass{article}
\def\iprelay#1,#2{\langle#1,#2\rangle}
\def\ip#1{\iprelay#1}
\begin{document}
\[
\ip{a,b}
\]
\end{document}