我正在使用该amsmath
包,并且我想手动控制分隔符的大小,即使用
\bigl
、\Bigl
、 ... 、\Bigr
、\bigr
命令,而不是\left
、\middle
、\right
。
现在我想创建包含分隔符的宏,并将大小作为参数。例如,如果我有一个\set
宏:
\newcommand{\set}[2]{ \left\{ #1 \,\middle\vert\, #2\right\} }
我想把它变成一个命令,我可以将大小作为参数,即
\set{A}{B}{Big}
应该产生\Bigl\{ A \,\Big\vert\, B\Bigr\}
,或者更好的是,\set{A}{B}{2}
产生这个结果。
是否有类似的命令\leftdelimitersize
可以实现这种宏?
答案1
该软件包mathtools
已经提供了必要的功能;您只需添加使用数字而不是命令\big
和兄弟命令的可能性。
\documentclass{article}
\usepackage{mathtools}
\DeclarePairedDelimiterX{\innset}[2]{\lbrace}{\rbrace}{%
#1\;\delimsize\vert\;#2}
\newcommand{\set}[3][0]{%
\ifcase#1\relax
\innset{#2}{#3}\or % 0
\innset[\big]{#2}{#3}\or % 1
\innset[\Big]{#2}{#3}\or % 2
\innset[\bigg]{#2}{#3}\or % 3
\innset[\Bigg]{#2}{#3} % 4
\else
\innset*{#2}{#3}
\fi}
\begin{document}
\begin{gather*}
\set{A}{\frac{B}{C}}\\
\set[0]{A}{\frac{B}{C}}\\
\set[1]{A}{\frac{B}{C}}\\
\set[2]{A}{\frac{B}{C}}\\
\set[3]{A}{\frac{B}{C}}\\
\set[4]{A}{\frac{B}{C}}\\
\set[-1]{A}{\frac{B}{C}}
\end{gather*}
\end{document}
如果数字不在 0–4 范围内,则将使用带有\left
、\middle
和 的版本。\right
答案2
如果您准备将类似的东西Big
作为参数,那么对您的请求的一个简单解决方案就是\csname ...\endcsname
根据需要使用来生成命令名称,例如,
\newcommand\set[3]{\csname #3l\endcsname\{#1%
\,\csname#3\endcsname\vert\,%
#2\csname #3r\endcsname\}}
如果您想通过数值参数生成所需的命令,请考虑使用\ifcase
。