![用拉伸版本替换常规括号](https://linux22.com/image/317574/%E7%94%A8%E6%8B%89%E4%BC%B8%E7%89%88%E6%9C%AC%E6%9B%BF%E6%8D%A2%E5%B8%B8%E8%A7%84%E6%8B%AC%E5%8F%B7.png)
我的博士论文快要写完了,在整个过程中,我几乎一直在使用常规括号,用于所有数学运算。现在,我想用(...)
它们的\left(...\right)
变体替换所有的实例。这是一项非常艰巨的手动任务。
我能想到的最好的办法是一个正则表达式,它可以找到所有没有\left
and\right
前缀的括号对,然后手动检查并进行相应的替换。
这个社区肯定能够想出更好的解决方案?
答案1
警告:以下答案将不是帮助您实现既定目标。相反,它旨在说服您放弃您的计划,因为它表明在数学模式中到处使用\left(
和right)
必然会产生糟糕的印刷效果。
顺便说一句,虽然您在帖子中提到了圆括号,但我认为您还想在此练习中包含方括号、花括号、尖括号、竖线和所有其他(印刷)“栅栏”。
除了需要注意在使用\left
和right
到处时容易出现的三个明显的、主要的印刷问题之外——由此产生的栅栏可能太大了;由此产生的围栏可能是太小;围栏周围的间距可能太宽——你还需要意识到在内联数学\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
!)。因此,无论公式出现在文本块的右侧边缘还是行内的某个位置,此公式也有可能生成过满的行。