Snažím se sladit sadu dlouhých rovnic, které jsou samy align
prostředí, protože většina z nich se šíří na více řádcích.
V současné době mám pouze sekvenci prostředí align
s každou rovnicí uvnitř, abych zarovnal jednotlivé části každé rovnice. Přikládám snímek obrazovky s výsledkem:
To, co bych místo toho chtěl získat, je něco, co vypadá spíše jako
, což je stejná sada rovnic po procházení redakční kanceláře časopisu a vypadá mnohem lépe.
Tady je MWE. Chtěl bych, aby všechny tři rovnice byly zarovnány na znaménko rovnosti.
\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}
Komentáře
Odpovědět
bez konkrétního příkladu, zde interpretuji to, co vy chcete.
a zde je vstup:
\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}
nejdelší levý prvek se na začátek vloží jako \phantom
a délky levých prvků jednotlivých segmenty jsou„ neviditelné “jejich přeložením doleva pomocí \mathllap
z balíčku mathtools
.
Původní odpověď (správně) byla zaznamenána, aby se segmenty správně zarovnaly, pouze pokud měly levé strany stejnou délku. Tato úprava tento problém překonává.
Komentáře
- Jejda! zapomněli jste několik ampersandů. Aktualizovaná verze se blíží.
- Funguje pouze v případě, že mají levé strany stejnou délku?
- @ user1834164 – – vy ‚ opravte délky levých prvků. ale dá se zachránit. dodává, že …
- proč potřebujeme \ phantom {i + j + k} .. nerozuměl jsem ..
- @PraphullaKoushik –
\phantom
je zapotřebí, aby šířka levé strany skupiny rovnic byla zahrnuta do šířky celé skupiny, takže skupina bude vystředěna.
Odpověď
Prostředí split
můžete použít také uvnitř align
prostředí pomocí ampersandu (&
), kde chcete provést zarovnání. Zde je 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}
Všimněte si, že poslední rovnice není v prostředí split
, ale přesto se zarovná se zbytkem, protože je stále uvnitř prostředí align
.
Výstup vypadá takto:
Všimněte si prázdných skupin ({}
) před ampersandy. Bez nich by mezi znaménky rovnosti a znakem se potom nebude používat vyrovnání párů, protože zarovnání rozbije rámeček. Zatímco prázdné skupiny samy nic nedělají, v matematickém režimu symboly před nimi přidají vyrovnání párů, jako by prázdné skupiny byly obyčejné znaky. To umožňuje TeXu zvolit nejvhodnější mezery. Pokud by byly ampersandy umístěny před znaménka rovnosti, prostředí pro zarovnání by se vyrovnalo znaménkům rovnice, jak by mělo bez takových potíží, ale potom by znaménko sčítání rozdělené rovnice leželo nepohodlně daleko vzadu a vyžadovalo by nějaké manuální vylepšení jeho vlastní.
Komentáře
- Na tomto řešení je hezké to, že není třeba si dělat s nebo
\mathllap
. - Páni!Ve skutečnosti se zdá, že ani ‚ t rozdělení nepotřebujete, přičemž
&=
nahradíte={}&
dělá ten trik! - Když se o to pokusím, zobrazí se mi chyba “ Extra karta zarovnání byla změněna na \ cr. “ Tato chyba se zobrazí, když se pokusím použít více než jeden ampersand v rámci rozdělení. Nějaké nápady?
- @Blaisorblade – důvodem rozdělení je správné použití čísel rovnic na každou skupinu. ano,
\notag
lze použít, ale nedává ‚ požadovaný výstup, pokud má být číslo rovnice vycentrováno na skupinu. - Tuto techniku jsem vyzkoušel a fungovala při převodu do PDF, ale selhal při převodu do HTML pomocí pracovního postupu
mk4ht htlatex test.tex "xhtml,mathml"
. Předpokládám, že ‚ je chyba v převaděči html.
Odpovědět
Jako rozšíření odpovědi Barbary můžete zabalit pouze pravou stranu rovnic do aligned
dílčích prostředí. To vám umožní sladit stejné znaky samostatných rovnice nezávislé na velikosti levé nebo pravé strany.
\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}
Znaménko plus na druhém řádku druhé rovnice se přesně neshoduje, protože to „sa mathbin
symbol. Možná by někdo s více znalostmi TeX mohl komentovat, jak to nejlépe napravit.
Komentáře
- Díky, to také funguje. Rozdíl vidím v tom, že čísla rovnic jsou na horním řádku každé rovnice, zatímco když je celá rovnice v ‚ zarovnaném ‚ prostředí jsou čísla rovnic vertikálně vycentrována. Existuje způsob, jak to ovládat?
- @eldering – získat odpovídající mezery za prvním znaménkem plus v posledním řádku, předcházet mu prázdná skupina,
{}
.
Odpověď
Zde je align
– pouze verze vašich rovnic:
\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}
Některé z úprav patří
- Použití
\mathrel
pro správné mezery kolem skrytých=
(zahrnuto prostřednictvím\phantom
); - Některé negativní
\nulldelimiter
kerning kolem chybějících\left.
oddělovačů (jinak mezi operátorem / operandem by byly zavedeny další mezery); - Nastavení výšky pro víceřádkové
\left\{
a\right\}
páry.
Jako běžné vlákno může být užitečné prohlédnout si Herberta Voß „ mathmode
dokument .
Odpověď
Toto je způsob, jak toho dosáhnout u malého množství textu pomocí příkazu \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}
Komentáře
- Relevantní část se týká části
\qquad
, kterou jsem ‚ použil, ale ‚ nefunguje dostatečně dobře. - (+1) Ah! 🙂 Nějakou dobu jsem něco takového hledal. Mnohokrát děkuji. 🙂
- V případě, že odstavce rozdělují rovnice, které mají být zarovnány, jaké je nejlepší řešení?
Odpovědět
Pokud místo zarovnání koncových rovnic chcete je zarovnat doprava (podobně jako prostředí \multiline
zpracovává koncové rovnice), můžete použít následující trik, který jsem zvedl od této odpovědi od 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}
odpovědět
\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}
poskytne následující výstup
Komentáře
- Jak to řeší původní příspěvek takovým způsobem, že ostatní odpovědi už ‚ již neřešily?
Odpověď
Tato odpověď funguje, když použijete
balíček. Následující příklad definuje dvě makra LaTeXu\mymidline
a\mylastline
. Obě makra se v podstatě rozšiřují na svůj první argument v prostředíalign*
. Makro\mymidline
jej vycentruje a\mylastline
makro jej zarovná doprava. Tím se šířka materiálu ve druhém argumentu odečte od dostupné „šířky zobrazení“. Pro prostředíalign*
by měla být pouze (nejdelší) levá strana rovnice. Následující příklad ukazuje, jak toho nejefektivněji dosáhnout 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}
Pokud máte očíslovanou verzi align*
, měli byste také zvážit šířka štítku rovnice a oddělovače štítků ve druhém argumentu \mymidline
a \mylastline
. Nenašel jsem předdefinovanou míru šířky štítku. Po několika testech se ukázalo, že \quad\quad(1)
je vhodným zástupným symbolem štítku.
\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}
!
vpředu z toho proměnit odkaz. Moderátor nebo jiný uživatel s oprávněním k úpravám pak může!
znovu vložit do podoby obrázku.\documentclass
a příslušných balíčků, takže ti, kteří se snaží pomozte ‚ jej znovu vytvořit.split
spíše pro jednotlivé dlouhé rovnice nežalign
. podle dokumentu jesplit
pro jednotlivé dlouhé rovnice,align
pro více rovnic. Mělo by to ovlivnit číslování.