- Questo topic ha 25 risposte, 4 partecipanti ed è stato aggiornato l'ultima volta 17 anni, 6 mesi fa da
francesco.biccari.
-
CreatoreTopic
-
27 Novembre 2008 alle 1:19 #28968::
Vorrei proporre la definizione di due nuovi ambienti per comporre sistemi di equazioni.
(Mi sono sempre meravigliato del fatto che LaTeX non mettesse a disposizione
un ambiente già predisposto per una cosa così comune…)Nel forum e nelle guide ho trovato spesso una definizione basata su array, che però non supporta la numerazione delle singole equazioni, non supporta l’uso di subequations ed inoltre compone il testo matematico in \textstyle (correggetemi se sbaglio). Questi problemi sono stati evidenziati in alcuni post del forum.
Ecco delle possibili definizioni:
`\usepackage{empheq}
\newenvironment{system}{%
\setkeys{EmphEqEnv}{gather}%
\setkeys{EmphEqOpt}{left=\empheqlbrace}%
\EmphEqMainEnv}%
{\endEmphEqMainEnv}\newenvironment{system*}{%
\setkeys{EmphEqEnv}{gather*}%
\setkeys{EmphEqOpt}{left=\empheqlbrace}%
\EmphEqMainEnv}%
{\endEmphEqMainEnv}
`La variante asterisco non numera le equazioni.
Uso:
`\begin{system}
1+1=2 \label{eq:maxwell1}\\
2+2=4 \label{eq:maxwell2}
\end{system}
`I problemi ancora da risolvere sono: 1. come definire una label globale del sistema; 2. come far sì che le due equazioni siano sempre allineate a sinistra anche quando non si usa l’opzione fleqn; 3. come rendere compatibile questo ambiente con subequations.
Il problema numero 2 è aggirabile usando align al posto di gather, imponendo però in questo modo l’inserimento di & (che andrebbe messo prima di ogni equazione se si vuole l’allineamento a sinistra in ogni situazione).
Cosa ne pensate?
Fra
-
CreatoreTopic
-
AutoreRisposte
-
-
3 Dicembre 2008 alle 21:59 #28969
-
3 Dicembre 2008 alle 22:25 #28970::
Vorrei proporre la definizione di due nuovi ambienti per comporre sistemi di equazioni.
(Mi sono sempre meravigliato del fatto che LaTeX non mettesse a disposizione
un ambiente già predisposto per una cosa così comune…)Perché un sistema è una cosa unica e non ha molto senso numerare ciascuna equazione.
Ciao
Enrico
-
4 Dicembre 2008 alle 12:39 #28971::
Ciao Enrio, non sono d’accordo. A volte si ha bisogno di fare riferimento al sistema intero, altre volte alla singola equazione. Penso ad esempio al sistema dui Bear-Nunziato composto da 7 PDE; per semplificarlo si eliminano alcune PDE con delle chiusure algebriche ed è ben piu comodo dire “l’eq 2.14c” piuttosto che la terza equazione del sistema “2.14” ecc…Comunque, ritornando alla richiesta iniziale, LaTeX ha già questa funzione ! È fornita dal pacchetto “cases” :
`% This provides a LaTeX environment {numcases} to produce multi-case
% equations with a separate equation number for each case. There is
% also {subnumcases} which numbers each case with the overall equation
% number plus a letter [8a, 8b, etc.]. The syntax is
%
% \begin{numcases}{left_side}
% case_1 & explanation_1 \\
% case_2 & explanation_2 \\
% …
% case_n & explanation_n
% \end{numcases}
%
% Each case is a math formula, and each explanation is a piece of lr mode
% text (which may contain math mode in \(…\) or $…$). The explanations
% are optional. Equation numbers are inserted automatically, just as for
% the eqnarray environment. In particular, the \nonumber command suppresses
% an equation number and the \label command allows reference to a particular
% case. In a subnumcases environment, a \label in the left_side of the
% equation gives the overall equation number, without any letter.
%
% To use this package,
% include “\usepackage{cases}” after \documentclass. You may also
% specify “\usepackage[subnum]{cases}” to force *all* numcases
% environments to be treated as subnumcases.
%
% Question: Is there a {numcases*} environment for unnumbered cases?
% Answer: There is a {cases} environment in AMS-LaTeX, but it is just as
% convenient to stick with the canonical LaTeX array:
% \[ left side = \left\{ \begin{array}…\end{array} \right. \]
%
% Speaking of AMS-math, they use an entirely different system of equation
% numbering, and this package uses ordinary LaTeX numbering.
%
% – – – – –
% A simple example is:
% \begin{numcases}{|x|=}
% x, & for $x \geq 0$\\
% -x, & for $x < 0$ % \end{numcases} % % Giving: % / x for x > 0 (1)
% |x| = < - % \ -x for x < 0 (2) % % - - - - - % % Another example is calculating the square root of $c+id$. First compute % \begin{subnumcases}{\label{w} w\equiv} % 0 & $c = d = 0$\label{wzero}\\ % \sqrt{|c|}\,\sqrt{\frac{1 + \sqrt{1+(d/c)^2}}{2}} & $|c| \geq |d|$ \\ % \sqrt{|d|}\,\sqrt{\frac{|c/d| + \sqrt{1+(c/d)^2}}{2}} & $|c| < |d|$ % \end{subnumcases} % Then, using $w$ from eq.~(\ref{w}), the square root is % \begin{subnumcases}{\sqrt{c+id}=} % 0 & $w=0$ (case \ref{wzero})\\ % w+i\frac{d}{2w} & $w \neq 0$, $c \geq 0$ \\ % \frac{|d|}{2w} + iw & $w \neq 0$, $c < 0$, $d \geq 0$ \\ % \frac{|d|}{2w} - iw & $w \neq 0$, $c < 0$, $d < 0$ % \end{subnumcases} %` -
4 Dicembre 2008 alle 23:16 #28972::
Il pacchetto cases dà lo stesso risultato dell’ambiente aligned all’interno dell’ambiente equation, con in più la numerazione per ogni equazione.
Rispetto alla mia definizione risolve senza problemi l’allineamento a sinistra in ogni situazione.Ecco le critiche che muoverei all’uso di questo pacchetto per comporre sistemi di equazioni:
1. il nome è poco intuitivo e forse il pacchetto è nato per altri scopi (basterebbe però definire un ambiente sistema);
2. per comporre un sistema va richiamato con \begin{numcases}{} anziché \begin{numcases} (risolubile all’interno dell’ambiente sistema);
3. la parentesi graffa che racchiude il sistema è leggermente più piccola di quella generata da empheq (non molto importante);
4. comporta l’uso di una tecnica completamente differente per comporre sistemi senza numerazione (risolubile definendo l’ambiente sistema*);
5. non permette l’uso di una label globale con cui identificare il sistema nel suo complesso. (correggetemi se sbaglio)
Mi pare di capire che per comporre un sistema di equazioni si dovrebbero avere tre possibilità per la numerazione: 1. senza numerazione; 2. un solo numero identificativo dell’intero sistema; 3. un numero per ogni equazione del sistema possibilmente nella forma (76a), (76b), ecc… logicamente più corretta di (76), (77), ecc…
Nel primo caso non si ha ovviamente bisogno di alcuna label, nel secondo caso di una sola label per l’intero sistema mentre nel terzo caso si ha bisogno di una label per l’intero sistema e una per ogni equazione.
Appena ho del tempo libero scrivo le definizioni dei comandi e le pubblico su questa discussione.
Ciao ciao.
Fra
-
4 Dicembre 2008 alle 23:29 #28973::
1. il nome è poco intuitivo e forse il pacchetto è nato per altri scopi (basterebbe però definire un ambiente sistema);
E perché mai ? È un estensione dell’ambiente “case” di amsmath
2. per comporre un sistema va richiamato con \begin{numcases}{} anziché \begin{numcases} (risolubile all’interno dell’ambiente sistema);
Ovvio, serve per definire una label globale e, se necessario, a mettere qualcosa prima della graffa (impossibile con il semplice ambiente cases). Ad esempio
`\begin{subnumcases}{|x|=\label{global]}
x & se $x>0$ \label{pri}\\
-x & se $x<0$\label{sec}
\end{subnumcases}
`3. la parentesi graffa che racchiude il sistema è leggermente più piccola di quella generata da empheq (non molto importante);
Empheq non è un pacchetto standard. Mi preoccuperei piuttosto di vedere se la graffa è grande quanto quella dell’ambiente case dell’amsmath.
5. non permette l’uso di una label globale con cui identificare il sistema nel suo complesso. (correggetemi se sbaglio)
Lo permette:
`\begin{subnumcases}{\label{global]}
x \label{pri}\\
y \label{sec}
\end{subnumcases}
`Dimenticavo, invece di subnumcases si puo usare numcases.
-
4 Dicembre 2008 alle 23:32 #28974::
Ciao Enrio, non sono d’accordo. A volte si ha bisogno di fare riferimento al sistema intero, altre volte alla singola equazione. Penso ad esempio al sistema dui Bear-Nunziato composto da 7 PDE; per semplificarlo si eliminano alcune PDE con delle chiusure algebriche ed è ben piu comodo dire “l’eq 2.14c” piuttosto che la terza equazione del sistema “2.14” ecc…
Non conosco il sistema di Bear-Nunziato, ma direi che se ci sono sette equazioni complicate, la graffa che le racchiude è inutile; basta mettere una numerazione “subordinata”.
Ciao
Enrico
-
4 Dicembre 2008 alle 23:36 #28975::
Bé Enrico, che vuoi che ti dica, negli articoli di fluidodinamica (Bear-Nunziato è solo uno degli innumerevoli esempi) di solito si mette la graffa perché permette di distiguere in un colpo solo le equazioni dalle leggi di chiusura. Qualcuno evita la graffa ma ti assicuro che è “destabilizzante”.
-
4 Dicembre 2008 alle 23:44 #28976::
Bé Enrico, che vuoi che ti dica, negli articoli di fluidodinamica (Bear-Nunziato è solo uno degli innumerevoli esempi) di solito si mette la graffa perché permette di distiguere in un colpo solo le equazioni dalle leggi di chiusura. Qualcuno evita la graffa ma ti assicuro che è “destabilizzante”.
Questioni di abitudine, probabilmente. Io troverei destabilizzanti le graffe enormi. 🙂
Le uso solo nei primi giorni di Algebra Lineare, poi basta. 🙂
Ciao
Enrico
-
5 Dicembre 2008 alle 0:53 #28977::
Comunque, ritornando alla richiesta iniziale, LaTeX ha già questa funzione ! È fornita dal pacchetto “cases” :
Grazie minnolina. Mi hai convinto! cases è la scelta migliore.
Rimane solo un problema. Sto cercando di scrivere un ambiente system* che non numeri le equazioni. Purtroppo però usando l’ambiente array (come consigliato dall’autore di cases) ottengo le equazioni in stile testo.
C’è un modo di ottenerle in displaystyle senza ricorrere a comandi espliciti durante l’uso dell’ambiente che sto cercando di definire? Ad esempio senza che l’utente debba scrivere \dfrac, \displaystyle, ecc…?(Questa domanda è stata posta più volte in varie forme nel forum ma non mi sembra abbia mai trovato risposta)
Grazie.
Ciao ciao.
Fra
-
6 Dicembre 2008 alle 23:21 #28978::
Mi era sfuggito un post sul forum dove si parlava di array e displaystyle 🙁http://www.guit.sssup.it/phpbb/viewtopic.php?t=925
Usando il pacchetto array come suggerito da Enrico si risolve il problema del displaystyle.
`\usepackage{array}
\usepackage{cases}\newenvironment{system}[1][]%
{\begin{equation}#1\left\lbrace\begin{array}{@{}>{\displaystyle}l@{}}}%
{\end{array}\right.\end{equation}}\newenvironment{system*}%
{\begin{displaymath}\left\lbrace\begin{array}{@{}>{\displaystyle}l@{}}}%
{\end{array}\right.\end{displaymath}}\newenvironment{subsystem}[1][]%
{\begin{subnumcases}{#1}}%
{\end{subnumcases}}
`L’argomento opzionale serve per definire una label globale.
Come si nota la spaziatura verticale non è sufficiente. In quel post Enrico usava dei rule che però non vanno bene in una definizione generica.
Ho provato ad usare \arraystretch ma il risultato è comunque bruttino.Mi è venuta in mente un’idea ma non sono riuscito a metterla in pratica.
Vorrei usare stackrel per aggiungere automaticamente un rule, ovviamente invisibile, sopra a ogni equazione.
Ecco un esempio di codice (non funzionante).`\newenvironment{system*}%
{\begin{displaymath}\left\lbrace\begin{array}{@{}>{\displaystyle\stackrel{\rule{0pt}{1ex}}{}}l<{[color=red]}[/color]}@{}}}% {\end{array}\right.\end{displaymath}} ` Spero sia una cosa fattibile! Ciao ciao. Fra -
7 Dicembre 2008 alle 0:56 #28979::
Mi era sfuggito un post sul forum dove si parlava di array e displaystyle 🙁
http://www.guit.sssup.it/phpbb/viewtopic.php?t=925
Usando il pacchetto array come suggerito da Enrico si risolve il problema del displaystyle.
`\usepackage{array}
\usepackage{cases}\newenvironment{system}[1][]%
{\begin{equation}#1\left\lbrace\begin{array}{@{}>{\displaystyle}l@{}}}%
{\end{array}\right.\end{equation}}\newenvironment{system*}%
{\begin{displaymath}\left\lbrace\begin{array}{@{}>{\displaystyle}l@{}}}%
{\end{array}\right.\end{displaymath}}\newenvironment{subsystem}[1][]%
{\begin{subnumcases}{#1}}%
{\end{subnumcases}}
`L’argomento opzionale serve per definire una label globale.
Come si nota la spaziatura verticale non è sufficiente. In quel post Enrico usava dei rule che però non vanno bene in una definizione generica.
Ho provato ad usare \arraystretch ma il risultato è comunque bruttino.Mi è venuta in mente un’idea ma non sono riuscito a metterla in pratica.
Vorrei usare stackrel per aggiungere automaticamente un rule, ovviamente invisibile, sopra a ogni equazione.
Ecco un esempio di codice (non funzionante).`\newenvironment{system*}%
{\begin{displaymath}\left\lbrace\begin{array}{@{}>{\displaystyle\stackrel{\rule{0pt}{1ex}}{}}l<{[color=red]}[/color]}@{}}}% {\end{array}\right.\end{displaymath}} ` Spero sia una cosa fattibile!Che c’entra \stackrel? Perché non una \rule direttamente?
Ciao
Enrico
-
7 Dicembre 2008 alle 1:13 #28980::
Che c’entra \stackrel? Perché non una \rule direttamente?
Perché se metto una rule di altezza fissata, questa non andrebbe bene in tutte le situazioni (almeno credo…).
In pratica se la rule è alta, ad esempio, 4ex, tutto filerebbe liscio nel caso di equazioni con frazioni (sto inventando). Se però poi scrivo equazioni senza frazioni, e quindi “meno alte”, allora la spaziatura sarà esagerata.L’escamotage di stackrel dovrebbe (spero) servire per aggiungere una quantità fissata all’altezza dell’equazione (che invece varia e dipende dall’input dell’utente).
In questo modo sia che si stiano componendo equazioni corpose sia molto semplici, lo spazio tra le equazioni risulterebbe più o meno sempre uguale.Ovviamente tutto questo è pensato affinché chi usa l’ambiente non si debba preoccupare della spaziatura manualmente con \\[2ex] e simili…
Spero di essermi spiegato… 😳
Ciao ciao.
Fra
-
7 Dicembre 2008 alle 1:58 #28981::
Che c’entra \stackrel? Perché non una \rule direttamente?
Perché se metto una rule di altezza fissata, questa non andrebbe bene in tutte le situazioni (almeno credo…).
In pratica se la rule è alta, ad esempio, 4ex, tutto filerebbe liscio nel caso di equazioni con frazioni (sto inventando). Se però poi scrivo equazioni senza frazioni, e quindi “meno alte”, allora la spaziatura sarà esagerata.L’escamotage di stackrel dovrebbe (spero) servire per aggiungere una quantità fissata all’altezza dell’equazione (che invece varia e dipende dall’input dell’utente).
In questo modo sia che si stiano componendo equazioni corpose sia molto semplici, lo spazio tra le equazioni risulterebbe più o meno sempre uguale.Ovviamente tutto questo è pensato affinché chi usa l’ambiente non si debba preoccupare della spaziatura manualmente con \\[2ex] e simili…
Spero di essermi spiegato… 😳
Temo che tu non abbia la minima idea di come funzioni \stackrel. Se vuoi aggiungere una quantità fissa all’altezza dell’equazione, devi comporla in una \box, misurarla, e poi aggiungere a questa misura la tua lunghezza fissa. Ma naturalmente questo deve essere fatto solo dalla seconda equazione in poi.
In alternativa, potresti provare a ridefinire \\ in modo che aggiunga la dimensione fissa: purtroppo \\ viene ridefinito nell’ambiente array. Ma c’è un altro modo.
`\newenvironment{system*}
{\def\ialign{\everycr{\noalign{\vskip10ex}}\tabskip0pt\halign}
\begin{displaymath}
\left\lbrace
\vcenter\bgroup
\vskip-10ex
\hbox\bgroup$\begin{array}{@{}>{\displaystyle}l@{}}
}
{\end{array}$%
\egroup
\vskip-10ex
\egroup
\right.\end{displaymath}}`
Ho usato 10ex per mostrare l’effetto. Tuttavia non può funzionare per l’ambiente con le equazioni numerate.Ciao
Enrico
-
7 Dicembre 2008 alle 13:28 #28982::
`Temo che tu non abbia la minima idea di come funzioni \stackrel`
Beh. . . in effetti non so come funzioni internamente, so solo quanto riportato sulle guide di base. Speravo fosse una buona idea quella di usare stackrel (in maniera non molto pulita) per aumentare invisibilmente l’altezza delle equazioni, di certo non avevo considerato che la prima non dovesse essere aumentata. 🙁Ma c’è un altro modo
Grazie Enrico. Rimango sempre più stupìto!
(Non ti chiedo di spiegarla. Piano piano sto studiando, spero che un giorno riuscirò a capirla da solo!)Ecco le tre definizioni:
`\usepackage{array}
\usepackage{cases}\newenvironment{system*}
{\def\ialign{\everycr{\noalign{\vskip1ex}}\tabskip0pt\halign}
\begin{displaymath}
\left\lbrace
\vcenter\bgroup
\vskip-1ex
\hbox\bgroup$\begin{array}{@{}>{\displaystyle}l@{}}
}
{\end{array}$%
\egroup
\vskip-1ex
\egroup
\right.\end{displaymath}}\newenvironment{system}[1][]
{\def\ialign{\everycr{\noalign{\vskip1ex}}\tabskip0pt\halign}
\begin{equation}#1
\left\lbrace
\vcenter\bgroup
\vskip-1ex
\hbox\bgroup$\begin{array}{@{}>{\displaystyle}l@{}}
}
{\end{array}$%
\egroup
\vskip-1ex
\egroup
\right.\end{equation}}\newenvironment{subsystem}[1][]%
{\begin{subnumcases}{#1}}%
{\end{subnumcases}}`E un esempio del loro uso:
`\begin{system*}
\vec{\nabla} \cdot \vec{E} = \frac{\rho}{\varepsilon_0} \\
\vec{\nabla} \wedge \vec{E} = -\frac{\partial \vec{B}}{\partial t} \\
\vec{\nabla} \cdot \vec{B} = 0 \\
\vec{\nabla} \wedge \vec{B} = \mu_0 \vec{J} + \varepsilon_0 \mu_0 \frac{\partial \vec{E}}{\partial t}
\end{system*}\begin{system}[\label{maxwell_system}]
\vec{\nabla} \cdot \vec{E} = \frac{\rho}{\varepsilon_0} \\
\vec{\nabla} \wedge \vec{E} = -\frac{\partial \vec{B}}{\partial t} \\
\vec{\nabla} \cdot \vec{B} = 0 \\
\vec{\nabla} \wedge \vec{B} = \mu_0 \vec{J} + \varepsilon_0 \mu_0 \frac{\partial \vec{E}}{\partial t}
\end{system}\begin{subsystem}[\label{maxwell_system}]
\vec{\nabla} \cdot \vec{E} = \frac{\rho}{\varepsilon_0} \\
\vec{\nabla} \wedge \vec{E} = -\frac{\partial \vec{B}}{\partial t} \label{maxwell_second_eq} \\
\vec{\nabla} \cdot \vec{B} = 0 \\
\vec{\nabla} \wedge \vec{B} = \mu_0 \vec{J} + \varepsilon_0 \mu_0 \frac{\partial \vec{E}}{\partial t}
\end{subsystem}`Una curiosità (Enrico ti prego abbi pazienza. . . 😳 )
la definizione di system e system* poteva essere
fatta usando aligned all’interno, rispettivamente, di displaymath ed equation.
Il problema è che senza caratteri di allineamento (&) l’ambiente aligned allinea tutto a destra.
Esiste un modo (semplice) per far sì che aligned allinei di default a sinistra anziché a destra? Se non c’è ignoratemi!Grazie davvero a tutti, in particolare al mitico Enrico.
Ciao ciao.
Fra
-
7 Dicembre 2008 alle 14:56 #28983::
`Temo che tu non abbia la minima idea di come funzioni \stackrel`
Beh. . . in effetti non so come funzioni internamente, so solo quanto riportato sulle guide di base. Speravo fosse una buona idea quella di usare stackrel (in maniera non molto pulita) per aumentare invisibilmente l’altezza delle equazioni, di certo non avevo considerato che la prima non dovesse essere aumentata. 🙁Semplicemente dice di usare un certo simbolo di relazione in un certo punto e lo costruisce come indicato dagli argomenti. Non prende certo l’intera espressione che segue come secondo argomento.
Ma c’è un altro modo
Grazie Enrico. Rimango sempre più stupìto!
(Non ti chiedo di spiegarla. Piano piano sto studiando, spero che un giorno riuscirò a capirla da solo!)Non c’è molto da spiegare. La macro \array usa internamente \ialign che ha la stessa definizione che do nell’ambiente a parte che pone \everycr={}. A noi serviva invece inserire a ogni cambio riga una spaziatura supplementare e questo si ottiene definendo \everycr={\noalign{\vskip1ex}}.
C’è però il problema che questo inserisce lo spazio anche in testa e in coda all’allineamento. Perciò chiudo il tutto in un \vcenter (che è come \vbox ma centra il risultato rispetto all’asse delle formule); in questa box inserisco uno spazio negativo che compensi quello iniziale dell’allineamento, l’allineamento stesso (dentro una \hbox per non andare in modo orizzontale che creerebbe righe alla giustezza usuale) e uno spazio negativo simile al precedente.
Ciao
Enrico
-
11 Dicembre 2008 alle 23:31 #28984::
Grazie mille per le spiegazioni Enrico!Non prende certo l’intera espressione che segue come secondo argomento.
Ribadisco che l’uso che volevo fare di stackrel non è né ortodosso e né utile ai fini di quello che volevo ottenere perché non prendeva in considerazione lo spazio sulla prima riga, però il seguente codice mi viene compilato senza alcun problema (Forse faccio confusione. . . 😳 ):
`\[
\stackrel{\rule{2pt}{10pt}}{\vec{\nabla} \wedge \vec{E} = -\frac{\partial \vec{B}}{\partial t} \label{maxwell_second_eq}}
\]
`In un altro post ho conosciuto, sempre grazie ad Enrico, il pacchetto mathtools. Leggendone la documentazione ho trovato l’utilissimo ambiente lgathered. Ripropongo quindi delle nuove definizioni per i tre ambienti precedenti di cui si è discusso finora (notare l’uso di lgathered).
`\usepackage{mathtools}
\usepackage{cases}\newenvironment{system*}%
{\begin{displaymath}\left\lbrace \begin{lgathered}}%
{\end{lgathered} \right. \end{displaymath}}\newenvironment{system}[1][]%
{\begin{equation}#1\left\lbrace \begin{lgathered}}%
{\end{lgathered} \right. \end{equation}}\newenvironment{subsystem}[1][]%
{\begin{subnumcases}{#1}}%
{\end{subnumcases}}`Attenzione all’ordine in cui si caricano mathtools e cases. Se si inverte l’ordine si ottiene un errore di ambiente già definito (subequations). Non mi sembra che ci sia scritto nella documentazione.
Ciao ciao.
Fra
-
11 Dicembre 2008 alle 23:47 #28985::
Grazie mille per le spiegazioni Enrico!
Non prende certo l’intera espressione che segue come secondo argomento.
Ribadisco che l’uso che volevo fare di stackrel non è né ortodosso e né utile ai fini di quello che volevo ottenere perché non prendeva in considerazione lo spazio sulla prima riga, però il seguente codice mi viene compilato senza alcun problema (Forse faccio confusione. . . 😳 ):
`\[
\stackrel{\rule{2pt}{10pt}}{\vec{\nabla} \wedge \vec{E} = -\frac{\partial \vec{B}}{\partial t} \label{maxwell_second_eq}}
\]
`In un altro post ho conosciuto, sempre grazie ad Enrico, il pacchetto mathtools. Leggendone la documentazione ho trovato l’utilissimo ambiente lgathered. Ripropongo quindi delle nuove definizioni per i tre ambienti precedenti di cui si è discusso finora (notare l’uso di lgathered).
`\usepackage{mathtools}
\usepackage{cases}\newenvironment{system*}%
{\begin{displaymath}\left\lbrace \begin{lgathered}}%
{\end{lgathered} \right. \end{displaymath}}\newenvironment{system}[1][]%
{\begin{equation}#1\left\lbrace \begin{lgathered}}%
{\end{lgathered} \right. \end{equation}}\newenvironment{subsystem}[1][]%
{\begin{subnumcases}{#1}}%
{\end{subnumcases}}`Attenzione all’ordine in cui si caricano mathtools e cases. Se si inverte l’ordine si ottiene un errore di ambiente già definito (subequations). Non mi sembra che ci sia scritto nella documentazione.
Il pacchetto mathtools ha un sacco di cose, alcune anche discutibili.
Il tuo problema con \stackrel è che avevi sbagliato a scrivere la definizione dell’ambiente. Ma, in ogni caso, stavi dicendo a TeX di sovrapporre una rule alta 2ex a una formula vuota. Anche quell’esempio che fai denota una deplorevole tendenza a mettere le graffe nel posto sbagliato: perché mai mettere \label nel secondo argomento di \stackrel? A dire il vero io me le dimentico spesso. 🙁
Il comando \stackrel non andrebbe usato in ogni caso, preferendogli i comandi più flessibili di amsmath. Ciò che produce è sempre una sottoformula che si comporta come un simbolo di relazione, con le spaziature conseguenti. Trucchi del genere con \stackrel e \rule invisibili sono roba da principianti. 😉
Ciao
Enrico
-
12 Dicembre 2008 alle 0:11 #28986::
Il pacchetto mathtools ha un sacco di cose, alcune anche discutibili.
Ritieni che ci sia qualche effetto discubitile anche semplicemente caricandolo? O in particolare nell’uso di lgathered? Oppure ti riferisci ad altri aspetti?
perché mai mettere \label nel secondo argomento di \stackrel?
Me lo dimentico anch’io spesso 😛
Però stavolta l’ho fatto apposta per far vedere che
stackrel poteva prendere in pasto di tutto! (o quasi)Trucchi del genere con \stackrel e \rule invisibili sono roba da principianti.
Questo è sicuro! 😆
Ciao ciao.
Fra
-
11 Febbraio 2009 alle 15:06 #28987
-
11 Febbraio 2009 alle 15:09 #28988
-
12 Febbraio 2009 alle 0:41 #28989::
Grazie per l’indicazione!Però mi sono accorto che il mio problema è un altro…
Il pacchetto cases risulta come se fosse installato: lo richiamo con il comando usepackage senza averlo previamente installato e non mi viene segnalato nessun errore, anche se il pacchetto non compare nella lista di MPM. Però sembrerebbe essere incompatibile con amsmath perché entrambi definiscono l’ambiente subequations.
Provando a usare i comandi di cases come segue:
`\begin{numcases}{p =}
S^B\theta^B_B + S^F \theta^F_B & if the target is user $B$ \\
S^B\theta^B_F + S^F \theta^F_F & if the target is user $F$ \\
S_B\theta^B_F + S^F \theta^F_F & if the target are both users
\end{numcases}`ottengo un messaggio d’errore:
Missing delimeter (. inserted).
(to be read again)
\left
\end{numcases}Avete qualche idea di perché sorge questo problema e di come correggerlo?
-
12 Febbraio 2009 alle 1:57 #28990::
Provando a usare i comandi di cases come segue:
`\begin{numcases}{p =}
S^B\theta^B_B + S^F \theta^F_B & if the target is user $B$ \\
S^B\theta^B_F + S^F \theta^F_F & if the target is user $F$ \\
S_B\theta^B_F + S^F \theta^F_F & if the target are both users
\end{numcases}`ottengo un messaggio d’errore:
Missing delimeter (. inserted).
(to be read again)
\left
\end{numcases}Avete qualche idea di perché sorge questo problema e di come correggerlo?
Sono riuscito a svelare l’arcano! L’incompatibilità è con il pacchetto mathenv… una volta disattivato ho ottenuto il risultato voluto!
-
10 Marzo 2009 alle 23:31 #28991::
Mi sono accorto che le definizioni di system, system* e subsystem hanno un bug.Prendiamo a caso l’ultima.
`\documentclass{book}
\usepackage{cases}
\newenvironment{subsystem}[1][]{\begin{subnumcases}{#1}}{\end{subnumcases}}\begin{document}
Ciao ecco un esempio molto stupido. Ciao ecco un esempio molto stupido. Ciao ecco un esempio molto stupido. Ciao ecco un esempio molto stupido. Ciao ecco un esempio molto stupido.
\begin{subsystem}
a=b \\
b=c
\end{subsystem}
Ricominciamo, ecco un esempio molto stupido. Ciao ecco un esempio molto stupido. Ciao ecco un esempio molto stupido. Ciao ecco un esempio molto stupido. Ciao ecco un esempio molto stupido. Ciao ecco un esempio molto stupido.\end{document}`
Potete notare un piccolo rientro prima della parola “Ricominciamo”. Cosa che non accade se invece scrivo direttamente
`\begin{subnumcases}{}
a=b \\
b=c
\end{subnumcases}`Non riesco a capire perché faccia così. . . 🙁
Qualcuno ha qualche idea?[edit]
Se nel sorgente non vado a capo dopo la fine dell’ambiente il problema non si presenta. Es. \end{subsystem} Ricominciamo. . .
[/edit]Grazie mille.
Ciao ciao.
Fra
-
11 Marzo 2009 alle 0:01 #28992::
Mi sono accorto che le definizioni di system, system* e subsystem hanno un bug.
Prendiamo a caso l’ultima.
`\documentclass{book}
\usepackage{cases}
\newenvironment{subsystem}[1][]{\begin{subnumcases}{#1}}{\end{subnumcases}}\begin{document}
Ciao ecco un esempio molto stupido. Ciao ecco un esempio molto stupido. Ciao ecco un esempio molto stupido. Ciao ecco un esempio molto stupido. Ciao ecco un esempio molto stupido.
\begin{subsystem}
a=b \\
b=c
\end{subsystem}
Ricominciamo, ecco un esempio molto stupido. Ciao ecco un esempio molto stupido. Ciao ecco un esempio molto stupido. Ciao ecco un esempio molto stupido. Ciao ecco un esempio molto stupido. Ciao ecco un esempio molto stupido.\end{document}`
Potete notare un piccolo rientro prima della parola “Ricominciamo”. Cosa che non accade se invece scrivo direttamente
`\begin{subnumcases}{}
a=b \\
b=c
\end{subnumcases}`Non riesco a capire perché faccia così. . . 🙁
Qualcuno ha qualche idea?[edit]
Se nel sorgente non vado a capo dopo la fine dell’ambiente il problema non si presenta. Es. \end{subsystem} Ricominciamo. . .
[/edit]Grazie mille.
Ciao ciao.
Fra`\newenvironment{subsystem}[1][]
{\begin{subnumcases}{#1}}
{\end{subnumcases}\ignorespacesafterend}`
Ciao
Enrico
-
11 Marzo 2009 alle 0:35 #28993::
Grazie Enrico! Sei strepitoso.Riecco le definizioni rivedute e corrette
`\usepackage{mathtools}
\usepackage{cases}\newenvironment{system*}%
{\begin{displaymath}\left\lbrace \begin{lgathered}}%
{\end{lgathered} \right. \end{displaymath}\ignorespacesafterend}\newenvironment{system}[1][]%
{\begin{equation}#1\left\lbrace \begin{lgathered}}%
{\end{lgathered} \right. \end{equation}\ignorespacesafterend}\newenvironment{subsystem}[1][]%
{\begin{subnumcases}{#1}}%
{\end{subnumcases}\ignorespacesafterend}
`Ciao ciao.
Fra
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.