# automatic size adjustment for nested parentheses

As I prefer outer parentheses to grow larger in nested expressions, I happen to insert \bigl and \bigr and its larger cousins a lot. I have always wondered whether there is a way to do this automagically.

Inserting \left and \right prophylacticly before all opening and closing parentheses and hoping that it sorts things out doesn't do the trick in all cases as seen below.

The left column is without any size changing commands. The middle column as a \left \right pair at every parentheses/brace/bracket and the rightmost column shows my preferred version.

As seen in the middle column of the second and third line the \left and \right pair sometimes makes the outer parentheses larger, on the cost of an extra horizontal space between \Pr and (. The extra space is fine in case of really big opening parentheses but here I'd prefer the regular spacing.

\documentclass{scrartcl}
\usepackage{amsmath}
\usepackage{amsfonts}
\begin{document}
\begin{align*}
&1-(1-F(x))^n&&1-\left(1-F(x)\right)^n&&1-\bigl(1-F(x)\bigr)^n\    &\Pr(X_{(1)}\le x)&&\Pr\left(X_{(1)}\le x\right)&&\Pr\bigl(X_{(1)}\le x\bigr)\    &\mathbb{E}[\min\{X_1,X_2\}]&&\mathbb{E}\left[\min\left\{X_1,X_2\right\}\right]&&\mathbb{E}\bigl[\min\left\{X_1,X_2\right\}\bigr]\    &\left(\pi-\arccos(\frac{y}{r})\right)&&(\pi-\arccos\left(\frac{y}{r}\right))&&\left(\pi-\arccos \left(\frac{y}{r}\right)\right)
\end{align*}
\end{document}


As mathematical expressions can be arbitrarly complex there is probably no general way to do this. But I’m not asking for a solution of the general case. A partial solution that works in the simple cases shown above would be a big help. The simple rule could be, that parentheses never shrink below the size of an inner pair. Of course you can immediately think of extensions like a \mid in a conditional expectation that grows with the size of the expectation’s brackets.

What is your preference regarding the size of nested parentheses? Is there a better way to archieve your preferred style despite inserting \bigl \bigr manually?

EDIT:

A colleague pointed me to section 8.3 of Herbert Voß’ mathmode document where size problems with parentheses are solved by playing with two TeX parameters within a group around the expression in question. This led naturally to appendix G of the TeXbook where the mechanics of \delimitershortfall and \delimiterfactor are explained.

\delimitershortfall specifies the maximum space not covered by a delimiter (default 5pt) and \delimiterfactor is the ratio for variable delimiters, times 1000 (default 901).

I used them to implement the never shrink below a subformular size idea from above by setting the shortfall to 0pt and the ratio to 1.0.

While it works nicely in line one and three, in line two and four the parentheses now grow too much, and still there is the extra horizontal space introduced by \left.

-
I tend to use square brackets when this is causing a problem. In general I use left and right most of the time and let the equations be as wide as they need to be. Is there a particular reason that it bothers you? –  qubyte Nov 24 '11 at 12:18
@Mark In words like Schifffahrt a sequence of the same letter looks strange. I think it is the same with a sequence of same size parentheses (((. Of course I could use [{( but I find the variation in the size nicer to look at. –  uli Nov 24 '11 at 12:27
Journals tend to recommend mixing the parentheses to save some space. Also one should be a bit careful about the sizes. Sometimes there is no need to use huge parentheses around a long equation, if the large part is in the middle and it is not large (above/below) at the ends. I tend to recommend users to scale such that it is clear what is being fenced in, but also such that the parentheses do not dominate the expression. –  daleif Nov 24 '11 at 12:48
@mbork: Maybe I don't quite understand what you mean, but isn't the \left...\right mechanism from the TeX core already a two-pass system? At the opening \left, TeX doesn't know yet what size the delimiter should have. Moreover, nesting \left...\right also works. –  Hendrik Vogt Jun 25 '12 at 7:42
@l-spice Your question is not foolish, indeed there is a '\left \right'-pair missing. –  uli Jan 5 at 7:25

The nath package with \delimgrowth=1 is very close to your preferred style.

\documentclass{article}
\usepackage{amssymb}
\usepackage{nath}
\delimgrowth=1

\begin{document}
$$1 - (1-F(x))^n \ \Pr(X_{(1)} \le x) \ \mathbb{E}[\min\{X_1, X_2\} ] \ ( \pi - \arccos (\frac {y}{r}) )$$
\end{document}


Read the nath guide for details, especially the part about incompatibility with amsmath.

-
@Herbert, Aditya if I could only accept both answers. But as I have to choose... I love the nath solution for its easier to read latex source, nothing is cluttered with \left and \right. –  uli Dec 3 '11 at 20:59
The link to "nath guide" is dead. –  Thruston Sep 28 '14 at 11:21
Here's a current one: ctan.org/pkg/nath –  Thruston Sep 28 '14 at 11:21

Use it this way with a small negative space between two large parentheses:

\documentclass{scrartcl}
\usepackage{amsmath}
\begin{document}
\delimitershortfall=-1pt
\begin{align*}
\left(\pi-\arccos \left(\frac{y}{r}\right)\right)\\
\left(\pi-\arccos \left(\frac{y}{r}\right)\!\right)
\end{align*}
\end{document}


here is an idea how it can be done with a double (( and/or )). It is also possible to use \left((...( and a \right))...). only the number of \left and \right parentheses must correspond to each other

\documentclass{scrartcl}
\usepackage{amsmath}

\delimitershortfall=-1pt
\let\Right\right
\let\Left\left
\makeatletter
\def\right#1{\Right#1\@ifnextchar){\!\right}{}}
\def\left#1{\Left#1\@ifnextchar({\!\left}{}}
\makeatother
\begin{document}
\begin{align*}
\left(\pi-\arccos \left(\frac{y}{r}\right)\right)\\
\left(\pi-\arccos \left(\frac{y}{r}\right))\\
\left((\pi-\arccos \left(\frac{y}{r}\right)))\\
\left(\left(x + \frac12\right)\arccos(\pi)\right)\\
\left((x + \frac12\right)\arccos(\pi)\right)
\end{align*}
\end{document}


-
Can you think of a way to automate this? Do you think \mathinner could somehow be helpful here? –  morbusg Nov 27 '11 at 11:55
@morbusg: I edited my answer –  Herbert Nov 27 '11 at 19:52
Yeah, I noticed (and your reply to the \mathinner as well; thanks for that!), very nice! (+1) –  morbusg Nov 27 '11 at 19:57