\left
和\right
很方便,但有时它们会过分拉长括号。在这种情况下,我们可以手动使用\bigl
、\Bigl
等。
我已经定义了一个像这样的新命令
\newcommand{\avg}[1]{\ensuremath{\left\langle #1 \right\ranlge}}
我希望此命令具有自动拉伸功能,但我不想让此机制过早启动。使用此定义,\avg{x^2}
已经有比 更大的括号\avg{x}
。我宁愿根本不使用这种级别的拉伸。但是,我希望它\avg{\frac{x}{2}}
在显示模式下使用拉伸。类似这样的操作会很好:1. 在内联数学中根本不拉伸 2. 在显示数学中,当超过某个大小阈值时正常拉伸,但不要低于此阈值。
有没有简单的\left\langle ... \right\rangle
实现这个的方法是什么?当我真的需要拉伸的时候,也许手动使用会更省事。
答案1
您可以设置\delimiterfactor
延迟拉伸的开始,但是即使括号不拉伸,\left
\right
也会生成影响水平间距的数学内部原子(并防止换行)。
(纯文本)
\def\x#1{\left({\vrule height#1pt}_{#1}a+b\right)}
$\x{08}\x{10}\x{12}\x{14}\x{16}\x{20}\x{24}$
{\delimiterfactor400
\delimitershortfall\maxdimen
$\x{08}\x{10}\x{12}\x{14}\x{16}\x{20}\x{24}$
}
\def\x#1{({\vrule height#1pt}_{#1}a+b)}
$\x{08}\x{10}\x{12}\x{14}\x{16}\x{20}\x{24}$
\bye
在真实的例子中,您可以将其设置\delimitershortfall
为较小的长度以阻止括号变得太小,设置为此\maxdimen
处以突出显示效果。
答案2
这是一个相当简单的解决方案,还没有经过广泛的测试:
\documentclass{article}
\usepackage{mathstyle}% http://ctan.org/pkg/mathstyle
\usepackage{multido}% http://ctan.org/pkg/multido (just for this example)
\makeatletter
\newcommand{\getmathstyle}{% https://tex.stackexchange.com/a/78874/5764
\global\edef\curmathstyle{%
\expandafter\@gobble\mathchoice{\@@displaystyle}{\@@textstyle}{\@@scriptstyle}{\@@scriptscriptstyle}}
}
\makeatother
\let\oldleft\left
\def\left#1#2\right#3{
\getmathstyle\sbox0{$\curmathstyle#2$}
\ifdim\ht0<20pt\relax
#1#2#3
\else
\oldleft#1#2\right#3
\fi
}
\begin{document}
$\multido{\i=10+2}{10}{
\begin{array}{c}
\texttt{\i pt} \\
\left(\rule{1pt}{\i pt}\right)%
\rule[-30pt]{0pt}{60pt}% Add a strut for visual clarity
\end{array}
}$
\end{document}
切换到常规\left
...\right
用法的阈值是20pt
(当然是可变的)。我不习惯处理 TeX 基元,因此使用此解决方案时要格外谨慎。
数学样式捕获的选择取自如何捕捉当前的数学风格?