[successivo]
[precedente]
[inizio]
[fine]
[indice generale]
[indice analitico]
[parte]
Capitolo 4. Alml: estensioni PXAM
A partire dall'estate del 2005, Alml permette di incorporare codice relativo a svariati tipi di minilinguaggi grafici.
4.1
Immagini incorporate macro *roff: Pic, Tbl, Eqn
È possibile incorporare codice relativo ai pacchetti di macro *roff denominati Pic, Tbl, Eqn attraverso gli elementi picimg, tblimg, eqnimg rispettivamente; l'utilizzo è abbastanza analogo a quelli di altri elementi simili.
Nei listati 4.1, 4.2, 4.3 vengono presentati tre esempi di incorporazione nell'ambito degli elementi picimg, tblimg, eqnimg rispettivamente; corrispondentemente, le figure 4.4, 4.5, 4.6 illustrano l'aspetto finale delle immagini in relazione al codice presentato.
Listato 4.1. Codice incorporato: macro *roff (Pic).
...
<object>
<imgblock>
<picimg>
<![CDATA[
ellipse "document";
arrow;
box width 0.6 "\fIpic\/\fP(1)"
arrow;
box width 1.1 "\fIgtbl\/\fP(1) or \fIgeqn\/\fP(1)" "(optional)" dashed;
arrow;
box width 0.6 "\fIgtroff\/\fP(1)";
arrow;
ellipse "PostScript"
]]>
</picimg>
</imgblock>
</object>
...
|
|
Listato 4.2. Codice incorporato: macro *roff (Tbl).
...
<object>
<imgblock>
<tblimg>
<![CDATA[
tab(:);
c s s
c | c | c
l | l | n.
Major New York Bridges
=
Bridge:Designer:Length
_
Brooklyn:J. A. Roebling:1595
Manhattan:G. Lindenthal:1470
Williamsburg:L. L. Buck:1600
_
Queensborough:Palmer &:1182
\^: Hornbostel:\^
_
Triborough:O. H. Ammann:1380
\^:\^:383
_
Bronx Whitestone:O. H. Ammann:2300
Throgs Neck:O. H. Ammann:1800
_
George Washington:O. H. Ammann:3500
_
]]>
</tblimg>
</imgblock>
</object>
...
|
|
Listato 4.3. Codice incorporato: macro *roff (Eqn).
...
<object>
<imgblock>
<eqnimg>
<![CDATA[
G(z)
~=~ e sup { ln ~ G(z) }
~=~ exp left ( sum from k>=1 { S sub k z sup k } over k right )
~=~ prod from k>=1 e sup { S sub k z sup k /k }
]]>
</eqnimg>
</imgblock>
</object>
...
|
|
Figura 4.4. Codice incorporato: Pic.
|
Figura 4.5. Codice incorporato: Tbl.
|
Figura 4.6. Codice incorporato: Eqn.
|
4.1.1
Alcune osservazioni aggiuntive
Si notino le seguenti particolarità:
-
non si deve delimitare il codice mediante le macro .PS e .PE, .TS e .TE, .EQ e .EN rispettivamente, sebbene esse siano previsti in un sorgente *roff normale;
-
il codice Pic e il codice Tbl possono includere codice Eqn, a patto di delimitare tale codice mediante una coppia di caratteri dollaro ($) (il listato 4.7 e la figura 4.8 illustrano un esempio nel primo caso).
Listato 4.7. Codice incorporato: Eqn dentro Pic.
...
<object>
<imgblock>
<picimg>
<![CDATA[
arrow
box "$space 0 {H( omega )} over {1 - H( omega )}$"
arrow
]]>
</picimg>
</imgblock>
</object>
...
|
|
Figura 4.8. Codice incorporato: Eqn dentro Pic.
|
4.2
Immagini incorporate GNU Plotutils: Graph, Plot, Pic2plot, Spline, Ode
È possibile incorporare codice relativo ai programmi del pacchetto GNU Plotutils,(1) Graph, Plot, Pic2plot, Spline, Ode attraverso gli elementi pugraphimg, puplotimg, pupic2plotimg, pusplineimg e puodeimg rispettivamente; l'utilizzo è abbastanza analogo a quelli di altri elementi simili.
Nei listati 4.9, 4.10, 4.11, 4.12, 4.13 vengono presentati cinque esempi di incorporazione nell'ambito degli elementi pugraphimg, puplotimg, pupic2plotimg, pusplineimg, puodeimg rispettivamente; corrispondentemente, le figure 4.14, 4.15, 4.16, 4.17, 4.18 illustrano l'aspetto finale delle immagini in relazione al codice presentato.
Listato 4.9. Codice incorporato: GNU Plotutils (Graph).
...
<object>
<imgblock>
<pugraphimg>
<![CDATA[
#-h .3 -w .6
0.0 0.0
1.0 0.2
2.0 0.0
3.0 0.4
4.0 0.2
5.0 0.6
6.0 0.2
7.0 0.0
8.0 0.4
9.0 0.2
10.0 0.6
]]>
</pugraphimg>
</imgblock>
</object>
...
|
|
Listato 4.10. Codice incorporato: GNU Plotutils (Plot).
...
<object>
<imgblock>
<puplotimg>
<![CDATA[
#PLOT 2
o
W 0.003
m 0 0.3
t rettangoli:
M -0.1 -0.1
H 0 0 0.01 0.08
M 0.05 0
H 0 0 0.02 0.04
M 0.05 0
H 0 0 0.04 0.02
M 0.05 0
H 0 0 0.08 0.01
#
M -0.215 -0.1
t segmenti:
M -0.1 -0.1
I 0 0 0.01 0.08
M 0.05 -0.08
I 0 0 0.02 0.04
M 0.05 -0.04
I 0 0 0.04 0.02
M 0.05 -0.02
I 0 0 0.08 0.01
#
M -0.29 -0.05
t ellissi:
M -0.05 -0.05
= 0 0 0.02 0.04 0
M 0.08 0
= 0 0 0.02 0.04 20
M 0.08 0
= 0 0 0.02 0.04 40
M 0.08 0
= 0 0 0.02 0.04 60
#
M -0.25 -0.07
t coniche di b\'ezier:
M -0.15 -0.07
r 0 0 0.05 0.03 0 0.06
M 0.08 -0.06
r 0 0 0.06 0.04 0 0.06
M 0.08 -0.06
r 0 0 0.07 0.05 0 0.06
M 0.08 -0.06
r 0 0 0.08 0.06 0 0.06
x
]]>
</puplotimg>
</imgblock>
</object>
...
|
|
Listato 4.11. Codice incorporato: GNU Plotutils (Pic2plot).
...
<object>
<imgblock>
<pupic2plotimg>
<![CDATA[
.PS
box "START"; arrow; circle dashed filled; arrow
circle diam 2 thickness 3 "This is a" "big, thick" "circle" dashed; up
arrow from top of last circle; ellipse "loopback" dashed
arrow dotted from left of last ellipse to top of last box
arc cw radius 1/2 from top of last ellipse; arrow
box "END"
.PE
]]>
</pupic2plotimg>
</imgblock>
</object>
...
|
|
Listato 4.12. Codice incorporato: GNU Plotutils (Spline).
...
<object>
<imgblock>
<pusplineimg>
<![CDATA[
#-d 2 -a -s -p -T -14 -n 500
#
0 0 1 0 1 1 0 0
]]>
</pusplineimg>
</imgblock>
</object>
...
|
|
Listato 4.13. Codice incorporato: GNU Plotutils (Ode).
...
<object>
<imgblock>
<puodeimg>
<![CDATA[
#
#-C -x 0 5 -y 0 5
x' = (a - b*y) * x
y' = (c*x - d) * y
a = 1; b = 1; c = 1; d = 1;
print x, y
x = 1; y = 2
step 0, 10
x = 1; y = 3
step 0, 10
x = 1; y = 4
step 0, 10
x = 1; y = 5
step 0, 10
]]>
</puodeimg>
</imgblock>
</object>
...
|
|
Figura 4.14. Codice incorporato: Graph.
|
Figura 4.15. Codice incorporato: Plot.
|
Figura 4.16. Codice incorporato: Pic2plot.
|
Figura 4.17. Codice incorporato: Spline.
|
Figura 4.18. Codice incorporato: Ode.
|
4.2.1
Alcune osservazioni aggiuntive
Si notino le seguenti particolarità:
-
la prima riga del codice Graph deve essere un commento (eventualmente vuoto), ossia una riga che inizi con il carattere cancelletto (#); quanto segue il primo carattere viene interpretato come riga di comando da passare all'eseguibile graph, al fine di consentire l'uso delle varie opzioni del programma;
-
quanto detto al punto precedente si applica anche al caso del codice Spline e del codice Ode, con la differenza che in questi casi sono due le righe di commento obbligatorie, corrispondenti a righe di comando per gli eseguibili spline e graph, oppure ode e graph, rispettivamente (poiché entrambe le coppie di eseguibili contribuiscono, in una pipeline, alla generazione dell'immagine);
-
a causa del meccanismo con cui alml estrae le righe di comando dalla sezione marcata CDATA, è essenziale che non ci siano spazi o righe vuote fra il marcatore precedente e l'inizio della sezione stessa; ad esempio, la riga 3 nel seguente listato deve terminare con il carattere >:
1 ...
2 <puodeimg>
3 <![CDATA[
4 #
5 #-C -x 0 5 -y 0 5
6 ...
|
|
-
il codice Pic2plot deve iniziare con la macro .PS e terminare con la macro .PE; inoltre si tenga presente che l'elemento picimg (sezione 4.1) fornisce un supporto più completo per chi desideri utilizzare codice Pic (ad esempio consente l'uso dei colori, nonché l'inclusione di codice Eqn).
4.3
Immagini incorporate: codice generico
È possibile incorporare codice grafico generico, nel senso di una qualunque riga di comando associata a codice in input, a patto che tale riga di comando sia opportunamente formattata e il comando emetta codice EPS; si utilizza a tal fine l'elemento genericimg.
Nei listati 4.20 e 4.21 vengono presentati due esempi di incorporazione nell'ambito dell'elemento genericimg; corrispondentemente, le figure 4.22 e 4.23 illustrano l'aspetto finale delle immagini in relazione al codice presentato.
Listato 4.20. Codice incorporato generico.
...
<object>
<imgblock>
<genericimg>
<![CDATA[
#convert -resize 3000% -negate -charcoal 0 -swirl 60 PPM:INPUT EPS:OUTPUT
P3
# feep.ppm
4 4
15
0 0 0 0 0 0 0 0 0 15 0 15
0 0 0 0 15 7 0 0 0 0 0 0
0 0 0 0 0 0 0 15 7 0 0 0
15 0 15 0 0 0 0 0 0 0 0 0
]]>
</genericimg>
</imgblock>
</object>
...
|
|
Listato 4.21. Codice incorporato generico: un caso limite.
...
<object>
<imgblock>
<genericimg>
<![CDATA[
#echo "set terminal table; set samples 1000; plot [-20:30] 0.1*x**2*cos(0.3*x), \ \20*sin(x)" | gnuplot | graph -I g -T ps > OUTPUT
#
# Questo è un caso limite: in pratica non c'è input per il comando
# presente nella prima riga: fa tutto lui!
#
]]>
</genericimg>
</imgblock>
</object>
...
|
|
Figura 4.22. Codice incorporato generico.
|
Figura 4.23. Codice incorporato generico: un caso limite.
|
4.3.1
Alcune osservazioni aggiuntive
Si notino le seguenti particolarità:
-
la prima riga del codice ha la forma di un commento standard; quanto segue il carattere cancelletto (#) è lo schema del comando da eseguire: in esso possono figurare (in guisa di metavariabili) le stringhe INPUT e OUTPUT, le quali rappresentano rispettivamente l'input e l'output della riga di comando; l'input viene in pratica prelevato dalle rimanenti righe del codice, mentre l'output deve essere in formato EPS;
-
le righe del codice successive alla prima devono costituire un input valido per la riga di comando, ma eventualmente possono essere assenti, nel caso in cui la riga di comando non necessiti di input (listato 4.20 e figura 4.23);
-
valgono anche nel caso del codice generico le osservazioni relative agli spazi o alle righe vuote immediatamente prima dell'inizio della sezione marcata CDATA, come nel caso del codice GNU Plotutils Graph, Spline e Ode;
-
per ragioni di sicurezza la riga di comando non viene eseguita (e l'immagine, di conseguenza, non viene generata), a meno che l'eseguibile alml non venga invocato utilizzando l'opzione --embedded-script-enable.
4.4
Diagrammi scacchistici
È possibile incorporare codice per tracciare diagrammi e annotazioni scacchistiche di vario genere attraverso gli elementi fenimg, fenitimg, sanimg, sanitimg e skakimg.
L'elemento fenimg permette di definire una posizione sulla scacchiera mediante la notazione Forsyth-Edwards (FEN ovvero Forsyth-Edwards Notation). La notazione FEN permette di indicare i pezzi mediante singole lettere che in pratica costituiscono l'iniziale del nome del pezzo stesso nella lingua inglese (K significa «King» ossia il re bianco, k significa «king» ossia il re nero, ecc.); volendo utilizzare le iniziali dei nomi nella lingua italiana è necessario utilizzare l'elemento fenitimg.
Nel listato 4.24 vengono presentati due esempi di incorporazione nell'ambito degli elementi fenimg e fenitimg rispettivamente; corrispondentemente, la figura 4.25 illustra l'aspetto finale delle immagini in relazione al codice presentato.
Listato 4.24. Codice incorporato FEN.
...
<object>
<imgblock>
<fenimg>
<![CDATA[
8/8/4R1p1/2k3p1/1p4P1/1P1b1P2/3K1n2/8 b - - 0 43
]]>
</fenimg>
<fenitimg>
<![CDATA[
8/8/4T1p1/2r3p1/1p4P1/1P1n1P2/3R1c2/8 n - - 0 43
]]>
</fenitimg>
</imgblock>
</object>
...
|
|
Figura 4.25. Codice incorporato FEN: nel primo diagramma i pezzi sono stati indicati secondo la denominazione in lingua inglese, nel secondo diagramma secondo la denominazione italiana.
|
L'elemento sanimg permette di definire una posizione sulla scacchiera come risultato di una serie di mosse a partire dalla posizione iniziale, espresse mediante la notazione algebrica standard (SAN ovvero Standard Algebraic Notation). Nella notazione SAN i pezzi vengono indicati mediante singole lettere che in pratica costituiscono l'iniziale del nome del pezzo stesso nella lingua inglese; volendo utilizzare le iniziali dei nomi nella lingua italiana è necessario utilizzare l'elemento sanitimg.
Nel listato 4.26 vengono presentati due esempi di incorporazione nell'ambito degli elementi sanimg e sanitimg rispettivamente; corrispondentemente, la figura 4.27 illustra l'aspetto finale delle immagini in relazione al codice presentato.
Listato 4.26. Codice incorporato SAN: partita svoltasi a Belgrado, il 4 novembre 1992, fra Bobby Fischer e Boris Spassky.
...
<object>
<imgblock>
<sanimg>
<![CDATA[
1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5
7. Bb3 d6 8. c3 O-O 9. h3 Nb8 10. d4 Nbd7 11. c4 c6 12. cxb5
axb5 13. Nc3 Bb7 14. Bg5 b4 15. Nb1 h6 16. Bh4 c5 17. dxe5
Nxe4 18. Bxe7 Qxe7 19. exd6 Qf6 20. Nbd2 Nxd6 21. Nc4 Nxc4
22. Bxc4 Nb6 23. Ne5 Rae8 24. Bxf7+ Rxf7 25. Nxf7 Rxe1+ 26. Qxe1
Kxf7 27. Qe3 Qg5 28. Qxg5 hxg5 29. b3 Ke6 30. a3 Kd6 31. axb4
cxb4 32. Ra5 Nd5 33. f3 Bc8 34. Kf2 Bf5 35. Ra7 g6 36. Ra6+
Kc5 37. Ke1 Nf4 38. g3 Nxh3 39. Kd2 Kb5 40. Rd6 Kc5 41. Ra6 Nf2
42. g4 Bd3 43. Re6
]]>
</sanimg>
<sanitimg>
<![CDATA[
1. e4 e5 2. Cf3 Cc6 3. Ab5 a6 4. Aa4 Cf6 5. O-O Ae7 6. Te1 b5
7. Ab3 d6 8. c3 O-O 9. h3 Cb8 10. d4 Cbd7 11. c4 c6 12. cxb5
axb5 13. Cc3 Ab7 14. Ag5 b4 15. Cb1 h6 16. Ah4 c5 17. dxe5
Cxe4 18. Axe7 Dxe7 19. exd6 Df6 20. Cbd2 Cxd6 21. Cc4 Cxc4
22. Axc4 Cb6 23. Ce5 Tae8 24. Axf7+ Txf7 25. Cxf7 Txe1+ 26. Dxe1
Rxf7 27. De3 Dg5 28. Dxg5 hxg5 29. b3 Re6 30. a3 Rd6 31. axb4
cxb4 32. Ta5 Cd5 33. f3 Ac8 34. Rf2 Af5 35. Ta7 g6 36. Ta6+
Rc5 37. Re1 Cf4 38. g3 Cxh3 39. Rd2 Rb5 40. Td6 Rc5 41. Ta6 Cf2
42. g4 Ad3 43. Te6
]]>
</sanitimg>
</imgblock>
</object>
...
|
|
Figura 4.27. Codice incorporato SAN: nel primo diagramma i pezzi sono stati indicati secondo la denominazione in lingua inglese, nel secondo diagramma secondo la denominazione italiana.
|
Per esigenze più sofisticate di illustrazione scacchistica si può utilizzare l'elemento skakimg: tale elemento consente di indicare situazioni scacchistiche di una certa complessità, comprese annotazioni grafiche sulla scacchiera, mediante i comandi definiti in TeX-Skak, un pacchetto per scrivere di scacchi in LaTeX.
Nel listato 4.28 viene presentato un esempio di incorporazione nell'ambito dell'elemento skakimg; corrispondentemente, la figura 4.29 illustra l'aspetto finale dell'immagine in relazione al codice presentato.
Listato 4.28. Codice incorporato TeX-Skak.
...
<object>
<imgblock>
<skakimg>
<![CDATA[
\fenboard{8/8/R5p1/2k2bp1/1p6/1P3PPn/3K4/8 b - - 0 41}
\hidemoves{41...Nf2 42. g4 Bd3}
\showmoverOn
\notationOff
\showinverseboard
\highlight{a6,e6}
\printarrow{a6}{e6}
]]>
</skakimg>
</imgblock>
</object>
...
|
|
Figura 4.29. Codice incorporato TeX-Skak.
|
4.5
Immagini incorporate Jgraph
È possibile incorporare codice per tracciare grafici e diagrammi strutturati di vario genere attraverso l'elemento jgraphimg, descrivendo l'immagine desiderata nel linguaggio di input del programma Jgraph.
Nel listato 4.30 viene presentato un esempio di incorporazione nell'ambito dell'elemento jgraphimg; corrispondentemente, la figura 4.31 illustra l'aspetto finale dell'immagine in relazione al codice presentato.
Listato 4.30. Codice incorporato Jgraph.
...
<object>
<imgblock>
<jgraphimg>
<![CDATA[
newgraph
xaxis
min 0.1 max 4.9
size 3.5
hash 1 mhash 0 no_auto_hash_labels
yaxis
min 0 max .4
size 2
precision 3
newcurve marktype xbar cfill 1 0 0 marksize .8
pts 1 .390
2 .389
3 .353
4 .343
xaxis
hash_label at 1 : Larry Walker
hash_label at 2 : Tony Gwynn
hash_label at 3 : Mike Piazza
hash_label at 4 : Kenny Lofton
hash_labels hjl vjc font Helvetica rotate -90
yaxis label : Batting Average
title : NL Batting Leaders, August 5, 1997
]]>
</jgraphimg>
</imgblock>
</object>
...
|
|
Figura 4.31. Codice incorporato Jgraph.
|
4.6
Riferimenti
Informatica per sopravvivere 2006.02.19 --- Copyright © 2004-2006 Massimo Piai -- <pxam67 (ad) virgilio·it>
1) GNU Plotutils GNU GPL
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome alml_estensioni_pxam.html
[successivo]
[precedente]
[inizio]
[fine]
[indice generale]
[indice analitico]