用拉伸版本替换常规括号

用拉伸版本替换常规括号

我的博士论文快要写完了,在整个过程中,我几乎一直在使用常规括号,用于所有数学运算。现在,我想用(...)它们的\left(...\right)变体替换所有的实例。这是一项非常艰巨的手动任务。

我能想到的最好的办法是一个正则表达式,它可以找到所有没有\leftand\right前缀的括号对,然后手动检查并进行相应的替换。

这个社区肯定能够想出更好的解决方案?

答案1

警告:以下答案将不是帮助您实现既定目标。相反,它旨在说服您放弃您的计划,因为它表明在数学模式中到处使用\left(right)必然会产生糟糕的印刷效果。

顺便说一句,虽然您在帖子中提到了圆括号,但我认为您还想在此练习中包含方括号、花括号、尖括号、竖线和所有其他(印刷)“栅栏”。

除了需要注意在使用\leftright到处时容易出现的三个明显的、主要的印刷问题之外——由此产生的栅栏可能太大了;由此产生的围栏可能是太小;围栏周围的间距可能太宽——你还需要意识到在内联数学\left情况。基本上,TeX 不会在由和分隔的术语内插入换行符\right;这很容易导致行溢出。此外,如果公式由和分隔,TeX 无法调整二进制和关系运算符(例如+和)周围的间距;这也很容易导致行溢出。=left\right

考虑以下代码

\documentclass{article}
\usepackage[textwidth=1mm]{geometry} % choose a very narrow text block
\setlength\parindent{0pt}            % just for this example
\begin{document}
$((a+b)\allowbreak(c+d))$

\bigskip
$\bigl((a+b)\allowbreak(c+d)\bigr)$

\bigskip
$\left(\left(a+b\right)\allowbreak\left(c+d\right)\right)$

\bigskip
$\left(a+b\right)$
\end{document}

生成以下输出:

在此处输入图片描述

对于前两个不包含\left\right指令的公式,LaTeX 能够找到三个潜在的换行符。相比之下,第三个公式包含三个\left(和三个\right)指令,尽管存在一个\allowbreak语句,却没有“找到”一个换行符。如果这样的公式出现在文本块右边缘附近的任何地方,几乎肯定会导致行过满。顺便说一句,除了没有换行点之外,该\left(\left(a+b\right)\allowbreak\left(c+d\right)\right)公式还有两个额外的缺陷:外括号并不比内括号大,内括号之间的空间过大。

也请研究一下第四个公式:它不仅在符号后没有换行符+,而且符号周围的间距+也没有减小(因为 TeX 不允许在构造内部这样做\left...\right!)。因此,无论公式出现在文本块的右侧边缘还是行内的某个位置,此公式也有可能生成过满的行。

相关内容