Próbuję dopasować zestaw długich równań, które same są align
, ponieważ większość z nich rozprzestrzenia się na wielu liniach.
Obecnie mam po prostu sekwencję align
środowisk, z każdym równaniem wewnątrz w celu wyrównania fragmentów każdego równania. Załączam zrzut ekranu z wynikiem:
Zamiast tego chciałbym otrzymać coś bardziej przypominającego
czyli ten sam zestaw równań po przejściu przez redakcję czasopisma i wygląda znacznie lepiej.
Oto MWE. Chciałbym, aby wszystkie trzy równania były wyrównane względem znaku równości.
\documentclass{article} \usepackage{amsmath} \begin{document} \begin{align} a & = b + c + d \nonumber \\ & \qquad + e + f + g \label{eq:1} \end{align} \begin{align} k & = l + m + n + m + n + m + n \nonumber \\ & \qquad + o + p + q \label{eq:2} \end{align} \begin{equation} r = s + t (u + v + w) \label{eq:3} \end{equation} \end{document}
Komentarze
Odpowiedź
bez konkretnego przykładu, oto jak interpretuję to, co chcesz.
a oto wejście:
\documentclass{article} \usepackage{mathtools} \begin{document} This example shows \verb|aligned| equations within an \verb|align| environment. \begin{align} \phantom{i + j + k} &\begin{aligned} \mathllap{a} &= b + c + d\\ &\qquad + e + f + g + x + y + z \end{aligned}\\ &\begin{aligned} \mathllap{i + j + k} &= l + m + n\\ &\qquad + o + p + q \end{aligned} \end{align} \end{document}
najdłuższy lewy element jest wstawiany na początku jako \phantom
, a długości lewych elementów poszczególnych stają się„ niewidoczne ”przez docieranie ich w lewo za pomocą \mathllap
z pakietu mathtools
.
pierwotna odpowiedź została (poprawnie) odnotowana w celu prawidłowego wyrównania segmentów tylko wtedy, gdy lewe boki miały tę samą długość. Ta modyfikacja rozwiązuje ten problem.
Komentarze
- ups! zapomniałem kilku ampersandów. Niedługo pojawi się zaktualizowana wersja.
- działa tylko wtedy, gdy lewe boki mają takie same długości? – ty ' poprawiam długość elementów po lewej stronie. ale można go uratować. dodając, że …
- dlaczego potrzebujemy \ phantom {i + j + k} .. Nie mogłem zrozumieć ..
- @PraphullaKoushik – the
\phantom
jest potrzebne, aby szerokość lewej strony grupy równań była uwzględniona w szerokości całej grupy, tak aby grupa była wyśrodkowana.
Odpowiedź
Możesz także użyć środowiska split
wewnątrz align
, używając znaku ampersand (&
), w którym ma nastąpić wyrównanie. Oto MWE:
\documentclass{article} \usepackage{amsmath} \begin{document} \begin{align} \begin{split}\label{eq:1} a ={}& b + c + d\\ & + e + f + g \end{split}\\ \begin{split}\label{eq:2} k ={}& l + m + n + m + n + m + n\\ & + o + p + q \end{split}\\ r ={}& s + t (u + v + w)\label{eq:3} \end{align} \end{document}
Zwróć uwagę, że ostatnie równanie nie znajduje się w środowisku split
, ale jest wyrównane z resztą, ponieważ nadal znajduje się w środowisku align
.
Wynik wygląda następująco:
Zwróć uwagę na puste grupy ({}
) przed znakami ampersand. Bez nich nie stosuj kerningu między znakami równości a późniejszym znakiem, ponieważ wyrównanie rozbija ramkę. Podczas gdy puste grupy same nic nie robią, w trybie matematycznym symbole przed nimi dodają kerning, jakby puste grupy były zwykłymi znakami. Dzięki temu TeX może wybrać najbardziej odpowiednie odstępy. Gdyby ampersandy zostały umieszczone przed znakami równości, środowisko wyrównywania objąłby znaki równości tak, jak powinno, bez takich kłopotów, ale wtedy znak dodania równania podziału leżałby niewygodnie daleko wstecz, wymagając jakiegoś ręcznego poprawienia jego własne.
Komentarze
- Zaletą tego rozwiązania jest to, że nie ma potrzeby bawić się z
\phantom
lub\mathllap
. - Wow!W rzeczywistości wygląda na to, że ' nie potrzebujesz nawet podziałów, zastępując
&=
={}&
załatwia sprawę! - Kiedy próbuję to zrobić, pojawia się błąd ” Dodatkowa karta wyrównania została zmieniona na \ cr. ” Ten błąd pojawia się, gdy próbuję użyć więcej niż jednego znaku ampersand w ramach podziału. Jakieś pomysły?
- @Blaisorblade – powodem podziału jest prawidłowe zastosowanie numerów równań do każdej grupy. tak,
\notag
może zostać użyte, ale nie ' nie daje pożądanego wyniku, jeśli numer równania powinien być wyśrodkowany na grupie. - Wypróbowałem tę technikę i zadziałała podczas konwersji do formatu PDF, ale działała nieprawidłowo podczas konwersji do formatu HTML przy użyciu przepływu pracy
mk4ht htlatex test.tex "xhtml,mathml"
. Zakładam, że ' to błąd w konwerterze HTML.
Odpowiedź
Jako rozszerzenie odpowiedzi Barbary możesz zawinąć tylko prawą stronę swoich równań do aligned
środowisk podrzędnych. Pozwala to dopasować znaki równości oddzielnych równania niezależne od rozmiaru lewej lub prawej strony.
\documentclass{article} \usepackage{amsmath} \begin{document} This example shows \verb|aligned| equations within an \verb|align| environment. \begin{align} a &= \begin{aligned}[t] &b + c + d +\\ &c + e + f + g + h + i \end{aligned}\\ k &= \begin{aligned}[t] &l + m + n\\ &+ o + p + q \end{aligned} \end{align} \end{document}
Znak plus w drugim wierszu drugiego równania nie pasuje dokładnie, ponieważ jest to symbol „sa mathbin
. Może ktoś z większą znajomością TeX-a mógłby skomentować, jak najlepiej to naprawić.
Komentarze
- Dzięki, to też działa. Różnica, którą widzę, polega na tym, że numery równań znajdują się w górnym wierszu każdego równania, podczas gdy całe równanie znajduje się w ' wyrównanych ' środowisko numery równania są wyśrodkowane w pionie. Czy istnieje sposób, aby to kontrolować?
- @eldering – aby uzyskać pasujące odstępy po pierwszym znaku plus w ostatnim wierszu, poprzedź go pustą grupą,
{}
.
Odpowiedź
Oto align
-tylko wersja twoich równań:
\documentclass{article} \usepackage{amsmath}% http://ctan.org/pkg/amsmath \newcommand{\myvec}[1]{\hat{\mathbf{#1}}}% Vector notation \begin{document} \begin{align} f_{\textit{P},\textit{P}}\left(\myvec{n};\myvec{m}\right) &= \frac{\omega^2}{4\pi\rho\alpha^4} \textit{AF}\left(k_\alpha\left(\myvec{n}-\myvec{m}\right)\right) \nonumber \\ &\mathrel{\phantom{=}} \times\left\{\left(\lambda+\mu\right)^2\eta_N+\left(\lambda+\mu\right)\mu\eta_N\left(\cos 2\phi+\cos 2\theta\right)\right. \nonumber \\ &\mathrel{\phantom{=}} \left.\kern-\nulldelimiterspace +\;\mu^2\eta_N\cos 2\phi\cos 2\theta+\mu^2\eta_T\sin 2\phi\sin 2\theta\cos\varphi\vphantom{\left(\lambda\right)^2}\right\}, \\ f_{\textit{P},\textit{SH}}\left(\myvec{n};\myvec{m},\myvec{q}\right) &= \frac{\omega^2}{4\pi\rho\alpha\beta^3} \textit{AF}\left(k_\alpha\myvec{n}-k_\beta\myvec{m}\right) \nonumber \\ &\mathrel{\phantom{=}} \times\left(-\mu^2\eta_T\right)\sin 2\phi\cos\theta\sin\varphi, \\ f_{\textit{P},\textit{SV}}\left(\myvec{n};\myvec{m},\myvec{q}\right) &= \frac{\omega^2}{4\pi\rho\alpha\beta^3} \textit{AF}\left(k_\alpha\myvec{n}-k_\beta\myvec{m}\right) \nonumber \\ &\mathrel{\phantom{=}} \times\left\{\left(\lambda+\mu\right)\mu\eta_N\sin 2\theta+\mu^2\eta_N\cos 2\phi\sin 2\theta\right. \nonumber \\ &\mathrel{\phantom{=}} \left.\kern-\nulldelimiterspace -\;\mu^2\eta_T\sin 2\phi\cos 2\theta\cos\varphi\right\}, \end{align} \end{document}
Niektóre z dostosowań obejmuje
- Używanie
\mathrel
do odpowiedniego odstępu wokół ukrytego=
(zawarte przez\phantom
); - Niektóre ujemne
\nulldelimiter
kerning wokół brakujących\left.
ograniczników (w przeciwnym razie wprowadzono by dodatkowe odstępy między operatorem / operandem); - Regulacja wysokości dla wielu linii
\left\{
i\right\}
par.
Jako częsty wątek warto zapoznać się z Herbertem Voß „ mathmode
dokument .
Odpowiedź
To jest sposób osiągnięcia tego w przypadku małych ilości tekstu za pomocą polecenia \intertext
.
\documentclass{article} \usepackage{amsmath} \begin{document} This example shows \verb|aligned| equations within an \verb|align| environment. \begin{align} \begin{aligned} a &= b + c + d\\ &\qquad + e + f + g \end{aligned}\\ \begin{aligned} k &= l + m + n + m + n + m + n\\ &\qquad + o + p + q \end{aligned} \end{align} This example shows text and equations within an \verb|align| environment. \begin{align} a &= b + c + d\\ &\qquad + e + f + g \intertext{A small amount of text can go here with $x=2$ inline math and $$\int_a^b f(x)\,dx=F(b)-F(a)$$ (even inline math). But not a lot of text. } k &= l + m + n + m + n + m + n\\ &\qquad + o + p + q \end{align} \end{document}
Komentarze
- Odpowiednia część dotyczy
\qquad
, którego ' użyłem, ale to już nie ' nie działa wystarczająco dobrze. - (+1) Ach! 🙂 Szukałem czegoś takiego przez jakiś czas. Wielkie dzięki. 🙂
- Jakie jest najlepsze rozwiązanie w przypadku akapitów dzielących równania do wyrównania?
Odpowiedź
Jeśli zamiast wyrównywać końcowe równania, chcesz je wyrównać do prawej (podobnie do sposobu, w jaki środowisko \multiline
obsługuje końcowe równania), możesz użyć następującego sztuczka, którą wybrałem z tej odpowiedzi autorstwa Ulrike Fischer.
\documentclass{article} \usepackage{amsmath} \begin{document} \begin{align} a & = b + c + d + e + f + g + h \nonumber \\ & \hspace{7cm} + i + j + k \\ a & = b + c + d + e + f + g + h \nonumber \\ & \omit\hfill ${} + i + j + k$ \end{align} \end{document}
Odpowiedź
\begin{align} \ni Tdij (Ti,Tj,Sk,t) & = Tdij(Ti,Tj,Sk,t) \nonumber \\ & Tddir (Ti,Tj,Sk,t) \bigoplus \nonumber \\ & Tdrecom (Ti,Tj,Sk,t) \bigoplus \nonumber \\ & Tdiv (Ti,Tj,Sk,t) \label{eq:1} \end{align}
zapewni następujące dane wyjściowe
Komentarze
- W jaki sposób odnosi się to do oryginalnego posta w taki sposób, że nie ' nie zostało już uwzględnione w innych odpowiedziach?
Odpowiedź
Ta odpowiedź działa, gdy używasz
pakiet. Poniższy przykład definiuje dwa makra LaTeX\mymidline
i\mylastline
. Oba makra zasadniczo rozwijają się do pierwszego argumentu w środowiskachalign*
. Makro\mymidline
wyśrodkowuje je, a\mylastline
wyrównuje do prawej. W ten sposób szerokość rzeczy w drugim argumencie jest odejmowana od dostępnej „szerokości wyświetlania”. W przypadkualign*
środowisk powinno to być (najdłuższą) lewą stroną równania. Poniższy przykład pokazuje, jak możesz to zrobić najskuteczniej za pomocą makra\LHS
.
\documentclass{article} \usepackage[DIV15]{typearea} \usepackage{amsmath,amsfonts} \usepackage{fleqn} \usepackage{ulem} \makeatletter \newdimen\@tzadima \newdimen\@tzadimb \newbox\@tzaboxa \def\mylinemeasures#1#2{% \@tzadima\displaywidth% \advance\@tzadima-\tagwidth@% \advance\@tzadima-\alignsep@% \setbox\@tzaboxa\hbox{$\displaystyle#1$}% \@tzadimb\wd\@tzaboxa% \advance\@tzadima-\@tzadimb% \setbox\@tzaboxa\hbox{$\displaystyle#2$}% \@tzadimb\wd\@tzaboxa% \advance\@tzadima-\@tzadimb% } \def\mymidline#1#2{% \mylinemeasures{#1}{#2}% \divide\@tzadima2% \hbox to \@tzadima{}#1\notag } \def\mylastline#1#2{% \mylinemeasures{#1}{#2}% \hbox to \@tzadima{}#1% } \makeatother \begin{document} \begin{align*} \gdef\LHS{(L\cdot R)^{(i)}[i+1:n,i+1:n]}\LHS &= \underbrace{L^{(i-1)}[i+1:n,1:i-1]\cdot R^{(i-1)}[1:i-1,i+1:n]}_{\text{untouched}}+\\ &\mymidline{+ L^{(i)}[i+1:n,i] \underbrace{R^{(i)}[i,i+1:n]}_{\text{untouched pivot row}}+}\LHS\\ &\mylastline{+ \underbrace{L^{(i)}[i+1:n,i+1:n]}_{=1_{n-i-1}}\cdot R^{(i)}[i+1:n,i+1:n]}\LHS\\ &= L^{(i-1)}[i+1:n,1:i-1]\cdot R^{(i-1)}[1:i-1,i+1:n] +\\ &\mymidline{+ \uwave{L^{(i)}[i+1:n,i]\cdot R^{(i-1)}[i,i+1:n]}+}\LHS\\ &\mylastline{+R^{(i-1)}[i+1:n,i+1:n]\uwave{\strut- L^{(i)}[i+1:n,i]\cdot R^{(i-1)}[i,i+1:n]}}\LHS\\ &=L^{(i-1)}[i+1:n,1:i-1]\cdot R^{(i-1)}[1:i-1,i+1:n] +\\ &\mymidline{+ \underbrace{L^{(i-1)}[i+1:n,i]}_{=0}\cdot R^{(i-1)}[i,i+1:n] +}\LHS\\ &\mylastline{+ \underbrace{L^{(i-1)}[i+1:n,i+1:n]}_{=1_{n-i}}\cdot R^{(i-1)}[i+1:n,i+1:n]}\LHS\\ &= A[i+1:n,i+1:n]. \end{align*} \end{document}
Jeśli masz numerowaną wersję align*
, powinieneś również wziąć pod uwagę szerokość etykiety równania i separatora etykiety w drugim argumencie \mymidline
i \mylastline
. Nie znalazłem predefiniowanej miary szerokości etykiety. Po kilku testach okazało się, że \quad\quad(1)
jest odpowiednim miejscem na etykietę.
\documentclass{article} \usepackage[DIV15]{typearea} \usepackage{amsmath,amsfonts} \usepackage{fleqn} \usepackage{ulem} \makeatletter \newdimen\@tzadima \newdimen\@tzadimb \newbox\@tzaboxa \def\mylinemeasures#1#2{% \@tzadima\displaywidth% \advance\@tzadima-\tagwidth@% \advance\@tzadima-\alignsep@% \setbox\@tzaboxa\hbox{$\displaystyle#1$}% \@tzadimb\wd\@tzaboxa% \advance\@tzadima-\@tzadimb% \setbox\@tzaboxa\hbox{$\displaystyle#2$}% \@tzadimb\wd\@tzaboxa% \advance\@tzadima-\@tzadimb% } \def\mymidline#1#2{% \mylinemeasures{#1}{#2}% \divide\@tzadima2% \hbox to \@tzadima{}#1\notag } \def\mylastline#1#2{% \mylinemeasures{#1}{#2}% \hbox to \@tzadima{}#1% } \makeatother \begin{document} \begin{align} \gdef\LHS{(L\cdot R)^{(i)}[i+1:n,i+1:n]}\LHS &= \underbrace{L^{(i-1)}[i+1:n,1:i-1]\cdot R^{(i-1)}[1:i-1,i+1:n]}_{\text{untouched}}+\notag\\ &\mymidline{+ L^{(i)}[i+1:n,i] \underbrace{R^{(i)}[i,i+1:n]}_{\text{untouched pivot row}}+}\LHS\\ &\mylastline{+ \underbrace{L^{(i)}[i+1:n,i+1:n]}_{=1_{n-i-1}}\cdot R^{(i)}[i+1:n,i+1:n]}{\LHS\quad\quad(1)}\\ &= L^{(i-1)}[i+1:n,1:i-1]\cdot R^{(i-1)}[1:i-1,i+1:n] +\notag\\ &\mymidline{+ \uwave{L^{(i)}[i+1:n,i]\cdot R^{(i-1)}[i,i+1:n]}+}{(L\cdot R)^{(i)}[i+1:n,i+1:n]}\\ &\mylastline{+R^{(i-1)}[i+1:n,i+1:n]\uwave{\strut- L^{(i)}[i+1:n,i]\cdot R^{(i-1)}[i,i+1:n]}}{\LHS\quad\quad(1)}\\ &=L^{(i-1)}[i+1:n,1:i-1]\cdot R^{(i-1)}[1:i-1,i+1:n] +\notag\\ &\mymidline{+ \underbrace{L^{(i-1)}[i+1:n,i]}_{=0}\cdot R^{(i-1)}[i,i+1:n] +}{(L\cdot R)^{(i)}[i+1:n,i+1:n]}\\ &\mylastline{+ \underbrace{L^{(i-1)}[i+1:n,i+1:n]}_{=1_{n-i}}\cdot R^{(i-1)}[i+1:n,i+1:n]}{\LHS\quad\quad(1)}\\ &= A[i+1:n,i+1:n]. \end{align} \end{document}
!
z przodu z tego, aby przekształcić go w łącze. Moderator lub inny użytkownik z uprawnieniami do edycji może następnie ponownie wstawić!
, aby ponownie przekształcić go w obraz.\documentclass
i odpowiednie pakiety, tak aby osoby próbujące pomóż nie ' nie trzeba go odtwarzać.split
dla pojedynczych długich równań zamiastalign
. zgodnie z dokumentemsplit
dotyczy pojedynczych długich równań, aalign
dotyczy wielu równań. Numeracja powinna ulec zmianie.