Jeg prøver å justere et sett med lange ligninger, det er seg selv align
miljøer ettersom de fleste av dem sprer seg på flere linjer.
For øyeblikket har jeg bare en sekvens av align
miljøer, med hver ligning inni for å justere delene av hver ligning. Jeg legger til et skjermbilde av resultatet:
Det som ønsker å få i stedet er noe som ser mer ut som
som er det samme sett med ligninger etter å ha gått gjennom copyediting office i en journal og ser mye bedre ut.
Her er en MWE. Jeg vil at alle tre ligningene skal justeres på likhetstegnet.
\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}
Kommentarer
Svar
uten et konkret eksempel, her tolker jeg det du ønsker.
og her er inngangen:
\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}
det lengste venstre elementet settes inn i begynnelsen som et \phantom
og lengdene til de venstre elementene til individet aligned
segmenter blir gjort» usynlige «ved å lappe dem til venstre ved hjelp av \mathllap
fra mathtools
-pakken.
det opprinnelige svaret ble (riktig) bemerket for å justere segmentene riktig bare når venstre side hadde samme lengde. denne modifikasjonen overvinner problemet.
Kommentarer
- oops! glemte et par tegn. oppdatert versjon kommer.
- fungerer bare hvis venstre side har samme lengder?
- @ user1834164 – – du ‘ er riktig om lengdene på venstre element. men det kan berges. legger til at …
- hvorfor trenger vi \ phantom {i + j + k} .. Jeg kunne ikke forstå ..
- @PraphullaKoushik –
\phantom
er nødvendig slik at bredden på venstre side av ligningsgruppen er inkludert i bredden til hele gruppen, slik at gruppen blir sentrert.
Svar
Du kan også bruke split
miljøet i align
-miljø ved å bruke et ampersand (&
) der du vil at justeringen skal finne sted. Her er en 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}
Legg merke til at den siste ligningen ikke er i et split
-miljø, men likevel justerer med resten, siden det fortsatt er i align
-miljøet.
Utgangen ser slik ut:
Legg merke til de tomme gruppene ({}
) før ampersandene. Uten disse ville det være ingen tegning brukt mellom likhetstegn og tegnet etterpå, fordi justeringen bryter boksen. Mens de tomme gruppene ikke gjør noe selv, i matematikkmodus legger symbolene foran dem til innføring som om de tomme gruppene var vanlige tegn. Dette gjør det mulig for TeX å velge den mest passende avstanden. Hvis ampersandene ble plassert før likhetstegnene, ville justeringsmiljøet kjerne rundt likhetstegnene slik det burde uten noe slikt bry, men da ville tilleggstegnet til delingsligningen ligge ubehagelig langt bak, og kreve en slags manuell tilpasning av dens egen.
Kommentarer
- Det fine med tingen om denne løsningen er at det ikke er behov for å rote med
\phantom
eller\mathllap
. - Wow!Faktisk ser det ut til at du ikke trenger ‘ t en gang trenger splittene, og erstatter
&=
med={}&
gjør susen! - Når jeg prøver å gjøre det, får jeg feilen » Ekstra justeringsfane er endret til \ cr. » Jeg får denne feilen når jeg prøver å bruke mer enn ett ampersand innenfor split. Noen ideer?
- @Blaisorblade – årsaken til splittene er å bruke ligningstallene riktig på hver gruppe. ja,
\notag
kan brukes, men det gir ikke ‘ t den ønskede utdata hvis ligningstallet skal være sentrert i gruppen. - Jeg prøvde denne teknikken, og den fungerte når jeg konverterte til PDF, men fungerte dårlig når jeg konverterte til HTML ved hjelp av
mk4ht htlatex test.tex "xhtml,mathml"
arbeidsflyten. Jeg antar at det ‘ er en feil i html-omformeren.
Svar
Som en utvidelse av svaret fra Barbara, kan du bare pakke inn høyre side av ligningene dine i aligned
undermiljøer. Dette gjør at du kan justere likhetstegnene til de separate ligninger uavhengig av størrelsen på venstre eller høyre side.
\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}
Plusstegnet på den andre linjen i den andre ligningen stemmer ikke akkurat overens fordi det «sa mathbin
symbol. Kanskje noen med mer TeX-kunnskap kan kommentere hvordan man best kan løse det.
Kommentarer
- Takk, det fungerer også. Forskjellen jeg ser er at ligningstall er på den øverste linjen i hver ligning, mens når hele ligningen er i ‘ justert ‘ miljø er ligningstallene vertikalt sentrert. Er det en måte å kontrollere det?
- @eldering – for å få samsvarende avstand etter det første pluss tegnet i siste linje, foran det med en tom gruppe,
{}
.
Svar
Her er et align
-bar versjon av ligningene dine:
\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}
Noen av justeringene inkluderer
- Bruk av
\mathrel
for riktig avstand rundt skjult=
(inkludert via\phantom
); - Noe negativ
\nulldelimiter
skjæring rundt manglende\left.
skillelinjer (ellers det ville være ekstra avstand innført mellom operatør / operand); - Høydejustering for flerlinje
\left\{
og\right\}
par.
Som en rød tråd kan det være nyttig å lese Herbert Voß « mathmode
dokument .
Svar
Dette er en måte å oppnå dette for små mengder tekst ved å bruke kommandoen \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}
Kommentarer
- Den aktuelle delen handler om
\qquad
, som jeg ‘ har brukt, men det ‘ t fungerer godt nok. - (+1) Ah! 🙂 Jeg lette etter noe slikt en stund. Mange takk. 🙂
- Hva er den beste løsningen hvis avsnitt deler opp ligningene som skal justeres?
Svar
Hvis du i stedet for å justere etterligningene du ønsker å rettferdiggjøre dem (på samme måte som \multiline
-miljøet håndterer etterligninger), kan du bruke følgende triks, som jeg hentet fra dette svaret av 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}
Svar
\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}
gir følgende utgang
Kommentarer
- Hvordan adresserer dette originalinnlegget på en slik måte at ‘ t allerede er adressert av de andre svarene?
Svar
Dette svaret fungerer når du bruker
pakke. Eksemplet nedenfor definerer to LaTeX-makroer\mymidline
og\mylastline
. Begge makroene utvides i hovedsak til sitt første argument ialign*
-miljøer.\mymidline
makroen sentrerer den, og\mylastline
makroen rettjusterer den. Dermed trekkes bredden på tingene i det andre argumentet fra den tilgjengelige «skjermbredden». Foralign*
miljøer som bare skal være den (lengste) venstre siden av ligningen. Eksemplet nedenfor viser hvordan du kan gjøre det mest effektivt med en makro\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}
Hvis du har den nummererte versjonen align*
, bør du også vurdere bredden på ligningsetiketten og merkeseparatoren i det andre argumentet til \mymidline
og \mylastline
. Jeg fant ikke et forhåndsdefinert mål for etikettbredden. Etter noen tester viste det seg at \quad\quad(1)
er en passende plassholder for etiketten.
\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}
!
foran av det for å gjøre det til en lenke. En moderator eller en annen bruker med redigeringsrettigheter kan deretter sette inn!
\documentclass
og de aktuelle pakkene, slik at de som prøver å hjelp don ‘ t å måtte gjenskape den.split
for enkle lange ligninger i stedet foralign
. ifølge dokumentet ersplit
for enkle lange ligninger,align
er for flere ligninger. Nummereringen bør påvirkes.