TEX al lavoro Galleria di esempi
Enrico Gregorio Universit`a di Verona
I seguenti esempi dovrebbero servire a trovare idee per la composizione di testi usando LATEX. Si assume l’uso dei pacchetti amsmath e amsthm (per gli enunciati di teoremi). Ho cercato in vari testi matematici, la collezione non `e troppo ampia, ma potrebbe aumentare con le indicazioni dei lettori.
Un ottimo posto in cui discutere possibili esempi da inserire `e il gruppo di discussio- ne it.comp.software.tex. Sono gradite anche osservazioni di qualunque genere su come eventualmente migliorare gli esempi citati qui.
Ogni esempio `e corredato dal sorgente; eventuali definizioni da porre nel preambolo sono all’inizio del listato, separati da una fila di segni %
f =
∂¯
z¯2
z1(|z1|2+ |z2|2)
, z16= 0,
− ¯∂
z¯1
z2(|z1|2+ |z2|2)
, z26= 0.
Commento
Quando si usa \dfrac `e importante agire sulla spaziatura fra le righe, che pu`o non riuscire corretta. Occorre quindi aggiungere una spaziatura (vedi riga 10).
Ho preferito \bar a \overline, anche se sarebbe pi`u corretto \overline{z_{1}}
invece di \bar{z}_{1}, che producono rispettivamente z1, z¯1.
Il senso `e comunque chiaro e il risultato meno appariscente.
1 – esempio
1 \newcommand{\abs}[1]{\lvert#1\rvert}
2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3 \[
4 f=
5 \begin{cases}
6 \bar{\partial}
7 \left(
8 \dfrac{\bar{z}_{2}}{z_{1}(\abs{z_{1}}^{2}+\abs{z_{2}}^{2})}
9 \right),
10 & z_{1}\ne 0,\\[12pt]
11 -\bar{\partial}
12 \left(
13 \dfrac{\bar{z}_{1}}{z_{2}(\abs{z_{1}}^{2}+\abs{z_{2}}^{2})}
14 \right),
15 & z_{2}\ne 0.
16 \end{cases}
17 \]
1 – codice
It=
(x1, x2) : x2=t2
4, −t ≤ x1≤ t
∪
(x1, x2) : x1= t, −t2
2 ≤ x2≤ t2 4
,
Jt=
(x1, x2) : −t < x1< t,t2 4 − t
3(x1+ t) < x2< t2 4
.
Commento
Con formule cos`ı complicate `e bene che il codice LATEX sia ben sistemato. Ricor- diamo che gli spazi in modo matematico sono ignorati (quindi anche i fine riga, non per`o due consecutivi, cio`e una riga vuota).
Sebbene LATEX accetti anche la sintassi {a\over b} per la frazione \frac{a}{b},
`
e bene usare la seconda. Pi`u avanti vedremo un esempio di \dfrac che diventa un po’ pi`u complicato con l’altra sintassi (non troppo, `e vero, ma la sintassi LATEX `e pi`u espressiva comunque).
2 – esempio
1 \begin{gather*}
2 I_{t}=
3 \left\{
4 (x_{1},x_{2}) : x_{2}=\frac{t^{2}}{4}, -t\le x_{1}\le t
5 \right\}
6 \cup
7 \left\{
8 (x_{1},x_{2}) : x_{1}=t, -\frac{t^{2}}{2}\le x_{2}\le \frac{t^{2}}{4}
9 \right\},\\
10 J_{t}=
11 \left\{
12 (x_{1},x_{2}) : -t < x_{1} < t,
13 \frac{t^{2}}{4}-\frac{t}{3}(x_{1}+t) < x_{2} < \frac{t^{2}}{4}
14 \right\}.
15 \end{gather*}
2 – codice
Theorem 1.1. Let assumption (K) hold and let u be a stable, piecewise constant κ-constant discontinuity. If h+∈ BV (R±) satisfies
(1) kh±− u±kL∞ ≤ δ V (h±) ≤ δ,
for some δ > 0 sufficiently small, then the initial-value problem (2)
(∂tu + ∂xf (u) = 0,
u(0, x) = h±(x), ±x > 0,
has a weak solution u in R+t × Rx with a large jump along a curve x − χ(t) = 0. The function χ is in Lip(R+t), χ(0) = 0, and q := χ0 ∈ BV (R+t). Moreover the following estimates hold:
ku±− u±kL∞ ≤ C{kh−− u−kL∞+ kh+− u+kL∞}, (3)
V (u±(t, · )) + V (q) ≤
C{V (h−) + V (h+) + |h(0−) − u−| + |h(0+) − u+|}, (4)
for some positive constant C.
Commento
Notiamo la definizione di \abs e \norm. Abbiamo anche definito in modo particolare il comando \BV; si veda la differenza fra ci`o che si ottiene rispettivamente con
$BV(\R^{\pm})$ e $\mathit{BV}(\R^{\pm})$:
BV (R±) BV (R±)
lieve, ma apprezzabile. Per indicare il puntino segnaposto nella costruzione u±(t, · ) abbiamo definito un apposito comando \blank.
Per risolvere la formula da spezzare (la quarta), abbiamo usato aligned con l’ar- gomento opzionale [t]. Si sarebbe potuto impiegare anche split.
Ultima osservazione riguarda l’uso di \thetag, per richiamare una precedente condizione nominata con un simbolo attraverso \tag e non un numero.
3 – esempio
1 \newcommand{\abs}[1]{\lvert#1\rvert}
2 \newcommand{\norm}[1]{\lVert#1\rVert}
3 \newcommand{\R}{\mathbf{R}}
4 \newcommand{\BV}{\mathit{BV}}
5 \newcommand{\blank}{\;{\cdot}\;}
6 \DeclareMathOperator{\Lip}{Lip}
7 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8 \begin{thm}\label{jump}
9 Let assumption \thetag{$\mathcal{K}$} hold and let $\underline{u}$ be a
10 stable, piecewise constant $\kappa$-constant discontinuity. If
11 $h^{+}\in\BV(\R^{\pm})$ satisfies
12 \begin{equation}\label{condition}
13 \norm{h^{\pm}-\underline{u}^{\pm}}_{L^{\infty}}\le\delta
14 \qquad V(h^{\pm})\le\delta,
15 \end{equation}
16 for some $\delta>0$ sufficiently small, then the initial-value problem
17 \begin{equation}\label{problem}
18 \begin{cases}
19 \partial_{t}u+\partial_{x}f(u)=0,\\
20 u(0,x)=h^{\pm}(x), & \pm x>0,
21 \end{cases}
22 \end{equation}
23 has a weak solution $u$ in $\R_{t}^{+}\times\R_{x}$ with a large jump
24 along a curve $x-\chi(t)=0$. The function $\chi$ is in
25 $\Lip(\R_{t}^{+})$, $\chi(0)=0$, and $q:=\chi’\in\BV(\R_{t}^{+})$.
26 Moreover the following estimates hold:
27 \begin{gather}
28 \norm{u^{\pm}-\underline{u}^{\pm}}_{L^{\infty}}\le
29 C\lbrace
30 \norm{h^{-}-\underline{u}^{-}}_{L^{\infty}}+
31 \norm{h^{+}-\underline{u}^{+}}_{L^{\infty}}
32 \rbrace,
33 \label{est1}\\
34 \begin{aligned}[t]
35 &V(u^{\pm}(t,\blank))+V(q)\le{}\\
36 &\qquad C\lbrace V(h^{-})+V(h^{+})+
37 \abs{h(0{-})-\underline{u}^{-}}+\abs{h(0{+})-\underline{u}^{+}}
38 \rbrace,
39 \end{aligned}
40 \label{est2}
41 \end{gather}
42 for some positive constant~$C$.
43 \end{thm}
3 – codice
I(β(γm),(δm)
m);m f (z) = I(β(γ1,...,γm),(δ1,...,δm)
1,...,βm);m f (z)
= 1 z
Z z 0
Hm,mm,0
"
t z
(γk+ δk+ 1 − 1/βk, 1/βk)1,m
(γk+ 1 − 1/βk, 1/βk)1,m
# f (t) dt,
for
m
X
1
δk > 0;
= f (z) δ1= · · · = δm= 0,
Commento
Pi`u che sull’allineamento, cos`ı trattato perch´e l’articolo originale compariva su una rivista con lunghezza di linea di 11,3 centimetri, vorrei soffermarmi sulle definizioni.
\INT `e per un “operatore integrale”, con multi-indici a pedice e a esponente. Niente di particolare.
\upla `e per scrivere m-uple; c’`e anche un argomento opzionale: se invece di una m-upla si dovesse scrivere una n-upla basta dare \upla[n]{\beta}.
\LIMITS invece produce una sbarra con affiancati un limite inferiore e un limite superiore. Si noti l’uso di @{} nell’ambiente array per eliminare gli spazi prima e dopo l’unica colonna. Si sarebbe potuto usare matrix, ma il risultato `e identico, visto che matrix `e definito in termini di array.
Questo `e uno dei pochi casi in cui `e lecito il comando \;, che comunque va usato quasi solo nelle definizioni di comandi.
4 – esempio
1 \newcommand{\upla}[2][m]{(#2_{1},\dots,#2_{#1})}
2 \newcommand{\INT}[2]{I_{#1}^{#2}}
3 \newcommand{\LIMITS}[2]{%
4 \;\bigg|%
5 \begin{array}{@{}l@{}}
6 #2\\
7 #1
8 \end{array}}
9 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10 \[
11 \begin{cases}
12 \begin{aligned}
13 \INT{(\beta_{m});m}{(\gamma_{m}),(\delta_{m})}f(z)
14 &=\INT{\upla{\beta};m}{\upla{\gamma},\upla{\delta}}f(z)\\
15 &=\frac{1}{z}\int_{0}^{z}H_{m,m}^{m,0}%
16 \left[
17 \frac{t}{z}
18 \LIMITS{(\gamma_{k}+1-1/\beta_{k},1/\beta_{k})_{1,m}}
19 {(\gamma_{k}+\delta_{k}+1-1/\beta_{k},1/\beta_{k})_{1,m}}
20 \right]
21 f(t)\,dt,
22 \\
23 &\hspace{6cm}\text{for }\sum_{1}^{m}\delta_{k}>0;
24 \\
25 &=f(z)\qquad \delta_{1}=\dots=\delta_{m}=0,
26 \end{aligned}
27 \end{cases}
28 \]
4 – codice
Proof. . . .
The following inequalities conclude the proof:
|hzn− zm, f i| ≤
≤
zn− zm, f −
k
X
i=1
x0i⊗ y0i
+
zn− zm,
k
X
i=1
x0i⊗ y0i
< µ.
Commento
La dimostrazione termina con una formula centrata; c’`e quindi il problema di come trattare il simbolo di “QED”. I pacchetti dell’AMS lo risolvono, in particolare amsthm, con \qedhere. Qui la formula andrebbe trattata con multline, ma per ovvi motivi \qedhere funziona male in questo ambiente. L’ho quindi risolto con un aligned, imponendo come linea fondamentale l’ultima (argomento opzionale [b]).
Si noti il gruppo vuoto {} alla fine della prima riga, per dare la corretta spaziatura al simbolo di relazione. Non occorre nella riga successiva, perch´e \qquad `e visto come un simbolo ordinario.
Due parole sulla scelta di \biggl-\biggr e non \left-\right. Quando ci sono simboli di sommatoria, l’automatismo di \left-\right produce spesso parentesi troppo grandi. Di seguito vediamo un esempio, con la scelta manuale a sinistra e quella automatica a destra:
m X
i=1
xi
,
m
X
i=1
xi
! .
Dopo un comando come \left e \right o \big e affini, invece di \lvert o \rvert si pu`o indicare semplicemente |; invece di \langle e \rangle si pu`o scrivere < e >.
5 – esempio
1 \begin{proof}
2 \ldots
3
4 The following inequalities conclude the proof:
5 \[
6 \begin{aligned}[b]
7 &\lvert\langle z_{n}-z_{m},f\rangle\rvert\le{}\\
8 &\qquad\le
9 \biggl|
10 \biggl<
11 z_{n}-z_{m},f-\sum_{i=1}^{k} x_{i}’\otimes y_{i}’
12 \biggr>
13 \biggr|
14 +
15 \biggl|
16 \biggl<
17 z_{n}-z_{m},\sum_{i=1}^{k} x_{i}’\otimes y_{i}’
18 \biggr>
19 \biggr|
20 <\mu.
21 \end{aligned}
22 \qedhere
23 \]
24 \end{proof}
5 – codice
sup
β∈Aα
sup
kvk=1
Z
Rn
β[g(vm− v0) − g(vm) + G(v0)]v dx
→ 0
Commento
Senza le spaziature manuali, la formula sarebbe risultata imperfetta. Ho usato in questo caso \int\limits perch´e l’integrale `e esteso a un dominio. Esiste l’apposita opzione a amsmath per rendere questo il comportamento di tutti gli integrali.
Comunque la correzione delle spaziature imperfette va fatta solo alla fine della stesura.
6 – esempio
1 \[
2 \sup_{\beta\in A_{\alpha}}
3 \sup_{\lVert v\rVert=1}\;
4 \biggl|\,
5 \int\limits_{\R^{n}}\beta[g(v_{m}-v_{0})-g(v_{m})+G(v_{0})]v\,dx
6 \,\biggr|
7 \to 0
8 \]
6 – codice
dir lim
n≥0 Diff(+)n (P, Q) ≡ [
n≥0
Diff(+)n (P, Q) .
= Diff(+)(P, Q)
dRσ(D) : 0 −−−→ A d
D
−−−→ Λσ(1) σ(1)D −−−→ · · · −−−→ Λσ(n)D d
D σ(n+1)
−−−−−→ Λσ(n+1)D −−−→ · · ·
Commento
Due formule tratte da parti diverse di uno stesso articolo. Nel primo `e definito un operatore “Diff” che l’autore preferisce in corsivo: si noti la legatura fra le due effe. Si noti anche come viene definito l’operatore “dir lim”: lo spazio sottile per separare e l’asterisco nella definizione che impone un comportamento simile all’usuale operatore “lim”.
Nella seconda formula c’`e il problema delle frecce con etichetta piuttosto ampia.
Viene risolto usando il comando \xrightarrow di amsmath. Nel diagramma `e definito un comando provvisorio \PH per fare in modo che anche le frecce senza etichetta siano lunghe. C’`e una lieve differenza di lunghezza nella quinta freccia, che per`o `e irrilevante.
E stata data anche “una mano” all’automatismo di \dots per ottenere lo stesso` comportamento dei puntini.
Per i caratteri matematici neri si `e usato il pacchetto bm: la costruzione tradizionale avrebbe richiesto comandi come
1 \newcommand{\bL}{\mbox{\boldmath$\Lambda$}}
mentre questo pacchetto tratta in modo migliore il problema; per esempio possiamo scrivere A_{\bL} e ottenere AΛ, che non sarebbe successo con il comando con
\boldmath, se non a prezzo di fatiche notevoli.
7 – esempio
1 \DeclareMathOperator*{\dirlim}{dir\,lim}
2 \DeclareMathOperator{\Diff}{\mathit{Diff}}
3 \newcommand{\dR}{\bm{d}\bm{R}}
4 \newcommand{\bL}{\bm{\Lambda}}
5 \newcommand{\fD}{\mathfrak{D}}
6 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7 \[
8 \dirlim_{n\ge0}\Diff^{(+)}_{n}(P,Q)\equiv
9 \bigcup_{n\ge0}\Diff^{(+)}_{n}(P,Q)\doteq
10 \Diff^{(+)}(P,Q)
11 \]
12 \[
13 \newcommand{\PH}{\phantom{d_{\sigma(n)}^{\fD}}}
14 \dR_{\sigma}(\fD)\colon
15 0\xrightarrow{\PH}
16 A\xrightarrow{d_{\sigma(1)}^{\fD}}
17 \bL_{\fD}^{\sigma(1)}\xrightarrow{\PH}
18 \dotsb\xrightarrow{\PH}
19 \bL_{\fD}^{\sigma(n)}\xrightarrow{d_{\sigma(n+1)}^{\fD}}
20 \bL_{\fD}^{\sigma(n+1)}
21 \xrightarrow{\PH}
22 \dotsb
23 \]
7 – codice
Λσ(n)A/K dσ(n+1),A/K //
loc•S
locS
zzuuuuuuuuu
Λσ(n+1)A/K
locS
K %%K KK KK KK K
loc•S
(Λσ(n)A/K)S
ϕIσ(n)SIIIIIII$$I (Λσ(n+1)A/K )S ϕσ(n+1)S
yysssssssss Λσ(n)A
S/K dσ(n+1),AS /K
// Λσ(n+1)A
S/K
Commento
Si tratta di un diagramma disegnato con XY-pic. Ho usato il comando \bL del- l’esempio precedente. Si notino le colonne “fittizie” usate per migliorare l’aspetto del diagramma (ci sono due colonne fra i lati verticali del rettangolo centrale; una sarebbe stata insufficienti).
Si noti anche che, quando un & `e seguito da un comando, `e bene proteggere il comando mettendolo tra graffe (questo vale solo per XY-pic).
In questo caso “loc” non `e un operatore, quindi `e definito semplicemente con
\mathrm.
8 – esempio
1 \usepackage[all,cmtip]{xy}
2 \newcommand{\loc}{\mathrm{loc}}
3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4 \[
5 \xymatrix{
6 &{\bL}_{A/K}^{\sigma(n)}
7 \ar[rrr]^{d_{\sigma(n+1),A/K}}
8 \ar[dd]_{\loc_{S}^{\bullet}}
9 \ar[dl]_{\loc_{S}}
10 &&&{\bL}_{A/K}^{\sigma(n+1)}
11 \ar[dr]^{\loc_{S}}
12 \ar[dd]^{\loc_{S}^{\bullet}}
13 \\
14 (\bL_{A/K}^{\sigma(n)})_{S}
15 \ar[dr]_{\varphi_{S}^{\sigma(n)}}
16 &&&&&(\bL_{A/K}^{\sigma(n+1)})_{S}
17 \ar[dl]^{\varphi_{S}^{\sigma(n+1)}}
18 \\
19 &{\bL}_{A_{S}/K}^{\sigma(n)}
20 \ar[rrr]_{d_{\sigma(n+1),A_{S}/K}}
21 &&&{\bL}_{A_{S}/K}^{\sigma(n+1)}
22 }
23 \]
8 – codice
Differentiating both sides of (SODE) with respect to X and Ξ, and applying Assumption φ, we have
(5) J (t, X, Ξ) ≤ J (t, X, Ξ) exp(c6.1), t ≥ 0, where · denotes a norm of matrices defined as (aij) = P
i,j|aij|1/2 .
Commento
Qui l’autore richiedeva un modo particolare di denotare una norma matriciale; la definizione del comando apposito usa perci`o metodi che richiedono una conoscenza di TEX abbastanza approfondita. Per esempio, si usa il comando primitivo \vrule invece di \rule per evitare certi calcoli.
Il comando \mnorm `e definito con un argomento opzionale per permettere di far aumentare la grandezza delle sbarre:
1 \mnorm{A}\quad\mnorm[\big]{A}\quad\mnorm[\Big]{A}\quad
2 \mnorm[\bigg]{A}\quad\mnorm[\Bigg]{A}
produce
A A A A A
per cui si pu`o scrivere qualcosa come
∞
X
n=0
An
n! = exp(A) con
1 \[
2 \mnorm[\bigg]{\sum_{n=0}^{\infty}\frac{A^{n}}{n!}}=\mnorm{\exp(A)}
3 \]
La definizione data ha anche il vantaggio che funziona in tutti i corpi1, poich´e la grandezza della sbarra `e calcolata ogni volta.
Comandi \mnorm possono anche essere annidati:
A A = 1
si ottiene con \mnorm[\bigg]{\frac{A}{\mnorm{A}}}=1.
Un effetto analogo, ma non del tutto soddisfacente, si ottiene con \bracevert:
1 \left\bracevert A\right\bracevert produce
A
.
1Ad esempio nelle note: I = k(1, . . . , 1)k =√
n, se I `e la matrice identit`a n × n.
9 – esempio
1 \newcommand{\solid}{}
2 \newcommand{\mnorm}[2][]{%
3 \calculate{#1}\mkern2mu\solid\,{#2}\,\solid\mkern2mu}
4 \newcommand{\calculate}[1]{%
5 \setbox0=\hbox{$#1|$}%
6 \renewcommand{\solid}{\mbox{\vrule height \ht0 depth \dp0 width .5wd0}}}
7 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8 Differentiating both sides of (SODE) with respect to $X$ and $\Xi$,
9 and applying Assumption~$\phi$, we have
10 \begin{equation}\label{mnorm}
11 \mnorm{J(t,X,\Xi)}\le\mnorm{J(t,X,\Xi)}\exp(c_{6.1}),\quad t\ge0,
12 \end{equation}
13 where $\mnorm{\blank}$ denotes a norm of matrices defined as
14 $\mnorm{(a_{ij})}=\bigl(\sum_{i,j}\abs{a_{ij}}\bigr)^{1/2}$.
9 – codice
S(a)
ϕ
B
σ
l 55l ll ll ll ll ll ll ll ll //
τRRRRRRR ))R RR
RR RR RR R
xxpppppppppppppp B/b
η
<<y yy yy yy y
ξ
""E EE EE EE E
C ψ // G(a)oo % R(a)
Commento
Si tratta solo di un diagramma complicato, serve solo per dare un’idea di alcune potenzialit`a di XY-pic. Si notino le lettere in caratteri tedeschi (\mathfrak) e le varianti \varphi e \varrho.
10 – esempio
1 \[
2 \xymatrix{
3 &&&&S(\mathfrak{a})
4 \ar[dd]^{\varphi}
5 \\
6 &&B
7 \ar[urr]^{\sigma}
8 \ar[r]
9 \ar[drr]_{\tau}
10 \ar[dll]
11 &B/\mathfrak{b}
12 \ar[ur]_{\eta}
13 \ar[dr]^{\xi}
14 \\
15 C
16 \ar[rr]_{\psi}
17 &&G(\mathfrak{a})
18 &&R(\mathfrak{a})
19 \ar[ll]^{\varrho}
20 }
21 \]
10 – codice
q(k)= q(k)1 ⊂ q(k)2 ⊂ · · · ⊂ q(k)k−1⊂ q(k)k = q(k)k+1= · · · = q(k)∞
∪ ∪
q(k)= ˜q(k)1 ⊂ ˜q(k)2 ⊂ · · · ⊂ ˜q(k)k−1⊂ ˜q(k)k = ˜q(k)k+1= · · · = q(k)∞
q(k)= q(k)1 ⊂ q(k)2 ⊂ · · · ⊂ q(k)k−1⊂ q(k)k = q(k)k+1= · · · = q(k)∞
= = ⊂ ⊂ = = =
q(k)= ˜q(k)1 ⊂ ˜q(k)2 ⊂ · · · ⊂ ˜q(k)k−1⊂ ˜q(k)k = ˜q(k)k+1= · · · = q(k)∞
Commento
Un diagramma con segni di inclusione e di uguaglianza verticali. Risolto con un ambiente array nel quale abbiamo modificato le spaziature normali. Notiamo, nell’argomento di array, la combinazione *{16}{c@{\;}} che produce 16 copie di c@{\;}. L’ultima colonna invece non `e seguita da @{\;}, per preservare la centratura.
Come simbolo verticale di inclusione abbiamo scelto \cup che assomiglia a \subset.
Il segno di uguaglianza invece `e stato definito ad hoc, con l’idea di scrivere due sbarre verticali della stessa altezza del segno \cup, separate da uno spazio simile a quello che separa i due tratti orizzontali di “=”. La separazione `e con le unit`a “mu”, che dipendono dal corpo del carattere con cui si sta componendo. L’altezza non
`
e precisamente la stessa, si perdono le smussature ai bordi, ma il risultato sembra soddisfacente.
Un’osservazione: rivedendo il diagramma ho notato un “ondeggiamento” causato dalla mancanza del pedice nella prima colonna; a questo si rimedia inserendone uno fittizio. La revisione finale dei documenti `e un ottimo momento per “pignolerie”
del genere.
Si sarebbe anche potuto sfruttare il pacchetto graphicx per ruotare gli oggetti cor- rispondenti, ma `e sembrato meglio proporre una soluzione in puro TEX. La ve- dete nella copia inferiore del diagramma; il valore 0,14 ex `e stato determinato per tentativi.
Per graphicx bisogna ricordare che va indicato il driver da usare. Un modo abba- stanza comodo `e di scriversi un file di nome graphics.cfg che contenga
1 \ExecuteOption{dvips}
e registrarlo in una cartella fra quelle lette da TEX. Se si usa pdfTEX, questo verr`a ignorato; l’effetto finale `e che si pu`o usare il comando \usepackage{graphicx}
senza bisogno di dichiarare il driver. Analogo discorso vale per il pacchetto color e il file color.cfg.
11 – esempio
1 \newcommand{\fq}{\mathfrak{q}}
2 \newcommand{\verteq}{%
3 \setbox0=\hbox{$\cup$}%
4 \vrule height \wd0 depth 0pt \mkern3mu
5 \vrule height \wd0 depth 0pt \relax}
6 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7 \[
8 \begin{array}{@{}*{16}{c@{\;}}c@{}}
9 \fq^{(k)}&=&\fq_{1}^{(k)}&\subset&\fq_{2}^{(k)}
10 &\subset&\dots&\subset&\fq_{k-1}^{(k)}
11 &\subset&\fq_{k}^{(k)}&=&\fq_{k+1}^{(k)}
12 &=&\dots&=\fq_{\infty}^{(k)}\\
13 \verteq&&\verteq&&{\cup}&&&&{\cup}
14 &&\verteq&&\verteq&&&\verteq\\
15 \fq^{(k)}&=&\tilde{\fq}_{1}^{(k)}&\subset&\tilde{\fq}_{2}^{(k)}
16 &\subset&\dots&\subset&\tilde{\fq}_{k-1}^{(k)}
17 &\subset&\tilde{\fq}_{k}^{(k)}&=&\tilde{\fq}_{k+1}^{(k)}
18 &=&\dots&=\fq_{\infty}^{(k)}
19 \end{array}
20 \]
Versione con graphicx
1 \usepackage{graphicx}
2 \newcommand{\upsubset}{\rotatebox[origin=c]{90}{$\subset$}}
3 \newcommand{\upequals}{\raisebox{.14ex}{\rotatebox[origin=c]{90}{$=$}}}
4 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5 \[
6 \begin{array}{*{16}{c@{\;}}c}
7 \fq^{(k)}&=&\fq_{1}^{(k)}&\subset&\fq_{2}^{(k)}
8 &\subset&\dots&\subset&\fq_{k-1}^{(k)}
9 &\subset&\fq_{k}^{(k)}&=&\fq_{k+1}^{(k)}
10 &=&\dots&=&\fq_{\infty}^{(k)}\\
11 \upequals&&\upequals&&\upsubset&&&&\upsubset
12 &&\upequals&&\upequals&&&&\upequals\\
13 \fq^{(k)}&=&\tilde{\fq}_{1}^{(k)}&\subset&\tilde{\fq}_{2}^{(k)}
14 &\subset&\dots&\subset&\tilde{\fq}_{k-1}^{(k)}
15 &\subset&\tilde{\fq}_{k}^{(k)}&=&\tilde{\fq}_{k+1}^{(k)}
16 &=&\dots&=&\fq_{\infty}^{(k)}
17 \end{array}
18 \]
11 – codice
Commento
Questo `e un esempio diverso, eseguito con MetaPost: si tratta di un un multigrafo orientato con un vertice e tre frecce.
E stato definito un cammino freccia che parte da un punto z` 1 a distanza di due millimetri dal centro, sulla semiretta che forma un angolo di 60 gradi con l’asse orizzontale, tangente a questa semiretta, e termina ad un punto z2 che `e ottenuto da z1con una rotazione di 60 gradi, passando per il punto z12sul semiasse verticale positivo, a un centimetro dall’origine, in modo che sia simmetrico rispetto all’asse verticale.
Questo cammino poi `e stato replicato due volte con successive rotazioni di 120 gradi.
Al centro `e stata disegnato un circoletto, con la sovrapposizione di un cerchio bianco pi`u piccolo su un cerchio nero.
12 – esempio
1 u:=1cm;
2 r:=.2u;
3
4 path freccia;
5
6 beginfig(1);
7 z1=(r*cosd(60),r*sind(60));
8 z2=z1 rotated 60;
9 z12=(0,u);
10 freccia=z1{dir 60}..z12..{dir -60}z2;
11 drawarrow freccia;
12 drawarrow freccia rotated 120;
13 drawarrow freccia rotated 240;
14 draw fullcircle scaled 4pt;
15 draw fullcircle scaled 2.5pt withcolor white;
16 endfig;
17 end.
12 – codice
Cl(OK), where OK is the ring of algebraic integers of the finite
algebraic number field K
Claborn, 1966
Claborn, 1968
Claborn (Fossum), 1973
Grams, 1974
Leedham-Green, 1972
Commento
Un esempio di uso del pacchetto mfpic, un’interfaccia fra LATEX e MetaPost oppure METAFONT. Forse non `e l’esempio migliore, ma mostra come sia facile costruire un semplice disegno di questo genere. Attenzione: non c’`e piena compatibilit`a fra mfpic e XY-pic. Il vantaggio di usare mfpic rispetto all’ambiente picture `e la maggiore flessibilit`a: per esempio `e possibile dire di tracciare un segmento indicando il punto iniziale e quello finale. Si pu`o anche sfruttare la peculiarit`a di MetaPost che
“nasconde” un oggetto se un altro gli `e disegnato sopra; cos`ı la linea tratteggiata diagonale `e stata tracciata senza dover calcolare i punti di partenza dal bordo dei rettangoli.
13 – esempio
1 \usepackage[metapost]{mfpic}
2 \setlength{\mfpicunit}{1cm}
3 \opengraphsfile{pic-esempi}
4
5 \newcommand{\calO}{\mathcal{O}}
6 \DeclareMathOperator{\Cl}{Cl}
7 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8 \begin{center}
9 \begin{mfpic}{-1}{11}{0}{8}
10 \tlabelsep{.3cm}
11 \dashed\tlabelrect(5,6.5){\parbox{5.5cm}{\centering
12 $\Cl(\calO_{K})$, where $\calO_{K}$ is the ring of\\
13 algebraic integers of the finite\\
14 algebraic number field $K$}}
15 \dashed\lines{(0,5),(10,5)}
16 \dashed\lines{(3.8,2),(6.2,1.5)}
17 \lines{(2,1),(2,4)}
18 \tlabelsep{.1cm}
19 \lclosed\gfill[white]\tlabelrect(2,4){\makebox[4cm]{Claborn, 1966}}
20 \lclosed\gfill[white]\tlabelrect(2,3){\makebox[4cm]{Claborn, 1968}}
21 \lclosed\gfill[white]\tlabelrect(2,2){\makebox[4cm]{Claborn (Fossum), 1973}}
22 \lclosed\gfill[white]\tlabelrect(2,1){\makebox[4cm]{Grams, 1974}}
23 \lclosed\gfill[white]\tlabelrect(8,1.5){\makebox[4cm]{Leedham-Green, 1972}}
24 \lines{(-1,0),(11,0),(11,8),(-1,8),(-1,0)}
25 \end{mfpic}
26 \end{center}
27 \closegraphsfile
13 – codice
4.4.13. Nel gruppo simmetrico G = S3 (cfr. 4.2.19) le classi di coniugio sono {1},1 2 3
3 1 2
,1 2 3 2 3 1
,
1 2 3 1 3 2
,1 2 3 3 2 1
,1 2 3 2 1 3
.
Il sottogruppo d’ordine 3 `e coniugato solo a s´e stesso, i sottogruppi d’ordine 2 costituiscono una classe di sottogruppi coniugati, le altre classi di coniugio di sottogruppi sono {1} e {G}.
Commento
L’esempio `e tratto da un testo di Algebra. Abbiamo supposto che ogni esercizio sia trattato come un ambiente, con il proprio numero al quale ci si pu`o riferire.
Abbiamo anche supposto un comando \cfr definito come
1 \newcommand{\cfr}[1]{\textup{(cfr.~#1)}}
in modo che il riferimento compaia in tondo. Modificando opportunamente il comando \ref si pu`o ottenere che i riferimenti siano resi in carattere nero.
Una parola su “s´e stesso”. La “regola” che non vuole il “se” accentato in questo caso `e cervellotica;
consiglio di accentarlo sempre. Perch´e scrivere “se stesso” e invece “s´e stessi”? O “se stessa” e
“s´e stesse”? La risposta usuale dei pedanti che pretendono questa “regola” `e che “stessi” e “stesse”
sono anche voci verbali e quindi ci sarebbe pericolo di confusione. Risposta: “Viene da se che non c’e altra scelta”, scritto cos`ı. Infatti “se che” non pu`o avere altro senso, cos`ı come “c’e”! Quindi
“s´e” pronome riflessivo va sempre con l’accento.
14 – esempio
1 \begin{esercizio}\label{coniugio-S3}
2 Nel gruppo simmetrico $G=S_{3}$ \cfr{\ref{S3}} le classi di coniugio
3 sono
4 \begin{gather*}
5 \{1\},
6 \left\{
7 \begin{pmatrix}
8 1&2&3\\
9 3&1&2
10 \end{pmatrix},
11 \begin{pmatrix}
12 1&2&3\\
13 2&3&1
14 \end{pmatrix}
15 \right\},
16 \\
17 \left\{
18 \begin{pmatrix}
19 1&2&3\\
20 1&3&2
21 \end{pmatrix},
22 \begin{pmatrix}
23 1&2&3\\
24 3&2&1
25 \end{pmatrix},
26 \begin{pmatrix}
27 1&2&3\\
28 2&1&3
29 \end{pmatrix}
30 \right\}.
31 \end{gather*}
32
33 Il sottogruppo d’ordine~$3$ \‘e coniugato solo a s\’e stesso, i
34 sottogruppi d’ordine~$2$ costituiscono una classe di sottogruppi
35 coniugati, le altre classi di coniugio di sottogruppi sono $\{1\}$
36 e~$\{G\}$.
37 \end{esercizio}
14 – codice
A1(A ∩ B) A1(A ∩ B1) '
A1(A ∩ B) A1
A1(A ∩ B1) A1
'
A ∩ B A1∩ B (A1∩ B)(A ∩ B1)
A1∩ B
' A ∩ B
(A1∩ B)(A ∩ B1)
Commento
Per migliorare leggermente l’aspetto di questa formula, si `e usato il comando
\mathstrut, che inserisce un elemento invisibile delle stesse dimensioni di una pa- rentesi. Nel sorgente si mostra come definire un’opportuna abbreviazione ad hoc, valida solo localmente.
15 – esempio
1 \[
2 \newcommand{\ms}{\mathstrut}
3 \dfrac{A_{1}(A\cap B)}{A_{1}(A\cap B_{1})}
4 \simeq
5 \dfrac{\dfrac{A_{1}(A\cap B)}{\ms A_{1}}}
6 {\dfrac{A_{1}(A\cap B_{1})}{\ms A_{1}}}
7 \simeq
8 \dfrac{\dfrac{\ms A\cap B}{\ms A_{1}\cap B}}
9 {\dfrac{(A_{1}\cap B)(A\cap B_{1})}{\ms A_{1}\cap B}}
10 \simeq
11 \dfrac{\ms A\cap B}{(A_{1}\cap B)(A\cap B_{1})}
12 \]
15 – codice
6.3.9. Siano p un numero primo e f (x) il polinomio di Z[x]
xp−1+ xp−2+ · · · + x + 1.
Allora f (x) `e irriducibile in Z[x] e quindi in Q[x]
Dim. Si ha
f (x + 1) = (x + 1)p− 1 (x + 1) − 1 =
xp+p 1
xp−1+ · · · +
p p − 1
x x
= xp−1+p 1
xp−2+ · · · +
p p − 2
x +
p p − 1
,
e i coefficienti 1, p1, . . . , p−1p di f (x + 1) sono, tranne 1, divisibili per p, mentre p−1p non `e divisibile per p2. Allora il criterio di Eisenstein assicura che f (x + 1) `e irriducibile in Z[x]. Siccome l’applicazione f (x) 7→ f (x + 1) `e un isomorfismo di Z[x] su Z[x], anche f (x) `e irriducibile in Z[x].
Commento
Un altro esercizio con le stesse notazioni di un esempio precedente. Qui si pu`o notare l’uso di align* e di \dbinom per forzare la maggiore grandezza dei coefficienti binomiali nel numeratore della seconda frazione.
Non `e bene poi usare \dbinom nel testo che segue per non distruggere completa- mente la spaziatura tra le linee.
Si notino anche gli spazi insecabili e il loro uso. Contrariamente a quanto uno possa pensare all’inizio, le formule che nel sorgente si trovano alla riga 18 vanno separate come fossero parole distinte. Il principiante tende a tenerle unite.
16 – esempio
1 \newcommand{\Q}{\mathbf{Q}}
2 \newcommand{\Z}{\mathbf{Z}}
3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4 \begin{esercizio}\label{ciclotomici-p}
5 Siano $p$ un numero primo e $f(x)$ il polinomio di $\Z[x]$
6 \[
7 x^{p-1}+x^{p-2}+\dots+x+1.
8 \]
9 Allora $f(x)$ \‘e irriducibile in $\Z[x]$ e quindi in $\Q[x]$
10 \end{esercizio}
11 \begin{proof}
12 Si ha
13 \begin{align*}
14 f(x+1)&=\frac{(x+1)^{p}-1}{(x+1)-1}
15 =\frac{x^{p}+\dbinom{p}{1}x^{p-1}+\dots+\dbinom{p}{p-1}x}{x}\\
16 &=x^{p-1}+\dbinom{p}{1}x^{p-2}+\dots+\dbinom{p}{p-2}x+\dbinom{p}{p-1},
17 \end{align*}
18 e i coefficienti $1$, $\binom{p}{1}$,~\ldots, $\binom{p}{p-1}$ di
19 $f(x+1)$ sono, tranne $1$, divisibili per~$p$, mentre $\binom{p}{p-1}$
20 non \‘e divisibile per~$p^{2}$. Allora il \emph{criterio di
21 Eisenstein} assicura che $f(x+1)$ \‘e irriducibile in $\Z[x]$.
22 Siccome l’applicazione $f(x)\mapsto f(x+1)$ \‘e un isomorfismo di
23 $\Z[x]$ su $\Z[x]$, anche $f(x)$ \‘e irriducibile in $\Z[x]$.
24 \end{proof}
16 – codice
(xA)n+1= xA(xA)n = (0, 1, 0, 0, . . . ) · (0, . . . , 0
←−n−→, 1, 0, 0, . . . )
= (0, . . . , 0, 0
←−n+1−→, 1, 0, 0, . . . )
Commento
Invece di \underbrace `e stato preferito un diverso tipo di notazione, per la quale abbiamo definito un comando apposito, con corretta sintassi in stile LATEX. Es- senzialmente il comando \sotto calcola la dimensione della fila di zeri sotto la quale vogliamo le due frecce e il numero degli zeri stessi. Poi, usando il comando
\underset di amsmath, componiamo la fila di zeri con sotto la box costruita. Con
\underbrace il risultato sarebbe stato:
(xA)n+1= xA(xA)n = (0, 1, 0, 0, . . . ) · (0, . . . , 0
| {z }
n
, 1, 0, 0, . . . )
= (0, . . . , 0, 0
| {z }
n+1
, 1, 0, 0, . . . )
che `e molto meno piacevole, effettivamente. Il testo da cui ho preso l’esempio `e composto con TEX, tuttavia la costruzione usata per lo stesso problema `e molto meno efficiente e rende la spaziatura fra i simboli in riga disordinata.
In questo caso ho preferito definire un parametro dimensionale apposito, per non rischiare conflitti con l’uso di box provvisorie, che potrebbero entrare in gioco nell’e- spansione di \underset, ci`o che era escluso nel caso di \calculate dell’esempio 9.
(A dire il vero ho cambiato la scelta durante lo sviluppo dell’esempio, accorgendomi che il contenuto di una box spariva!)
17 – esempio
1 \newdimen{\sottolen}
2 \newcommand{\sotto}[2]{%
3 \underset{\settowidth{\sottolen}{$#2$}%
4 \makebox[\sottolen]{%
5 \leftarrowfill$\scriptstyle\;#1\;$\rightarrowfill}}{#2}}
6 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7 \begin{align*}
8 (x_{A})^{n+1}=x_{A}(x_{A})^{n}
9 &=(0,1,0,0,\dotsc)\cdot(\sotto{n}{0,\dots,0},1,0,0,\dotsc)\\
10 &=(\sotto{n+1}{0,\dots,0,0},1,0,0,\dotsc)
11 \end{align*}
17 – codice
A tilting equivalence F : T1−→←−F2: G defines also another equivalence through the derived functors of F and G, so we have actually two equivalences
T1
−→F
←−
G F2 and F1 F0
−−→←−−
G0 T2. Commento
Esistono ormai pacchetti che permettono di costruire vari tipi di combinazioni di frecce, ma sono affezionato a come le ho definite io. Sono anche affezionato alle lettere calligrafiche ottenute con mathrsfs.
Il primo comando \doublearrowinner definisce il nucleo costituito da due frecce sovrapposte in direzioni diverse, quella di sopra a destra e quella sotto a sinistra.
Usa metodi di TEX abbastanza avanzati, ma non incomprensibili.
(1) \vcenter costruisce una scatola in modo verticale, il cui risultato viene centrato rispetto all’asse delle formule (quello per intenderci che `e visibile nelle frazioni);
si pu`o usare solo in modo matematico. Occorre ricordare, quando lo si usa, che la larghezza di questa scatola `e quella della pi`u lunga riga al suo interno; perci`o occorre “proteggere il contenuto” se non si vuole che la scatola contenga un intero paragrafo!
(2) \offinterlineskip azzera l’interlinea all’interno della scatola verticale.
(3) \ialign `e una macro che crea un allineamento, azzerando il parametro \tabskip che controlla lo spazio prima, dopo e tra le colonne dell’allineamento.
(4) Un allineamento costruito con \halign, di cui \ialign `e una variante, deve ave- re come prima cosa un preambolo che dichiara come sono costituite le colonne (analogo all’argomento di array o tabular). In questo caso si tratta di una sola colonna, costituita da una scatola orizzontale larga secondo quanto dice il suo ar- gomento. Si usa # per indicare l’effettivo contenuto delle celle dell’allineamento;
qui va ## perch´e siamo dentro una definizione.
(5) Ci sono due righe, ciascuna di una cella; la prima riempie lo spazio a disposi- zione con una freccia a destra, la seconda con una freccia a sinistra. La fine del preambolo e delle righe dell’allineamento si indica con \cr.
(6) La larghezza della scatola costruita con \vcenter `e esattamente l’argomento del comando.
Il secondo comando \doublearrow rende \doublearrowinner un simbolo di relazione, per ottenere le corrette spaziature. Per esempio, se vogliamo scrivere a R b, per indicare che a e b sono nella relazione R, dobbiamo scrivere $a\mathrel{R}b$. L’argomento passato a \doublearrowinner `e 1,5 em, perch´e la lunghezza della freccia usuale mi pare troppo poca.
Il terzo comando \doublearrowlim fa la stessa cosa, ma permette di scrivere i nomi delle frecce sopra e sotto; il primo argomento `e il nome della freccia a destra, il secondo di quella a sinistra. Il trucco `e di usare \doublearrowinner come operatore simile a quello di sommatoria, cosicch´e i “limiti” sono posti sopra e sotto. Il tutto poi `e fatto diventare un simbolo di relazione. Si pu`o anche dare un argomento opzionale per allungare le frecce in modo da accomodare nomi pi`u lunghi; il procedimento potrebbe essere reso automatico, lo lasciamo come esercizio.
Si `e poi definito un comando \noloc, contrario di \colon: \colon lascia uno spazio sottile
\, prima e uno spazio maggiore \; dopo. Questo `e esattamente ci`o che fa \noloc, ma alla rovescia: uno spazio \; prima e \, dopo. I due punti sono “neutralizzati” rispetto al loro ufficio di simbolo di relazione mettendoli ad argomento di \mathord (sarebbero anche bastate le graffe).
18 – esempio