为什么添加\left
and\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}
会做正确的事情(与\left
Mateus\right
Araú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
可以使用(最好将它们定义为新命令并使用它们)。