%20die%20gleiche%20Gr%C3%B6%C3%9Fe%20haben%3F.png)
This code
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{align*}
\begin{split}
z = \left( a + b + c \right. \\
\left. + \frac{d}{e} \right)
\end{split}
\end{align*}
\end{document}
erzeugt die folgende Ausgabe:
Die beiden Trennzeichen haben unterschiedliche Größen. Ein gängiger Trick, um passende Größen zu erhalten, ist die Verwendung \vphantom
wie folgt:
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{align*}
\begin{split}
z = \left( a + b + c +\vphantom{\frac{d}{e}}\right. \\
\left. + \frac{d}{e} \right)
\end{split}
\end{align*}
\end{document}
Das Ergebnis ist folgende:
Ein solcher Ansatz
- wird schnellKomplexwenn die Anzahl der Zeilenumbrüche zunimmt;
- Istnicht wartbarüberhaupt (denn wenn sich der Inhalt einer Zeile ändert,
\vphantom
muss möglicherweise auch das Argument geändert werden, um die gewünschte Ausgabe zu erhalten).
Alternativer Ansatz 1: Bestimmen Sie die Trennzeichen manuell (mithilfe von \big
und dergleichen). Leider ist auch das nicht sehr wartungsfreundlich.
Alternativer Ansatz 2: Verwenden einer vom breqn
Paket bereitgestellten mathematischen Umgebung, die Zeilenumbrüche zwischen zwei \left
/ \right
-Trennzeichen zulässt und sich um die Größe der Trennzeichen kümmert. Ich möchte jedoch breqn
nach Möglichkeit vermeiden, dass .
Fällt Ihnen eine Möglichkeit ein, verbundene \left
/ right\
-Trennzeichen trotz Zeilenumbrüchen automatisch gleich groß zu machen, ohne (explizit) den \vphantom
Trick anzuwenden? Idealerweise sollte die Lösung für mehrere verschachtelte Trennzeichenpaare funktionieren. Im Folgenden sollten beispielsweise die inneren Trennzeichen und die äußeren Trennzeichen gleich groß sein:
\left( \left( ... \right. \right. \\
\left. \left. ... \right) \right)
Antwort1
Das folgende Beispiel verwendet das Paket, zref
um die Größe der mathematischen Formel in Beschriftungen zu speichern. Das Paket mleftright
wird verwendet, um den zusätzlichen horizontalen Abstand um \left
und zu reduzieren \right
.
Innerhalb eines komplexen Mathematikblocks können die folgenden Makros verwendet werden:
\mzleft{<label>}{<left delimiter>}{<math formula>}
\mzright{<label>}{<math formula>}{<right delimiter>}
Die Makros können verschachtelt werden. Das <label>
wird benötigt, um die Trennzeichenpaare zu identifizieren. Innerhalb des Mathematikblocks (Mathematikumgebung, ...) müssen die Namen für die Paare eindeutig sein. Danach kann <label>
der Mathematikblock aufgerufen werden. Er gibt die Namen frei und sie können wiederverwendet werden.\mzreset
<label>
Beispieldatei:
\documentclass{article}
\usepackage{amsmath}
\usepackage{mleftright}
\usepackage{zref-base}
\makeatletter
\zref@newprop{mzheight}[0pt]{\the\ht\z@}
\zref@newprop{mzdepth}[0pt]{\the\dp\z@}
\newcount\c@@mz
\newcommand*{\the@mz}{mz\the\c@@mz}
\newcommand*{\@mz@list}{}
\let\@mz@do\relax
\newcommand*{\mzreset}{%
\begingroup
\def\@mz@do##1{%
\global\expandafter\let\csname mz@##1\endcsname\relax
}%
\@mz@list
\global\let\@mz@list\@empty
\endgroup
}
\newcommand*{\mzleft}[3]{%
\@ifundefined{mz@#1}{%
\global\advance\c@@mz\@ne
\expandafter\xdef\csname mz@#1\endcsname{\the@mz}%
\xdef\@mz@list{\@mz@list\@mz@do{#1}}%
}{}%
\expandafter\let\expandafter\@mz\csname mz@#1\endcsname
\mleft#2%
\expandafter\mathpalette\expandafter{%
\expandafter\@mzleft\expandafter{\@mz}%
}{#3}%
\mright.\kern-\nulldelimiterspace
}
\newcommand*{\mzright}[3]{%
\kern-\nulldelimiterspace
\@ifundefined{mz@#1}{%
\@latex@warning{Missing \string\mzleft{#1}}%
\mleft.#2\mright#3%
}{%
\expandafter\let\expandafter\@mz\csname mz@#1\endcsname
\mleft.%
\expandafter\mathpalette\expandafter{%
\expandafter\@mzright\expandafter{\@mz}%
}{#2}%
\mright#3%
}%
}
\newcommand*{\@mzleft}{%
\@mzleftright lr%
}
\newcommand*{\@mzright}{%
\@mzleftright rl%
}
\newcommand*{\@mzleftright}[5]{%
\sbox0{$\m@th#4{}#5{}$}%
\ifmeasuring@
\else
\begingroup
\let\@auxout\@mainaux
\zref@labelbyprops{#3#1}{mzheight,mzdepth}%
\endgroup
\fi
\zifrefundefined{\@mz #2}{%
}{%
\dimen@=\zref@extract{#3#2}{mzheight}\relax
\ifdim\dimen@>\ht0 %
\ht0=\dimen@
\fi
\dimen@=\zref@extract{#3#2}{mzdepth}\relax
\ifdim\dimen@>\dp0 %
\dp0=\dimen@
\fi
}%
\copy0\relax
}
\makeatother
\begin{document}
\begin{align*}
\begin{split}
z = \mzleft{a}({ a + b + c +} \\
\mzright{a}{{}+ \frac{d}{e}})
\end{split}
\end{align*}
\mzreset
\begin{align*}
\begin{split}
z = \mzleft{a}{[}{%
a + b + \frac{c}{d} +
\mzleft{b}{(}{
\int_0^\infty \mathrm{d}x
}
} \\
\mzright{b}{
+ y}{)
}
\mzright{a}{
+ \frac{\displaystyle\sum_{i=0}^{100}i}{e}
}{]}
\end{split}
\end{align*}
\end{document}
Antwort2
Obwohl ich denke, dass a) \bigl
s vorzuziehen sind und b) die Vergrößerung Ihrer Trennzeichen genauso wichtig ist wie die manuelle Silbentrennung und gelegentliche \enlargethispage
s ganz am Ende des Korrekturlesens, werden Sie vielleicht feststellen, dass dies die Wartung etwas erleichtert:
\newcommand\SPLIT[2]{%
\left( #1\vphantom{#2}\right. \\
\left. \vphantom{#1}#2\right) \\
}
\begin{align*}
\begin{split}
z= \SPLIT{a + b + c +}{d +\frac{d}{e}}
\end{split}
\end{align*}
Zumindest erspart es die manuelle Wiederholung des Größenarguments. Ich bin sicher, wenn man genügend Lust hätte, könnte es auch erweitert werden, um eine variable Anzahl von Zeilen zu verarbeiten.
Antwort3
Vielleicht erwähnenswert: Das nath
Paket unterstützt dies, obwohl es leider mit vielen anderen Paketen inkompatibel ist.
Direkt aus der Dokumentation übernommen, mit einigen Änderungen (*):
%! TEX program = lualatex
\documentclass{article}
\usepackage{nath}
\begin{document}
\[
\sin 2nx = 2n \cos x [\sin x \\
\qquad + \sum_{k = 1}^n (-4)^k
\frac{(n^2 - 1^2)(n^2 - 2^2) \dots (n^2 - k^2)}{(2k - 1)!}
\sin^{2k - 1} x]
\]
\end{document}
Die Ausgabe:
Siehe auch:
- Automatische Links- und Rechtsbefehle
- Makro für \left( und \right)
- Inkompatibilitäten mit und Alternativen zu Nath
(*): Mit nath
sind $$
und \[
genau gleichwertig. Andernfalls $$ ... $$
wird die LaTeX-Syntax nicht unterstützt, sieheWarum ist \[ ... \] $$ ... $$ vorzuziehen?.
Antwort4
Da diese Frage gerade hochgestuft wurde und es eine akzeptierte Antwort darauf gibt, halte ich es für in Ordnung, auch eine Antwort hinzuzufügen, die ConTeXt verwendet, da das für einige Benutzer von Interesse sein könnte.
In ConTeXt werden Formeln standardmäßig auf mehrere Zeilen aufgeteilt, und es können Unterbrechungen in Zäunen auftreten. Manuelle Zeilenumbrüche werden mit vorgenommen \breakhere
.
\starttext
\samplefile{tufte}
\startformula[align=slanted,margin=2em]
\int_0^1 \frac{x^9}{(x^2+1)^{16}} \dd x
= \int_0^1 \left[
\frac{x} {(x^2+1)^{12}}
-\frac{4x}{(x^2+1)^{13}}
+\frac{6x}{(x^2+1)^{14}}
\breakhere
-\frac{4x}{(x^2+1)^{15}}
+\frac{x} {(x^2+1)^{16}}
\right] \dd x
\stopformula
\samplefile{douglas}
\stoptext