LaTeX 技巧939:使用比逼格更逼格的定界符

通常,我们建议在 LaTeX 中使用 LaTeX 提供的 \big, \Big, \bigg, \Bigg 一系列命令,代替 TeX 默认的 \left 和 \right来调整定界符的大小。然而,尽管最大提供了 \Bigg 的命令,但有时候仍然不够用。

此篇介绍如何定义 \biggg, \Biggg, \bigggg 和 \Bigggg 系列命令。我们的口号是「比逼格更逼格」(bigger than bigger)!

挖掘代码

\big 系列命令

要定义更大的定界符修饰,就必须搞清楚 \big 系列命令是如何定义的。首先,我们使用 kpsewhich amsmath.sty 找到 amsmath.sty 在系统中的路径。而后打开样式文件,搜寻 \big 的定义。

\renewcommand{\big}{\bBigg@\@ne}
\renewcommand{\Big}{\bBigg@{1.5}}
\renewcommand{\bigg}{\bBigg@\tw@}
\renewcommand{\Bigg}{\bBigg@{2.5}}

\bBigg@ 命令

显而易见,核心是 \bBigg@ 这个命令。它可以根据其后第一个 token 决定定界符的放大程度。注意,这里 \@ne 表示 {1},而 \tw@ 表示 {2}——这是令人讨厌的 LaTeX 内核编程 trick。于是我们继续去寻找 \bBigg@ 的定义。

\def\bBigg@#1#2{%
  {\@mathmeasure\z@{\nulldelimiterspace\z@}%
     {\left#2\vcenter to#1\big@size{}\right.}%
   \box\z@}}

很显然,\bBigg@ 命令内部也是通过 TeX 原始的 \left 和 \right 命令来调整定界符(#2)的大小的。不过,它还额外处理了左右的空距。这里我们知道就行了,不去深究。

\bigl 和 \bigr 系列命令

接下来我们继续挖掘 \bigl 和 \bigr 系列命令的定义。它们定义在 LaTeX2e 内核当中,因此我们通过执行 texdoc source2e 就能看到它们的定义了。

\def\bigl{\mathopen\big}
\def\bigm{\mathrel\big}
\def\bigr{\mathclose\big}
\def\Bigl{\mathopen\Big}
\def\Bigm{\mathrel\Big}
\def\Bigr{\mathclose\Big}
\def\biggl{\mathopen\bigg}
\def\biggm{\mathrel\bigg}
\def\biggr{\mathclose\bigg}
\def\Biggl{\mathopen\Bigg}
\def\Biggm{\mathrel\Bigg}
\def\Biggr{\mathclose\Bigg}

很显然,它们就只是用 \mathopen, \mathrel 和 \mathclose 宏来修饰了一下对应的定界符修饰命令。

改造

据此,我们可以定义更有逼格的定界符修饰命令了。

% \RequirePackage{amsmath}

\newcommand{\biggg}{\bBigg@{3}}
\def\bigggl{\mathopen\biggg}
\def\bigggm{\mathrel\biggg}
\def\bigggr{\mathclose\biggg}
\newcommand{\Biggg}{\bBigg@{3.5}}
\def\Bigggl{\mathopen\Biggg}
\def\Bigggm{\mathrel\Biggg}
\def\Bigggr{\mathclose\Biggg}
\newcommand{\bigggg}{\bBigg@{4}}
\def\biggggl{\mathopen\bigggg}
\def\biggggm{\mathrel\bigggg}
\def\biggggr{\mathclose\bigggg}
\newcommand{\Bigggg}{\bBigg@{4.5}}
\def\Biggggl{\mathopen\Bigggg}
\def\Biggggm{\mathrel\Bigggg}
\def\Biggggr{\mathclose\Bigggg}

注意,这段代码在普通的 LaTeX 文档中,需要使用 \makeatletter 和 \makeatother 来改变 @ 字符的分类码,以便正确定义命令。

接下来我们实际使用看看。

\documentclass{article}

\usepackage{amsmath}

\makeatletter
\newcommand{\biggg}{\bBigg@{3}}
\def\bigggl{\mathopen\biggg}
\def\bigggm{\mathrel\biggg}
\def\bigggr{\mathclose\biggg}
\newcommand{\Biggg}{\bBigg@{3.5}}
\def\Bigggl{\mathopen\Biggg}
\def\Bigggm{\mathrel\Biggg}
\def\Bigggr{\mathclose\Biggg}
\newcommand{\bigggg}{\bBigg@{4}}
\def\biggggl{\mathopen\bigggg}
\def\biggggm{\mathrel\bigggg}
\def\biggggr{\mathclose\bigggg}
\newcommand{\Bigggg}{\bBigg@{4.5}}
\def\Biggggl{\mathopen\Bigggg}
\def\Biggggm{\mathrel\Bigggg}
\def\Biggggr{\mathclose\Bigggg}
\makeatother

\begin{document}

\[
    \Biggggl[\biggggl[\Bigggl[\bigggl[\Biggl[\biggl[\Bigl[\bigl[[ x ]\bigr]\Bigr]\biggr]\Biggr]\bigggr]\Bigggr]\biggggr]\Biggggr]
\]

\end{document}

aa_1_看图王.png

选自:https://liam.page/2018/11/09/the-bigger-than-bigger-delimiter-in-LaTeX/ 

分享到:
未经允许不得转载:LaTeX 技巧939:使用比逼格更逼格的定界符
已有 条意见

    最新文章

    加载中...
      本站提供专业LaTeX排版、咨询、定制服务,请点击下图咨询详情


      全国首个精品的LaTeX视频教程,大牛带着你入门,让LaTeX学习不再纠结,请点击下图咨询详情

      热门评论

        联系我们

        交流QQ群:91940767
        本站QQ号:343083553
        邮箱联系latexstudio@qq.com
        淘宝店铺latexstudio.taobao.com 提供排版,模板定制,培训,图片处理,视频教程等LaTeX服务。

        关注微信公众号: latex2015

        如果您投稿或者希望加入我们团队,请发送您的简历到latexstudio@qq.com。

        科技艺术的完美融合,专业精致的排版体验

        联系我们联系我们