使用 \left 自动拉伸括号

使用 \left 自动拉伸括号

\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 基元,因此使用此解决方案时要格外谨慎。

数学样式捕获的选择取自如何捕捉当前的数学风格?

相关内容