活动分隔符以获取正确的分隔符大小

活动分隔符以获取正确的分隔符大小

我曾经在《Die Texnische Komödie 1/2011》中读到,可以将圆形分隔符()激活,因此您不再需要使用它们\left(\right)。代码如下:

\makeatletter
\def\resetMathstrut@{%
    \setbox\z@\hbox{%
        \mathchardef\@tempa\mathcode`\[\relax
        \def\@tempb##1"##2##3{\the\textfont"##3\char"}%
        \expandafter\@tempb\meaning\@tempa \relax
    }%
    \ht\Mathstrutbox@\ht\z@ \dp\Mathstrutbox@\dp\z@}
\makeatother
\begingroup
\catcode`(\active \xdef({\left\string(}
\catcode`)\active \xdef){\right\string)}
\endgroup
\mathcode`(="8000 \mathcode`)="8000
\setlength\delimitershortfall{-1pt}

\makeatletter
\catcode`\_\active
\def_#1{\sb{\operator@font#1}}
\makeatother

不要问我细节,我对此不感兴趣。

现在我想知道是否可以改变[]并且采用\{\}相同的方式,这样您就不需要再使用\left...\right...“正常”分隔符了。

感谢您的帮助!

梅威瑟:

\documentclass{scrartcl}
\usepackage{amsmath}
\makeatletter
\def\resetMathstrut@{%
    \setbox\z@\hbox{%
        \mathchardef\@tempa\mathcode`\[\relax
        \def\@tempb##1"##2##3{\the\textfont"##3\char"}%
        \expandafter\@tempb\meaning\@tempa \relax
    }%
    \ht\Mathstrutbox@\ht\z@ \dp\Mathstrutbox@\dp\z@}
\makeatother
\begingroup
\catcode`(\active \xdef({\left\string(}
\catcode`)\active \xdef){\right\string)}
\endgroup
\mathcode`(="8000 \mathcode`)="8000
\setlength\delimitershortfall{-1pt}

\makeatletter
\catcode`\_\active
\def_#1{\sb{\operator@font#1}}
\makeatother


\begin{document}
    \begin{align}
        ((((a+b)(a-b))))=a^2-b^2
    \end{align}
\end{document}

答案1

(您可以重复使用with的定义[,但实际上您不应该这样做,设置 with\delimitershortfall和过度使用\leftand\right会产生非常糟糕的设置,其中分隔符和水平空间过大。自动化此布局应该不是目标!

在此处输入图片描述

\documentclass{scrartcl}
\usepackage{amsmath}
\makeatletter
\edef\zzz{\the\mathcode`\[}
\def\resetMathstrut@{%
    \setbox\z@\hbox{%
        \mathchardef\@tempa\zzz\relax
        \def\@tempb##1"##2##3{\the\textfont"##3\char"}%
        \expandafter\@tempb\meaning\@tempa \relax
    }%
    \ht\Mathstrutbox@\ht\z@ \dp\Mathstrutbox@\dp\z@}
\makeatother



\begingroup
\catcode`(\active \xdef({\left\string(}
\catcode`)\active \xdef){\right\string)}
\endgroup
\mathcode`(="8000 \mathcode`)="8000

\begingroup
\catcode`[\active \xdef[{\left\string[}
\catcode`]\active \xdef]{\right\string]}
\endgroup
\mathcode`[="8000 \mathcode`]="8000


\setlength\delimitershortfall{-1pt}





\begin{document}

    \begin{align}
        ((((a+b)(a-b))))=a^2-b^2 \\ \relax
        [[[[a+b][a-b]]]]=a^2-b^2
    \end{align}
\end{document}

相关内容