\left 和 \right 周围的间距

\left 和 \right 周围的间距

为什么添加\leftand\right会在公式周围引入额外的空格?具体来说,为什么 do$\cos(\theta)$和 的$\cos\left(\theta\right)$渲染方式不同?

有没有办法使用可调整大小的分隔符而不引入虚假空格?

Knuth为什么这样设计呢?

编辑:\operatorname{MYOP}如果使用或 等其他运算符,\lim也会发生这种情况\min。(此编辑基本上是为了更容易找到这个答案。)

答案1

我在 Heiko Oberdiek 和 Donald Arseneau 的 usenet 帖子中找到了答案。感谢 shiznick 改进了代码。

问题在于\left\right引入了一个内部原子(参见 TeXbook,第 18 章,第 4 节),它具有与()(和其他分隔符)产生的普通原子不同的间距规则。

要消除这种虚假间距,必须在公式中手动插入开原子和闭原子。具体来说,$\cos(\theta)$ 和$\cos\mathopen{}\left(\theta\right)\mathclose{}$render 完全相同。

但是,插入它确实会使你的公式变得丑陋。因此,一个好的解决方案是重新定义\left\right

\let\originalleft\left
\let\originalright\right
\renewcommand{\left}{\mathopen{}\mathclose\bgroup\originalleft}
\renewcommand{\right}{\aftergroup\egroup\originalright}

顺便说一句,此代码还修复了 的间距|,这非常脆弱。例如,检查$|+x|$$\left|+x\right|$。还有$\cos|\theta|$$\cos\left|\theta\right|$。这是因为两个分隔符相等,而 TeX 不知道它们是打开还是关闭表达式。同样的逻辑也适用于\|

编辑:旧代码中下标和上标存在问题:它们没有随分隔符的增长而增长。感谢 Philipp Stephani 和 Heiko Oberdiek,这个问题现已得到解决。

答案2

该软件包mathtools已经为该问题实现了一个通用解决方案。它定义了您可以使用的命令,\DeclarePairedDelimiter如下所示:

\DeclarePairedDelimiter\pars{\lparen}{\rparen}

通过这个简单的声明,你就可以获得一个适用于多种情况的强大的新命令:

  • \pars{x}只是替换$(x)$
  • \pars*{x}会做正确的事情(与\leftMateus \rightAraújo 的答案结果相同)
  • \pars[\big]{x}替换$\bigl(x\bigr)$(所有尺寸命令都有效)

答案3

“作为新闻组讨论的结果”,在马特乌斯·阿劳霍的回答Heiko Oberdiek 写道左右包。“它还添加了一些错误检查(组嵌套级别)。”(均引自 Heiko 对 Mateus Araújo 的回答的评论)

\mleft该包中的和\mright可以代替\left\right不要插入额外的空格。

当不应使用额外空间时,还应\left.考虑\right.(见 \right. 起什么作用?)。删除那里的额外空间
\left.\kern-\nulldelimiterspace\right.\kern-\nulldelimiterspace可以使用(最好将它们定义为新命令并使用它们)。

答案4

op使用 LuaTeX,您可以控制原子(例如\cos)与inner原子(由一对原子生成的)之间的间距\left...\right

\documentclass{article}

\Umathopinnerspacing\displaystyle=0mu
\Umathopinnerspacing\textstyle=0mu

\begin{document}

$\cos(\theta)$

$\cos\left(\theta\right)$

\end{document}

在此处输入图片描述

相关内容