编写一个 tex 包以实现更好的自动括号

编写一个 tex 包以实现更好的自动括号

提供的自动括号大小调整功能\left ... \right经常会产生过大的括号。我想要一个包,它可以根据给定的公式找到正确的括号大小,\big, \Big, \bigg, \Bigg例如以下情况(左侧是自动调整大小,右侧是使用\big在此处输入图片描述

不会选择比公式大的最小选项,而是选择从技术上讲可能有点太小的选项(启发式地……例如:如果从技术上较小的一个到我的公式最高点的距离小于从较大的一个到我的公式最高点的距离,那么就选择较小的一个)。

我的问题是:

  1. 你知道有这样的包裹吗
  2. 如果不是,您认为编写这样的程序有多难(对于没有 Tex 编程经验的人来说)?

答案1

我想要一些能够根据给定公式自动找到正确括号大小的包。

我担心你最好开始寻找圣杯 :-) 说真的:当 Knuth 创建 TeX 时,他无法想出一个例程,可以针对每个可以想到的公式自动确定“正确”的分隔符大小——过去 40 多年里也没有其他人能做到。从内心深处,我怀疑这是因为精美的排版既是一门艺术,也是一门手艺。只要有足够的时间和资源,手艺最终可能会(在很大程度上)实现自动化。相比之下,我怀疑艺术可以曾经自动化,可能是因为艺术涉及个人情感,而这种情感对每个人来说都是高度具体的。一件对某些人“说话”的艺术品可能会让其他人完全冷漠,对吧?

数学工具包提供了一个名为的宏\DeclarePairedDelimiter,它大大简化了创建宏的过程,将某种形状和大小的分隔符放置在宏参数的左侧和右侧。例如。

\DeclarePairedDelimiter{\norm}{\lVert}{\rVert}

创建两个宏:\norm*,它自动调整分隔符的大小,\norm,它使用可选参数来设置分隔符所需的大​​小。例如,\norm[\big]{...}将双竖线设置为其\big大小。

虽然我怀疑(希望?!)我们大多数人都愿意同意这样的说法,即自动调整大小的分隔符对于诸如这样的简单公式来说太大\hat{f},但我也怀疑,对于或是否\norm{\hat{f}}产生\norm[\big]{\hat{f}}更好的结果,不太可能达成这样的共识。

重要的是,决定还可能取决于标准项中是否存在“下标”项。就我个人而言(还有谁?!),我很可能相信 在\norm[\big]{\hat{f}}某种程度上“看起来更好”(实际上只是“稍微好一点”)比\norm{\hat{f}}更好(见第二行)。但我也可能相信\norm{\hat{f}}^{}_{L^1(\mathbf{R}^d)}比 更好\norm[\big]{\hat{f}}_{L^1(\mathbf{R}^d)},可能是因为前一个表达式努力手动调整(见^{}粒子)下标位置项的垂直位置(此处:L^1(\mathbf{R}^d))。最后,对于整体美感而言,下标的“正确”定位可能比垂直分隔符的大小更重要。

在此处输入图片描述

\documentclass{article} % or some other suitable document class
\usepackage{mathtools}  % for '\DeclarePairedDelimiter' macro
\DeclarePairedDelimiter{\norm}{\lVert}{\rVert}

\begin{document}
$-\left\Vert \hat{f} \right\Vert_{L^1(\mathbf{R}^d)} % automatic sizing
  \
  \norm*{\hat{f}}_{L^1(\mathbf{R}^d)}
  \
  \norm{\hat{f}}_{L^1(\mathbf{R}^d)}
  \
  \norm[\big]{\hat{f}}_{L^1(\mathbf{R}^d)}
  \
  \norm{\hat{f}}^{}_{L^1(\mathbf{R}^d)}-$

\bigskip

$-\left\Vert \hat{f} \right\Vert % automatic sizing
  \
  \norm*{\hat{f}}
  \
  \norm{\hat{f}}
  \
  \norm[\big]{\hat{f}}-$
\end{document}

答案2

最后,我通过编写一个 (Julia) 脚本解决了我的问题,该脚本遍历键入的 tex 代码并以预定义的样式替换括号。当然,这是一个额外的步骤,在运行脚本之前,在渲染的 pdf 中看不到正确大小的括号,但除此之外,它运行良好。

相关内容