看到答案后这个问题我意识到我更喜欢 Juan A. Navarro 的回答方式:
- ie,
\DeclarePairedDelimiter{\parens}{\lparen}{\rparen}
frommathtools
是一个很棒的工具,它能给你\parens{…}
不能调整高度,\parens*{…}
,可自动调整高度,- 即
\parens[\bigg]{…}
,其结果是您指定的大小。
\newdelimcommand{\parens}{\lparen}{\rparen}
从我链接的答案中得到\parens{…}
自动调整高度,\parens*{…}
,不调整高度,- 即
\parens[bigg]{…}
,其结果是您指定的大小。
我更喜欢第二种工作方式,而不是mathtools
。但是,您获得的间距是错误的(就像您使用\left(
而不是 一样\biggl(
)。我尝试使用\usepackage{mleftright} \mleftright
Juan A. Navarro 的代码,但没有成功。所以我的问题是
我怎样才能获得我链接的答案的样式但具有正确的间距(如mathtools)?
可能交换mathtools
带星号和不带星号的行为(加上bigg
而不是\bigg
)更容易,或者重写 Juan A. Navarro 的代码更容易。
编辑: 嗯,我读到了这里, 进而这里。最后一个完全回答了我的问题,只是带星号的版本不起作用。
以下是代码:
\documentclass{scrartcl}
\usepackage{mathtools}
\usepackage{etextools}
\usepackage{ifthen}
\makeatletter
\newcommand{\DeclarePairedDelimiterCase}[2]{%
\newcommand#1[1][]{%
\ifthenelse{\equal{##1}{normal}}%
{#2}%
{%
\ifthenelse{\equal{##1}{big}\OR\equal{##1}{Big}\OR\equal{##1}{bigg}\OR\equal{##1}{Bigg}}%
{\expandnext{#2[}{\csname##1\endcsname}]}%
{#2*}% % standard case using \left and \right
}%
}%
}
\newcommand{\DeclarePairedDelimiterY}[4][Temp]{%
\expandafter\DeclarePairedDelimiter\csname#2#1\endcsname{#3}{#4}%
\expandnext{\expandnext{\DeclarePairedDelimiterCase}{\csname#2\endcsname}}{\csname#2#1\endcsname}%
}
\newcommand{\DeclarePairedDelimiterXY}[6][Temp]{%
\expandafter\DeclarePairedDelimiterX\csname#2#1\endcsname[#3]{#4}{#5}{#6}%
\expandnext{\expandnext{\DeclarePairedDelimiterCase}{\csname#2\endcsname}}{\csname#2#1\endcsname}%
}
\makeatother
\DeclarePairedDelimiterY{set}{\lbrace}{\rbrace}
\DeclarePairedDelimiter{\pa}{\lparen}{\rparen}
\begin{document}
\begin{align*}
\liminf \set*{\sum}
\end{align*}
\end{document}
然后我得到的lim inf{*}∑
却不是我想要的lim inf{∑}
。
编辑2: 我意识到我之前使用过的那个有一些我确实需要的额外选项:
\parens{…}
并且\parens[auto]{…}
应该是自动调整大小。\parens*{…}
并且\parens[base]{…}
应该是基本的(没有缩放)。- 其余部分如我之前所述
\parens[bigg]{…}
,以便手动缩放。
答案1
我仍然认为应该\left
使用\right
真的需要,任何形式的自动化都是不好的。
不过,这里有一个简单的在职的你的宏的实现,我称之为\xDeclarePairedDelimiter
\documentclass{scrartcl}
\usepackage{mleftright,xparse}
\NewDocumentCommand\xDeclarePairedDelimiter{mmm}
{%
\NewDocumentCommand#1{som}{%
\IfNoValueTF{##2}
{\IfBooleanTF{##1}{#2##3#3}{\mleft#2##3\mright#3}}
{\mathopen{##2#2}##3\mathclose{##2#3}}%
}%
}
\xDeclarePairedDelimiter{\set}{\lbrace}{\rbrace}
\begin{document}
\begin{align*}
&\liminf \set{\sum}\\
&\liminf \set*{\sum}\\
&\liminf \set[\big]{\sum}\\
&\liminf \set[\Big]{\sum}
\end{align*}
\end{document}
答案2
让我容易地改变行为,而无需定义新的命令,例如\xDeclarePairedDelimiter
\documentclass[12pt]{article}
\usepackage{mathtools}
\usepackage{etoolbox}
\DeclarePairedDelimiter{\avg}{\langle}{\rangle}
\newcommand\swapifbranches[3]{#1{#3}{#2}}
\makeatletter
\MHInternalSyntaxOn
\patchcmd{\DeclarePairedDelimiter}{\@ifstar}{\swapifbranches\@ifstar}{}{}
\MHInternalSyntaxOff
\makeatother
\DeclarePairedDelimiter{\mean}{\langle}{\rangle}
\begin{document}
$\avg{\displaystyle\sum_0^1}$ $\avg*{\displaystyle\sum_0^1}$
$\mean{\displaystyle\sum_0^1}$ $\mean*{\displaystyle\sum_0^1}$
\end{document}