-
Notifications
You must be signed in to change notification settings - Fork 1
/
guidatematica-doc.tex
786 lines (646 loc) · 102 KB
/
guidatematica-doc.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
%% Cambiare qui sotto con pdfLaTeX o LuaLaTeX a seconda del compilatore da usare
% !TEX TS-program = LuaLaTeX
% !TEX encoding = UTF-8 Unicode
% Composizione in vari formati a seconda dell'opzione:
% a4paper, a5paper, b5paper, tablet, pad
%\documentclass[b5paper,11pt,ipertesto,oneside]{guidatematica}
%\documentclass[tablet,9pt,ipertesto,openany]{guidatematica}
% L'opzione ipertesto non esiste più.
\documentclass[b5paper,11pt,openany]{guidatematica}
\ProvidesFile{guidatematica-doc.tex}[2021-04-12 v.2.1.00 Uso della classe guidatematica.cls]
\usepackage{array,longtable,tabularx,imakeidx}
%%% Questa riga mancava nella versione 1.4b e la compilazione non andava
%%% a buon fine con pdflatex.
\ifPDFTeX
\usepackage{amsmath,amssymb}
\else
\let\originaldots\dots
\renewcommand\dots{\ifmmode\originaldots\else.\kern1pt.\kern1pt.\fi}
\setmathfont{Latin Modern Math}
\fi
%%%
\usepackage{hyperref}
\makeindex[options={-s guidatematica.ist},intoc]
\hfuzz=1pt
%\usepackage[full]{trace}
\begin{document}
%\IntelligentComma
\author{Gruppo Italiano Utilizzatori di \TeX}
\title{Guida d'uso alla classe \\{\unless\ifPDFTeX\fontspec{Latin Modern Mono Caps}%
\expandafter\slshape \else \expandafter\classstyle\fi{GuidaTematica}}}
\GetFileInfo{\jobname.tex}
\date{Versione \fileversion\ del \filedate}
\Copyright{2016--\the\year}
\maketitle
\chapter{Introduzione}
Questa breve guida serve per descrivere la classe \class{guidatematica} predisposta per comporre le guide tematiche del \GuIT\ con uno stile comune, in modo che già il solo vedere il frontespizio permetta di riconoscere le guide tematiche dalle altre guide e dalle altre pubblicazioni del \GuIT.
La classe \class{guidatematica} è dotata del file \file{.dtx} e la sua documentazione è ampliata con questo documento che ne descrive l'uso in modo più esteso. Sarebbe meglio che nessuno modificasse il file, altrimenti si perderebbe lo scopo per il quale è stato scritto, cioè di rendere omogenee nello stile le guide tematiche del \GuIT. Se si desiderano proporre estensioni, cambiamenti, altre funzionalità, ci si deve rivolgere ai responsabili del \GuIT\ che curano il sito Web e le pubblicazioni del Gruppo.
Questo stesso documento è stato composto con la classe \class{guidatematica} in modalità \verb|twoside|, che è quella predefinita.
Questa classe è costruita sulla classe \class{memoir} quindi l'autore può fare riferimento a tutte le funzionalità di quella classe, tranne alcune che collidono con i pacchetti già caricati; se decide di comporre l'indice analitico legga con attenzione l'apposito capitolo (vedi pag.~\pageref{cap:indiceA}); se decide di modificare lo stile di alcune liste o di crearne di nuove faccia riferimento alle funzionalità del pacchetto \pack{enumitem} e alla sua documentazione.
\vfill
{\small \GetFileInfo{guidatematica.cls}
Questa documentazione si riferisce alla classe \classstyle{\filename}, versione \fileversion, del \filedate.
Essa è stata composta con \ifPDFTeX pdf\/\LaTeX\else\ifXeTeX\XeLaTeX\else Lua\LaTeX\fi\fi\ usando i font Latin Modern \ifPDFTeX di tipo Type~1 accessibili con il pacchetto \pack{cfr-lm}\else OpenType forniti insieme alla distribuzione di TeX Live fin dal 2012 e accessibili con i comandi propri di \ifXeTeX\XeLaTeX\else Lua\LaTeX\fi\fi.}
\chapter{Ringraziamenti}
Io ho scritto materialmente questa classe \class{guidatematica} cercando di mettermi nella veste del curatore di un lavoro collettivo del \GuIT\ e per il \GuIT; ho consultato quindi gli autori o coautori delle guide tematiche pubblicate finora, Claudio Fiandrino, Roberto Giacomelli, Tommaso Gordini, Agostino De Marco, Mosè Giordano, Orlando Jovino, e ho seguito i suggerimenti di Ivan Valbusa; ho corretto alcune cose segnalatemi da Filippo Vomiero. Orlando Iovino ha inoltre contribuito alla creazione delle procedure bash (Linux) o bat (Windows) per installare tutto il materiale sul proprio PC.
Ringrazio tutti moltissimo del loro contributo, delle loro osservazioni, dei loro suggerimenti; questo è il miglior modo per contribuire al \GuIT, e quindi siamo tutti autori a pari merito di questa classe; se ne aggiungeranno altri col tempo e verranno via via aggiunti a questa lista.
Speriamo tutti che questo lavoro collettivo prosegua anche e soprattutto per comporre guide tematiche attraenti, chiare e, specialmente, utili. Questa classe riguarda prevalentemente l'estetica delle guide; il contenuto spetta agli autori, e forse una migliore veste grafica li invoglia a produrre altre guide. I frequentatori del Forum \GuIT\ ne hanno bisogno.
\begin{flushright}
\begin{minipage}{0.6\textwidth}\centering
\textsc{Claudio Beccari}\\
\texttt{claudio dot beccari at gmail dot com}
\end{minipage}
\end{flushright}
\newpage
\tableofcontents* % L'asterisco per evitare che l'indice vada nell'indice.
\mainmatter*
\chapter{Guida rapida alla classe}
\section{Installazione della classe}
La classe viene distribuita in un kit da installare ed usare come quello distribuito per \Ars.
{\sloppy
La via più spiccia è quella di copiare il kit \file{guidatematica.zip} (scaricabile dal link specificato alla pagina del sito \GuIT\ \texttt{https:/\slash www.guitex.org\slash home\slash it\slash guide-tematiche\slash la\discretionary{}{-}{-}filosofia\discretionary{}{-}{-}delle\discretionary{}{-}{-}guide\discretionary{}{-}{-}a\discretionary{}{-}{-}tema}) nella cartella dove risiede il file sorgente (unico o principale) con cui si vuole comporre la propria guida tematica; in quella cartella si decomprime il kit e tutti i file, compresi quelli della documentazione, risiedono in quella stessa cartella e sono immediatamente usabili per la composizione \emph{solo} di quella guida tematica.\par}
{\tolerance=3000
Meglio sarebbe disporre dell'albero personale di \TeX; se non se ne dispone, lo si crea secondo le modalità descritte per il proprio sistema operativo e la propria distribuzione del sistema \TeX. Se se ne dispone già, basta creare le cartelle a cui si fa riferimento qui di seguito. Si decomprime il kit in una cartella qualsiasi, meglio se in\footnote{\texttt{\$HOME} indica la propria cartella che generalmente ha il nome dell'autore, ma dipende molto dal sistema operativo; qui si è usato per il separatore delle cartelle la barra diritta, come è normale per le macchine di tipo UNIX; per le macchine Windows basta sostituire la barra diritta con la barra rovescia.} \url{$HOME/texmf/source/latex/guidatematica/}. Poi si spostano i file (eccetto quelli con l'estensione \file{.bst} e \file{.ist}) \file{GuidaTematica-doc.pdf} e \file{guidatematica.pdf} nella cartella \url{$HOME/texmf/doc/latex/guidatematica/} e gli altri file in \url{$HOME/texmf/tex/latex/guidatematica/}; il file \file{guidatematica.dtx} deve restare nella cartella dove si è eseguita la decompressione. Il file per lo stile bibliografico con estensione \file {.bst} va messo in \url{$HOME/texmf/bibtex/bst/guidatematica/}; i file per l'indice analitico, con l'estensione \file{.ist} vanno spostati in \url{$HOME/texmf/makeindex/guidatematica/}.\par}
Una terza possibilità¯consiste nel creare una propria cartella dove salvare il kit e dove decomprimere il tutto; non si sposta niente nelle cartelle del proprio albero personale, nemmeno in quelle che bisogna creare apposta; in queste cartelle si mettono invece i link simbolici ai file veri conservati nella propria cartella. In questo modo, quando si scarica un aggiornamento del kit, e lo si decomprime, i link simbolici continuano a funzionare perché puntano a file con lo stesso nome, e non c'è bisogno di spostare niente. I link simbolici sono disponibili sulle macchine di tipo UNIX (Linux, Mac,\dots) e, sebbene con una sintassi diversa per crearli, anche su Windows dalla versione 8 in poi.
Se la distribuzione del sistema \TeX\ lo richiede anche per l'albero personale, bisogna ricordarsi di creare o di aggiornare il database dei nomi dei file di questo albero usando gli strumenti della propria distribuzione. A questo punto tutti i programmi di composizione del sistema \TeX\ sono in grado di trovare i file necessari per comporre \emph{qualsiasi} guida tematica, qualunque sia la cartella dove i suoi file sorgente risiedono. Se l'albero personale ha la struttura standard TDS (TeX Directory Structure), o per lo meno una struttura ridotta ai soli rami e rametti che servono, nella cartella \url{$HOME/texmf/doc/latex/} si possono mettere tutti i link simbolici alle guide tematiche in formato PDF (creati o scaricati dalla rete e sistemati altrove nel proprio disco) in modo da poterle leggere direttamente con \texttt{texdoc} senza bisogno di andare a cercare la cartella dove si trova il file vero.
\section{Uso della classe}
Lo schema generale da usare per comporre una guida tematica è il seguente:
\begin{flushleft}\obeylines
\verb|\documentclass[b5paper,11pt]| \verb|{guidatematica}|
\cs{ProvidesFile}\marg{nome del file}\oarg{aaaa/mm/gg$\rangle$ \texttt{\upshape v.}$\langle$x.y.z$\rangle$ $\langle$Descrizione}
~
\meta{qualche definizione o qualche ulteriore pacchetto}
\meta{eventuali impostazioni per \normalfont\cs{makeindex}}
~
\Bambiente{document}
~
\cs{def}\cs{authorspace}\marg{spazio fra più autori}
\cs{author}\marg{autore o autori}
\cs{title}\marg{titolo}
\meta{eventuale dichiarazione di licenza diversa dalla LPPL}
\cs{GetFileInfo}\Marg{\cs{jobname}.tex}
\cs{maketitle}
~
\cs{chapter}\marg{titolo dell'introduzione}
\meta{corpo dell'introduzione}
\cs{newpage}
\cs{tableofcontents}
\meta{eventuali \cs{listoffigures} e/o \cs{listoftables} con o senza asterichi}
\cs{clearpage}
~
\cs{mainmatter*}
~
\cs{chapter}\marg{titolo del capitolo}
\meta{corpo del capitolo}
~
\dots
~
\cs{backmatter}
\cs{chapter}\marg{titolo della “postfazione”}
\meta{corpo dell'eventuale postfazione}
~
\meta{eventuale ridefinizione di \cs{prebibhook} per fare precedere un breve testo esplicativo all'elenco bibliografico vero e proprio}
~
\cs{bibliography}\marg{nome del database bibliografico senza estensione}
~
\texttt{\%\%\% eventuali indici analitici}
\cs{printindex}
\cs{printindex}\oarg{nome dell'indice}
\dots
\Eambiente{document}
\end{flushleft}
\section*{Osservazioni}
Il testo precedente, benché scritto in un file PDF, può essere selezionato, copiato e incollato in un file \file{.tex} e usato come modello (o come \emph{template} come è venuto di moda chiamarlo) per iniziare a strutturare il file sorgente di una guida tematica.
Comunque vale la pena di illustrare alcuni punti. Nel farlo, ci si rivolge a persone che, avendo qualcosa da dire in merito a qualche sfaccettatura del “sistema \TeX”, hanno sicuramente esperienza nello scrivere documenti usando il mark-up \LaTeX, e conoscono molto bene pregi e difetti dei programmi di composizione \prog{pdfLaTeX}, \prog{XeLaTeX} e \prog{LuaLaTeX}. Quindi molte cose saranno date per scontate.
\paragraph{\color{red}Attenzione!} Si ricorda che questa classe si appoggia alla classe \class{memoir}, quindi le istruzioni, i comandi, gli ambienti di \class{memoir} possono essere usati anche con questa classe \class{guidatematica}. Alcune cose vanno collocate al posto giusto; per esempio, le informazioni per la pagina del titolo e la pagina legale hanno bisogno di costrutti speciali, di cui l'utente non deve preoccuparsi; quindi il titolo, l'autore, e le altre informazioni del frontespizio \emph{devono essere specificate dopo} \Bambiente{document} e non prima. Vedi anche la pagina~\pageref{pag:Titolo}.
Si ricorda anche quanto scritto nella documentazione della classe \class{memoir}:\\*[1ex]
%\begin{quotation}\tolerance=3000
\begin{otherlanguage*}{english}\color{blue}
The memoir class includes code either equivalent to, or extensions of, the following packages; that is, the set of commands and environments is at least the same as those in the packages:
\begin{quote}\centering
\pack{abstract}, \pack{appendix}, \pack{booktabs}, \pack{ccaption}, \pack{chngcntr}, \pack{chngpage}, \pack{enumerate}, \pack{epigraph}, \pack{framed}, \pack{ifmtarg}, \pack{index}, \pack{makeidx}, \pack{moreverb}, \pack{needspace}, \pack{newfile}, \pack{nextpage}, \pack{parskip}, \pack{patchcmd}, \pack{setspace}, \pack{shortvrb}, \pack{showidx}, \pack{titleref}, \pack{titling}, \pack{tocbibind}, \pack{tocloft}, \pack{verbatim}, \pack{verse}.
\end{quote}
The class automatically ignores any \cs{usepackage} or \cs{RequirePackage} related to these. However, if you want to specifically use one of these packages rather than the integrated version then you can do so. For arguments sake, assuming you really want to use the \pack{titling} package you can do this:
\begin{flushleft}\obeylines
\cs{documentclass}\Oarg{...}\Marg{memoir}
\cs{DisemulatePackage}\Marg{titling}
\cs{usepackage}\Marg{titling}
\end{flushleft}
\end{otherlanguage*}
%\end{quotation}
\begin{blockdescription}
\item[Opzioni della classe] ~\\* Per impostazione predefinita della sottostante classe \class{memoir}, la composizione viene eseguita per la stampa fronte retro. L'autore può specificare l'opzione \opz{oneside}; dato lo stile delle pagine simmetrico, le uniche differenze che si manifestano con questa opzione sono che $(a)$ le note marginali appaiono sempre nel margine di destra e che $(b)$ non vengono lasciate pagine bianche per aprire i capitoli solo sulle pagine dispari; stampando fronte retro, questo fatto potrebbe essere un inconveniente, ma nello stesso tempo consente di ridurre un poco la quantità di carta usata. Però lo stile delle pagine perfettamente simmetrico permette di leggere la guida composta anche su schermo, senza avere quel noioso spostamento alternato dello specchio di stampa a destra e a sinistra. Per questo motivo si suggerisce di non comporre con l'opzione \opz{oneside}. Invece, in vista della lettura a schermo, ma anche per avere una versione stampata (e rifilata), si suggerisce di comporre con l'opzione \opz{b5paper} che è l'opzione predefinita; le altre opzioni per il formato della pagina sono \opz{a4paper}, \opz{a5paper}, \opz{pad}, \opz{tablet}; quest'ultima, poco raccomandabile, richiede molto lavoro per conferire un aspetto decente alla piccola pagina di 90\,mm per 120\,mm. Probabilmente lo specchio di stampa scelto per questo formato è troppo piccolo e non consente l'uso di certi pacchetti per mostrare il codice affiancato dal suo esito compositivo; tuttavia se si vuole usare, questo formato è leggibile su un piccolo tablet durante gli spostamenti sui mezzi pubblici\dots\ L'opzione \opz{pad} serve per comporre su uno schermo da iPAD, o simili apparecchi, supponendo una pagina virtuale di 120\,mm per 160\,mm. La lettura è più agevole, ma richiede comunque una buona dose di lavoro per evitare un numero eccessivo di righe sporgenti dai margini; queste sono relativamente frequenti anche con i formati maggiori e si manifestano quando il testo contiene lunghi indirizzi Web, oppure codice in modo verbatim.
Per l'opzione \opz{ipertesto} (non più disponibile) si veda il punto seguente.
%
\item{Identificazione} Come si vede nel modello precedentemente presentato, dopo la dichiarazione della classe con le sue opzioni viene inserito il comando che descrive il file unico o principale della guida che si vuole comporre; la sintassi è chiara, ma vale la pena commentarla:
\begin{flushleft}\setfontsize{10.15}\ttfamily\obeylines
\cs{ProvidesFile}\marg{nome del file\texttt{.tex}}\Oarg{\meta{data ISO} \texttt{v.}\meta{versione} \meta{Descrizione}}
\end{flushleft}
La \meta{data ISO} può essere scritta sia nella forma \emph{aaaa/mm/dd} sia in quella raccomandata dalle norme \emph{aaaa-mm-dd}. La \meta{versione} di solito è a tre livelli, del tipo $x.y.z$ dove $x$ è il numero principale della versione e va incrementato di una unità quando si modifica il file in modo significativo; $y$ è il numero della sottoversione e va incrementato di una unità quando il file subisce qualche aggiornamento di minore importanza; $z$ incrementa di una unità solo per lievi modifiche, di solito correzione di refusi. Queste informazioni saranno stampate sia nel frontespizio sia nel retrofrontespizio; quindi si veda anche la pagina~\pageref{pag:frontesp}. Invece la \meta{Descrizione} serve solo per promemoria dell'utente e viene scritta nel file \file{.log}; è bene che si riduca a una frase telegrafica di pochissime parole.
%
\item[Preambolo] ~\\* Il preambolo in generale può essere vuoto; può succedere però che l'autore necessiti di qualche definizione particolare che non si trova in nessun pacchetto o che abbia bisogno di ulteriori pacchetti oltre quelli già caricati (si veda più avanti l'elenco di questi pacchetti). In ogni caso, se desidera comporre la sua guida tematica in modo da usare collegamenti ipertestuali, con le versioni precedenti di questa classe, l'autore doveva egli stesso specificare l'opzione \opz{ipertesto} fra le opzioni; questa opzione ritardava al momento di completare il comando \Bambiente{document} la chiamata del pacchetto \pack{hyperref} con alcune personalizzazioni; il pacchetto veniva caricato per ultimo perché questa operazione deve essere fatta dopo il caricamento dei pacchetti personali. D'altronde i collegamenti ipertestuali non sono obbligatori, ma sono utili per la lettura sul monitor solo per alcune guide e non per altre; è una scelta dell'autore quella di voler usare i collegamenti ipertestuali ed è quindi una sua scelta personale quella di specificare l'opzione suddetta.
Il guaio è che alcuni pacchetti recenti, come \pack{glossaries}, richiedono di essere caricati dopo \pack{hyperref}. Perciò si è tolta dalle funzionalità di questa classe l'opzione \opz{ipertesto}, e si lascia all'utente la responsabilità di caricare i pacchetti che gli servono, compreso \pack{hyperref}, nell'ordine giusto. All'inizio del corpo del documento viene eseguito in test per verificare se \pack{hyperref} sia stato caricato e, nel caso, ne imposta alcune opzioni.
%
\item[Il materiale iniziale] ~\\* Il comando \cs{frontmatter*} si comporta come il normale \cs{frontmatter} salvo che non esegue cambi di stile alla numerazione delle pagine, e quindi la numerazione comincia da 1 in cifre arabe e prosegue con le cifre arabe che non vengono reimpostate con \cs{mainmatter*}. Ma, come con il comando \cs{frontmatter} standard, i capitoli e gli altri comandi di sezionamento producono sezioni non numerate, che però vengono inserite nell'indice generale. I comandi di sezionamento asteriscati, invece, continuano a non comparire nell'indice.\enlargethispage*{\baselineskip}
Se l'autore volesse mantenere la numerazione delle pagine diversa per la front matter rispetto alla main matter, può tranquillamente usare i corrispondenti comandi non asteriscati; in quel caso la parte iniziale viene numerata con la numerazione romana composta in maiuscoletto; eventuali voci della parte iniziale che debbano comparire nell'indice generale o in quello analitico vengono riportati comunque con i numeri coerentemente composti in maiuscoletto. Non entro nel merito dell'opportunità della numerazione romana nella parte iniziale; questa è unicamente una scelta stilistica dell'autore della guida tematica. Ho solo provveduto a far sì che, qualunque decisione prenda l'autore, egli non debba fare acrobazie per rendere coerenti le numerazioni nei riferimenti vari che possono comparire nella guida.
%
\item[Pagina del titolo]~\\* La pagina del titolo e il retrofrontespizio vengono generati in automatico con i pochi dati forniti mediante le istruzioni \cs{author}, \cs{title}, eventualmente \cs{subtitle} e le eventuali dichiarazioni per specificare una licenza diversa da quella preimpostata mediante il comando \cs{licenza}\marg{dichiarazione}. Si suggerisce di inserire anche la riga \cs{GetFileInfo} con il suo argomento, in modo da recuperare dal file sorgente le informazioni della versione e della data che, se disponibili, verranno indicate in calce al frontespizio. Per il comando \cs{licenza} si veda più avanti.
\textcolor{red}{\phantomsection\label{pag:Titolo}In generale si legge nelle guide che le informazioni per il frontespizio inserite con i comandi \cs{author}, \cs{title} e \cs{date} vanno inseriti nel preambolo e solo il comando \cs{maketitle} va inserito dopo \Bambiente{document}. Nel caso delle guide tematiche, invece, anche quelle informazioni vanno inserite \emph{dopo} \Bambiente{document} e, ovviamente, prima di \cs{maketitle} per la maniera in cui sono differite alcune definizioni.} Il comando \cs{date} va evitato, perché le informazioni corrette vengono recuperate dal file sorgente al quale sia stato inserito il comando \cs{ProvidesFile} con i suoi argomenti, come specificato sopra. È ovvio che senza questa istruzione il comando \cs{GetFileInfo} non può recuperare nessuna informazione. Trattandosi di “guide”, invece, queste informazioni sono essenziali.
Va notato invece il comando \cs{authorspace} da usare fra i nome degli autori per separarli di quanto specificato con \meta{spazio fra più autori}; è evidente che se l'autore è uno solo, non occorre fare nulla; ma se gli autori sono più di uno fra le generalità di ognuno va inserito un comando di spaziatura, \cs{authorspace}; questo è predefinito per essere soltanto uno spazio; facendo precedere l'indicazione di \cs{author} con una diverse definizione con \cs{def} o con \cs{newcommand} e con \cs{let}, i vari nomi vengono composti spaziati; ognuna delle seguenti definizioni (con spazi diversi) è altrettanto valida:
\begin{verbatim}
\def\authorspace{\hspace{1.5em}}
\newcommand*\authorspace{\quad}
\let\authorspace\qquad
\end{verbatim}
Nello scrivere i nomi dell'unico o dei vari autori si abbia l'accortezza di indicare sempre i nomi propri senza abbreviazioni prima dei corrispondenti cognomi. In caso di nomi e cognomi molto lunghi invece di uno spazio orizzontale si può usare anche un comando di nuova riga.
%
\item[Iscrizione al \GuIT] ~\\* L'invito a iscriversi al \GuIT\ viene stampato in automatico nel retro del frontespizio; esso consiste in una pagina a se stante con l'invito e con l'URL del sito per procedere all'iscrizione. La pagina appare come in questa guida sul verso della pagina del frontespizio. Se si usa il pacchetto \pack{hyperref} l'URL è attivo e cliccandoci sopra si viene portati alla pagina in questione.
Sempre in automatico, in calce a questa pagina viene indicata la licenza a cui è sottoposta la guida tematica; se l'autore non interviene mediante il comando \cs{licenza}, viene dichiarato che la guida è sottoposta alla LPPL (\LaTeX\ Project Public Licence, versione 1.3 o successive); altrimenti viene composta la dichiarazione dell'autore eseguita tramite il comando \cs{licenza} suddetto (vedi pagina~\pageref{pag:licenza}).
%
{\tolerance=3000
\item[Introduzione] ~\\* Questo capitolo non numerato scritto nella “front matter” può avere un titolo diverso da “Introduzione”. Non è nemmeno necessario scrivere un'introduzione o prefazione o presentazione, comunque la si voglia chiamare, ma si ritiene che un minimo di spiegazioni o motivazioni per avere scritto una guida tematica sia utile per il lettore.
Se l'utente di questa classe volesse usare una licenza diversa dalla LPPL può farlo, purché non si tratti di una licenza più restrittiva della LPPL stessa. Perciò alla fine dell'introduzione ci sta bene qualche cenno alla licenza. Ci sta bene qualche indicazione in più e forse anche il motivo per avere scelto questa piuttosto che quella licenza. Qualunque licenza si scelga, deve essere una licenza libera altrimenti il \GuIT\ non può pubblicare la guida.
Pertanto l'autore di una guida tematica della collana del \GuIT\ potrebbe per esempio decidere di usare la licenza della Creative Commons, e indicare le clausole della licenza con le apposite icone. Le possibili combinazioni di licenze e di mutue interazioni rendono praticamente impossibile creare una macro o un ambiente per specificare quanto la legge impone a seconda delle licenze invocate. Per questo motivo si è scelto di inserire di default la specificazione della LPPL, lasciando all'autore la libertà di specificarne una diversa, ma non più restrittiva.
\sloppy
Spesso la fine dell'introduzione è il posto adatto per inserire il nome dell'autore ed eventualmente anche l'indirizzo di posta elettronica; l'autore esperto non ha nessun problema ad usare una \amb{minipage} di larghezza pari ad una frazione della \cs{textwidth} con il suo contenuto centrato e con l'indirizzo scritto nella forma \verb|mario dot rossi at server dot network|; naturalmente non è vietato che l'autore scriva il suo indirizzo nella forma \verb|mario.rossi@server.network|, ma è più prudente la prima forma che risulta più difficile da carpire da parte di malware vari.\par}
%
{\tolerance=3000\phantomsection\label{pag:frontesp}
\item[Informazioni per la pagina del titolo] ~\\* Potrebbe essere interessante usare il comando \cs{date} per inserire nella pagina del titolo informazioni relative alla versione del documento. Per non dover ripetere sempre le stesse cose scrivendole varie volte, è opportuno scrivere subito dopo la specificazione della classe da usare con le sue opzioni, la riga che comincia con \cs{ProvidesFile}; il \meta{nome del file} sarà il nome del file sorgente principale della guida tematica; fra le informazioni facoltative (che in questo caso non sono facoltative affatto) \meta{aaaa/mm/gg} indica la data di ultima modifica del file; \meta{v.x.y.z} indica la versione $x$, sub\-versione $y$, revisione $z$; \meta{Descrizione} fornisce con poche parole la descrizione della guida.\enlargethispage*{1\baselineskip}
Successivamente nel predisporre le informazioni che il comando \cs{maketitle} userà per comporre il frontespizio si potrà scrivere:
\begin{sintassi}\obeylines
\cs{author}\marg{autore o autori}
\cs{title}\marg{titolo}
\cs{subtitle}\marg{eventuale sottotitolo}
\cs{GetFileInfo}\marg{nome del file completo di estensione}
\cs{date}\Marg{Versione \cs{fileversion}\string\ del \cs{filedate}}
\meta{Eventuale dichiarazione di una licenza diversa dalla LPPL}
\cs{maketitle}
\end{sintassi}
ripetendo il \meta{nome del file completo di estensione} solo nell'argomento di \cs{GetFileInfo}, ma senza bisogno di riscrivere i dati ad ogni aggiornamento del file stesso.\par}
%
%
{\tolerance=3000
\item[Sezionamenti]~\\* I comandi di “sezionamento” \cs{frontmatter}, \cs{mainmatter} e \cs{backmatter} indicano sezioni ben definite, ma tocca all'autore indicarli esplicitamente nei posti opportuni.\par}
%
\item[Postfazione]~\\* La postfazione, qualunque titolo essa abbia, è evidentemente facoltativa e non è assolutamente necessario scriverne una soltanto perché c'è la possibilità di farlo; d'altronde, se si è abituati a scrivere una breve sezione introduttiva alla lettura della bibliografia, non ci si dimentichi che la bibliografia consente di comporre un breve testo prima dell'elenco dei riferimenti, come spiegato qui sotto.
%
\item[Testo introduttivo alla bibliografia]~\\*
Per la bibliografia si sfruttano i comandi interni di |memoir|
per ottenere quello che si desidera e nello stesso tempo
per consentire di mettere un prologo prima dell'elenco
bibliografico. La documentazione di \class{memoir} dice che bisogna
ridefinire il comando interno \cs{bibsection}.
\begin{verbatim}
\renewcommand{\bibsection}{\chapter{\bibname}\prebibhook}
\end{verbatim}
Inoltre, per comporre un breve testo da inserire fra il titolo della bibliografia e l'elenco bibliografico vero e proprio, bisogna passarlo come argomento al comando \cs{prebibhook}; siccome questo comando è predefinito per contenere una stringa nulla, il breve testo deve venire assegnato a \cs{prebibhook} ridefinendolo mediante \cs{renewcommand}.
Bisogna specificare un punto che non è affatto marginale: nelle precedenti versioni della classe \class{guidatematica}, veniva caricata di default il pacchetto \pack{natbib} specificando lo stile con
\verb|\bibliographysyle{guidatematica}|, uno stile confezionato apposta per questa classe, in modo da avere i riferimenti identificati solo dai nomi degli autori e l'anno di pubblicazione oltre alle altre informazioni obbligatorie e facoltative; le citazioni sono del tipo “autore-anno”. Questo stile è specifico della classe, e sarebbe opportuno non deviare da queste impostazioni. Ma ci sono autori di guide tematiche che hanno bisogno di usare gli stili di \pack{biblatex} e del programma \prog{biber} per estrarrei riferimenti da un database bibliografico e confezionare il file \file{.bbl} con il quale comporre la bibliografia. Se \pack{natbib} e \file{guidatematica.bst} vengono precaricati, si genera un errore se l'autore specifica di voler usare \pack{biblatex}. Per rimuovere questo vincolo, la versione di questa classe non carica più \pack{natbib} con il suo stile speciale, ma resta a carico dell'utente il compito di caricare i pacchetti che preferisce con gli stili che preferisce. È comunque importante che non si allontani troppo dallo stile preconfezionato per queste guide tematiche.
%
\item[Uno o più indici analitici]~\\* L'indice analitico non è quasi mai necessario; più indici analitici ancor meno. Ma l'autore che voglia comporre uno o più indici analitici è reindirizzato alla documentazione del pacchetto \pack{imakeidx} che consente di farlo nella maniera più comoda finora sviluppata per la loro composizione. Tenga presente che se vuole comporre più indici analitici dovrebbe ridefinire un bel numero di comandi interni della classe, indicati esplicitamente nella documentazione della classe \file{guidatematica.pdf}.
\end{blockdescription}
\enlargethispage*{\baselineskip}
\ifdim\dimexpr\pagegoal-\pagetotal<4\onelineskip\newpage\fi
{\def\lra{\space$\rightarrow$\space}\tolerance=3000
\noindent\textsc{Sinossi dei comandi e degli ambienti specifici della classe}
\begin{plaindescription}[noitemsep,partopsep=0pt]
\item[\cs{meta}] \raggedright per definire un argomento \verb|\meta{argomento}|\lra\meta{argomento}
\item[\cs{marg}] \raggedright per definire un argomento obbligatorio \verb|\marg{argomento}|\lra\marg{argomento}
\item[\cs{oarg}] \raggedright per definire un argomento facoltativo \verb|\oarg{argomento}|\lra\oarg{argomento}
\item[\cs{garg}] per definire le coordinate per un ambiente grafico \verb|\garg{x,y}|\lra\garg{x,y}
\item[\cs{comando}] \raggedright per comporre un comando senza eseguirlo \verb|\comando{\comando}|\lra\comando{\comando}
\item[\cs{cs}] per comporre un comando usandone solo il nome, inviandone eventualmente le informazioni necessarie all'indice analitico \verb|\cs{comando}|\lra\texttt{\char92comando}
\item[\cs{Bambiente}]\raggedright per comporre l'apertura di una ambiente specifico \verb|\Bambiente{ambiente}|\lra\Bambiente{ambiente}
\item[\cs{Eambiente}] \raggedright per comporre la chiusura di un ambiente specifico \verb|\Eambiente{ambiente}|\lra\Eambiente{ambiente}
\item[\cs{Sambiente}] \raggedright per comporre la sintassi dell'apertura di un ambiente con un solo argomento obbligatorio \verb|\Sambiente{ambiente}{N.arg.}|\lra \comando\begin\marg{ambiente}\oarg{N.arg.} \dots\ \comando\end\marg{ambiente}
\item[\cs{Dambiente}] \raggedright per comporre la sintassi dell'apertura di un ambiente con più argomenti di cui il primo è opzionale e il suo valore di \meta{default} viene specificato\verb|\Dambiente{ambiente}{N.arg.}|\hskip0pt\verb|{default}|\lra\Dambiente{ambiente}{N.arg.}{default}
\item[\cs{Arg}]per comporre un argomento specifico racchiuso fra graffe \verb|\Arg{argomento}|\lra\Arg{argomento}; il comando \cs{Marg} ne è un sinonimo.
\item[\cs{GetFileInfo}] Per ricavare le informazioni relative ad un file provvisto al suo inizio del comando \comando{\Provides...}: \verb|\GetFileInfo{book.cls}|; non produce risultati compositivi, ma assegna nuovi valori alle variabili \cs{filename}, \cs{fileversion} e \cs{filedate}. Oltre al comando \cs{ProvidesFile} sono disponibili anche i comandi \cs{ProvidesClass} e \cs{ProvidesPackage} per fornire le informazioni relative al loro contenuto, alla loro versione e alla data dell'ultima revisione. Sono comandi disponibili già dal nucleo di \LaTeX; sono poco conosciuti, ma il loro uso dovrebbe essere “obbligatorio”.
\item[\cs{setcopymark}] \raggedright scrive in verticale nel margine esterno quello che si desidera: \verb|\setcopymark{Composizione|\hskip0pt\verb| del \today}|\lra vedi la pagina~\pageref{page:copymark}
\item[\cs{licenza}] è\phantomsection\label{pag:licenza} il comando da usare se si desidera specificare una licenza diversa dalla LPPL. La sintassi è semplicemente \cs{licenza}\marg{dichiarazione}, dove \meta{dichiarazione} può contenere diversi capoversi e materiale grafico che però deve restare tutto nella stessa pagina dove compare l'invito ai lettori ad iscriversi al \GuIT. Piuttosto, se la \meta{dichiarazione} dovesse davvero essere lunga, si specifichi semplicemente \cs{licenza}\Marg{\cs{relax}} (per evitare di inserire la dichiarazione relativa alla LPPL) e si componga una nuova pagina legale tutta a disposizione della ‘dichiarazione’ che, ovviamente, ora non sarà più necessario racchiudere nell'argomento di \cs{licenza}.
\item[\cs{maketitle}] comando ridefinito in modo che componga la pagina del titolo in modo uniforme fra tutte le guide tematiche della collezione e provveda al retrofrontespizio con l'invito a iscriversi al \GuIT.
\item[\cs{subtitle}] \raggedright ulteriore comando per specificare un sottotitolo da comporre nella pagina del titolo: \cs{subtitle}\marg{Sottotitolo della guida}| \lra \texttt{Sottotitolo della guida}
\item[\cs{makeindex}] comando modificato per l'uso del pacchetto \pack{imakeidx}
\item[\cs{showindexmarks}] mostra le parole indicizzate nella parte superiore del margine esterno della pagina; talvolta fallisce se le corrispondenti stringhe sono troppo lunghe
\item[\cs{hideindexmarks}] nasconde l'indicazione delle parole indicizzate
\item[\cs{texttm}] comando testuale per comporre col font teletype monospaziato anche quando fosse in vigore quello proporzionale
\item[\cs{texttv}] comando testuale per comporre col font teletype proporzionale anche qhando fosse in vigore quello monospaziato
\item[\cs{tvfamily}] dichiarazione corrispondente al comando \cs{texttv}
\cs{textl}] comando per comporre con i font type\-writer con le cifre “maiuscole” anche quando fosse in vigore lo stile \texttt{OldStyle} per le cifre \verb|\textl{123}|\lra\textl{123} a confronto con \verb|123|\lra123
\item[\cs{prebibhook}] comando per inserire un (breve) testo fra il titolo della bibliografia e l'elenco bibliografico
\item[\cs{ambstyle}] comando per comporre il nome degli ambienti con un certo stile di scrittura \verb|\ambstyle{ambiente}|\lra\ambstyle{ambiente}
\item[\cs{classstyle}] comando per comporre il nome delle classi con un certo stile di scrittura \verb|\classstyle{classe}|\lra\classstyle{classe}
\item[\cs{filestyle}] comando per comporre il nome dei file con un certo stile di scrittura \verb|\filestyle{file}|\lra\filestyle{file}
\item[\cs{packstyle}]comando per comporre il nome dei pacchetti con un certo stile di scrittura \verb|\packstyle{pacchetto}|\lra\packstyle{pacchetto}
\item[\cs{progstyle}] comando per comporre il nome dei programmi con un certo stile di scrittura \verb|\progstyle{programma}|\lra\progstyle{programma}
\item[\cs{opzstyle}] comando per comporre il nome delle opzioni con un certo stile di scrittura \verb|\opzstyle{opzione}|\lra\opzstyle{opzione}
\item[\cs{contastyle}] comando per comporre il nome dei contatori con un certo stile di scrittura \verb|\contastyle{contatore}|\lra\contastyle{contatore}
\item[\cs{stilestyle}] comando per comporre il nome degli stili di pagina con un certo stile di scrittura \verb|\stilestyle{stile}|\lra\stilestyle{stile}
\item[\cs{numeristyle}] comando per comporre il nome degli stili di numerazione con un certo stile di scrittura \verb|\numeristyle{arabic}|\lra\numeristyle{arabic}
\item[\cs{umisurastyle}] comando per comporre il nome delle unità di misura con un certo stile di scrittura \verb|\umisurastyle{mm}|\lra\umisurastyle{mm}
\item[\cs{chiavestyle}] comando per comporre il nome delle chiavi nella sintassi \meta{chiave} = \meta{valore}con un certo stile di scrittura \verb|\chiavestyle{angle}|\lra\chiavestyle{angle}
\item[\cs{descrittorestyle}] comando per comporre il codice dei descrittori delle colonne con un certo stile di scrittura \verb|\descrittorestyle{c}|\lra\descrittorestyle{c}
\item[\cs{posizionestyle}] comando per comporre il codice dei posizionamenti degli oggetti mobili con un certo stile di scrittura \verb|\posizionestyle{t}|\lra\posizionestyle{t}
\item[\cs{allineamentostyle}] comando per comporre il codice degli allineamenti degli ambineti \amb{tabular}, \amb{array} e simili con un certo stile di scrittura \verb|\allineamentostyle{b}|\lra\allineamentostyle{b}
\item[\cs{opz}] compone una opzione nello stile \cs{opzstyle} e manda le informazioni all'indice analitico sotto la voce “opzione”
\item[\cs{conta}] compone il nome di un contatore nello stile \cs{contastyle} e manda le informazioni all'indice analitico sotto la voce “contatore”
\item[\cs{stile}] compone il nome di uno stile di pagina nello stile \cs{stilestyle} e manda le informazioni all'indice analitico sotto la voce “stile della pagina”
\item[\cs{numeri}] compone il nome di uno stile di numerazione nello stile \comando{\numeri\-style} e manda le informazioni all'indice analitico sotto la voce “numerazione”
\item[\cs{misura}] compone il nome di una unità di misura nello stile \comando{\umisurasty\-le} e manda le informazioni all'indice analitico sotto la voce “unità di misura”
\item[\cs{chiave}] compone il nome di una chiave nello stile \cs{chiavestyle} e manda le informazioni all'indice analitico sotto la voce “chiave”
\item[\cs{descrittore}] compone il codice di un descrittore di colonna nello stile \cs{descrittorestyle} e manda le informazioni all'indice analitico sotto la voce “descrittore di colonna”.
\item[\cs{posizione}] compone il codice di posizionamento di un oggetto mobile nello stile \cs{posizionestyle} e manda le informazioni all'indice analitico sotto la voce “posizione degli oggetti flottanti”
\item[\cs{allineamento}] compone il codice di allineamento di una tabella o di una matrice nello stile \cs{allineamentostyle} e manda le informazioni all'indice analitico sotto la voce “codice di allineamento”
\item[\cs{amb}] compone il nome di un ambiente nello stile \cs{ambstyle} e manda le informazioni all'indice analitico sotto la voce “ambiente”
\item[\cs{class}] compone il nome di una classe nello stile \cs{classstyle} e manda le informazioni all'indice analitico sotto la voce “classe”
\item[\cs{file}] compone il nome di un file (con la sua estensione) oppure la sola estensione di un file composti nello stile \cs{filestyle} e manda le informazioni all'indice analitico sotto la voce “file”
\item[\cs{pack}] compone il nome di un pacchetto nello stile \cs{packstyle} e manda le informazioni all'indice analitico sotto la voce “pacchetto”
\item[\cs{prog}] compone il nome di un programma nello stile \cs{progstyle} e manda le informazioni all'indice analitico sotto la voce “programma”
\item[\amb{description}] si riferisce al solito ambiente di \LaTeX\ salvo che l'etichetta della voce da descrivere è composta in maiuscoletto
\item[\amb{blockdescritption}] si riferisce ad un ambiente simile a \amb{description} privo però del rientro del margine sinistro; l'etichetta è composta in maiuscoletto
\item[\amb{plaindescription}] si riferisce ad un ambiente simile a \amb{description} con il rientro del margine sinistro; l'etichetta è composta in font normale, non in neretto come nell'ambiente descrittivo di \LaTeX
\item[\amb{compactitemize}] si riferisce ad una lista semplice (puntata) priva di spazi di separazione fra una voce e la successiva
\item[\amb{compactenumerate}] si riferisce ad una lista enumerativa priva di spazi separazione fra una voce e l'altra
\item[\amb{compactdescription}] si riferisce ad una lista descrittiva priva di spazi di separazione fra una voce e l'altra; l'etichetta è composta in maiuscoletto
\item[\amb{sintassi}] Permette di scrivere la sintassi di uno o più comandi dentro un riquadro
\item[\amb{pdfxmetadata}] Permette di inserire i metadati specifici di una data guida i metadati necessari nel caso che si desideri creare un guida archiviabile secondo le norme ISO.
\item[\file{guidatematica.bst}] file di stile per la bibliografia da gestire con \pack{natbib} e che ha i riferimenti nello stile autore-anno
\item[\file{guidatematica.ist}] file di stile per gli indici analitici con i gruppi di voci che iniziano con la stessa lettera separati dal titolo formato dalla lettera iniziale
\item[\file{guidatematicafiles.ist}] analogo ma per un indice analitico tematico relativo solo ai file (vedi pacchetto \pack{imakeidx})
\item[\cs{LRmarginpar}] serve per scrivere note marginali senza bisogna di specificare cosa fare sulle pagine pari e cosa fare nelle pagine dispari.Le note sono composte in bandiera con il palo adiacente alla gabbia del testo.
\item[CLRmarginpar]Serve per fare le stesse cosa (ma col palo sempre a sinistra indipendentementaadalla parità della pagina) se \emph{non} si specificano dei colori; la sintassi di questi due comandi è:
\begin{flushleft}\obeylines
\cs{LRmarginpar}\marg{testo della nota}
\cs{CLRmarginpar}\marg{testo della nota}\oarg{sfondo}\oarg{filetti}
\end{flushleft}
Passando ad un singolo comando per generare una nota marginale dei colori arbitrari al posto del colore “sfondo” e al colore “bordo”, la nota viene colorata con i colori specificati; se si vogliono colorare le note consistentemente, si ridefiniscono i colori “sfondo” e “bordo” (proprio con questi due nomi) nel preambolo e tutte le note vengono omogeneamente colorate tutte con quei colori. Si vedano più avanti le note marginali di questo documento.
\end{plaindescription}
Si noti che se non si compone nessun indice analitico i comandi del tipo \cs{ambstyle} e \cs{amb}, e le altre coppie analoghe, si comportano nello stesso modo.
\enlargethispage*{\baselineskip}
I comandi \cs{showindexmarks} e \cs{hideindexmarks} talvolta non fanno quello che ci si aspetta; se l'informazione (in corpo \comando\footnotesize) è troppo larga per stare completamente nel margine esterno, l'indicazione viene omessa, anche se ce n'è menzione nel file \file{.log}.
Per maggiori dettagli si vedano i paragrafi specifici che si riferiscono a questi comandi.
\par}
\chapter{Uso della classe}
La classe si usa nel solito modo dichiarandone il nome nell'argomento del comando iniziale \cs{documentclass}.
Non sono preimpostate opzioni di nessun genere e quindi si possono specificare le opzioni che si desiderano fra tutte quelle che la classe \class{memoir}.
Tuttavia bisogna fare alcune semplici considerazioni:
\begin{compactitemize}[before={\tolerance=3000}]
\item Le guide tematiche verosimilmente vengono lette a schermo; la classe specifica un disegno della pagina simmetrico, per cui la lettura a schermo evita al lettore di vedere lo specchio di stampa spostarsi a destra o a sinistra a seconda della parità del numero di pagina. Non è quindi necessario specificare l'opzione \opz{oneside}, come si fa spesso per comporre documenti da leggere a schermo.
%
\item La lettura a schermo è più comoda se il supporto virtuale della pagina, la “carta virtuale”, è di formato B5 invece che A4; l'opzione predefinita per il formato della pagina è \opz{b5paper}; tuttavia l'autore può specificare espressamente una delle opzioni \opz{a4paper}, \opz{a5paper}, \opz{pad} per poter comporre su una carta virtuale, lo schermo di un grande dispositivo \emph{hand held}, di 120\,mm per 160\,mm, oppure \opz{tablet} per poter avere come carta virtuale lo schermo di un tablet di media grandezza con lo schermo da 90\,mm per 120\,mm; si consiglia di comporre la guida tematica con l'opzione \opz{b5paper} oppure con l'omissione di qualunque opzione relativa al formato della carta.
%
\item Comunque si ritiene che sia meglio specificare un font normale di 11~punti, perché rende la lettura a schermo più facile; tuttavia per l'opzione \opz{tablet} è forse più adatto un corpo più piccolo, per esempio specificando alla classe l'opzione \opz{9pt}.
\end{compactitemize}
Per i motivi di immagine esposti nell'introduzione, è opportuno che i singoli utenti apportino il minor numero di personalizzazioni a quanto la classe può produrre da sola; le opzioni descritte sopra sono però tutte accettabili.
Naturalmente l'autore è autorizzato ad usare i pacchetti che gli sono funzionali alla composizione della sua specifica guida tematica; viene in mente, per esempio, il pacchetto \pack{tcolorbox} che Roberto Giacomelli ha usato nella sua \emph{Guida tematica alla riga di comando}. Viene in mente il pacchetto \pack{tkzexample} per descrivere le proprietà grafiche del pacchetto \pack{TikZ} o della classe \class{beamer} su cui Claudio Fiandrino ha scritto la sua guida tematica \emph{Introduzione alla personalizzazione di Beamer}. Siccome questi pacchetti non sarebbero utili per molte altre guide tematiche, è opportuno che gli autori se li carichino da soli nel preambolo.
Oltre a quanto esposto sopra, si può pensare a qualcosa riguardante i font; per impostazione predefinita vengono usati i font Latin Modern estesi, invocati mediante il pacchetto \pack{cfr-lm} quando si compone con \prog{pdfLaTeX}. Questo pacchetto introduce molti comandi di personalizzazione, tutti usabili anche con questa classe, che permettono, per esempio, di usare i font teletype proporzionali oppure a spaziatura fissa (predefiniti); di usare le cifre minuscole, oppure maiuscole oppure a spaziatura fissa, specialmente per il corretto incolonnamento nelle tabelle. Ecco, queste sono tutte personalizzazioni “consentite”. Cambiare font, benché tecnicamente possibile, è invece fortemente sconsigliato. I font Latin Modern OpenType sono di default con \XeLaTeX\ e \LuaLaTeX.
Il layout della pagina e i margini ai quattro lati dello specchio di stampa non sono modificabili; cioè lo sarebbero, ma si raccomanda agli utenti di non farlo; si snaturerebbe l'aspetto grafico della guida, e si romperebbe quell'uniformità grafica richiesta a tutte le guide tematiche del \GuIT.
La classe carica un certo numero di pacchetti di configurazione e di estensione; se ne usino le funzionalità a piacimento, ma non si installino altri pacchetti, talvolta incompatibili, se sono tali da alterare l'aspetto grafico della classe.
\section{Pacchetti precaricati}
Alcuni pacchetti precaricati sono funzionali alla classe stessa, altri sono o potrebbero essere utili per l'autore:
%
\begin{compactdescription}[before={\renewcommand\makelabel[1]{\pack{##1}}}]
%
\item[iftex] è funzionale per la classe, visto che si può usare come programma di compilazione sia \prog{pdfLaTeX}, sia \prog{XeLaTeX} sia \prog{LuaLaTeX}. Per esempio, alcuni dei pacchetti che seguono sono funzionali solo se si usa \prog{pdfLaTeX}, quindi essi sono caricati solo se si usa \prog{pdfLaTeX}.
%
\item[fancyvrb] serve per estendere le funzionalità necessarie per creare materiale verbatim; definisce comandi come \cs{Verb} e ambienti come \amb{Verbatim} che estendono i corrispondenti ambienti del nucleo di \LaTeX, accettando anche alcune opzioni. Inoltre definisce l'ambiente \amb{VeratimOut} e il comando \cs{VerbatimInput} per scrivere in un file esterno del materiale verbatim, e per leggere da un file esterno del materiale da comporre in modo verbatim. Il pacchetto \pack{fancyvrb} è compatibile con la codifica UTF-8, mentre il pacchetto \pack{listing} consente di comporre listati molto più \emph{fancy} ma è incompatibile cone la codifica multibyte di UTF-8 e di Unicode in generale.
%
\item[graphicx] serve per inserire e manipolare immagini; disponendo di una distribuzione del sistema \TeX\ (TeX Live o MiKTeX molto recente e aggiornata, oltre che completa -- non una distribuzione basic, tanto per intenderci) sia \prog{pdfLaTeX}, sia \prog{XeLaTeX} sia \prog{LuaLaTeX} possono inglobare lo stesso tipo di file grafici, cioè quelli con estensione \file{.pdf}, \file{.jpg}, \file{.png}, \file{.eps}, \file{.mps}. In una prima versione di questa classe si era caricato il pacchetto \pack{guit}, che a sua volta caricava \pack{graphicx}, ma poi si è scoperto che il disegno del logo \GuIT\ era incompatibile con \XeLaTeX; perciò si è preferito \emph{non} caricare questo pacchetto (e l'autore è avvisato di non caricarlo mai, se vuole usare \prog{XeLaTeX}, finché non sarà aggiornato per essere compatibile con \XeLaTeX). Al suo posto si è generata una immagine abbastanza grande del logo, e si è creata una macro che inserisca il logo nelle giuste proporzioni con il corpo del font in uso; cambiando il corpo dei font cambia corrispondentemente anche l'immagine riprodotta del logo \GuIT.
%
\item[metalogo] serve per poter descrivere i loghi che vengono generalmente usati per indicare certi compilatori o certe indicazioni particolarmente frequenti quando si scrive di \LaTeX. Per esempio consente di usare il comando \cs{XeLaTeX} per scrivere correttamente \XeLaTeX\ con la ‘E’ speculare.
%
\item[pict2e] nella versione aggiornata dopo il primo di giugno 2009; è funzionale alla classe, ma potrebbe venire usato anche dall'autore.
%
\item[microtype] serve per usare pienamente la microtipografia se si usa \prog{pdfLaTeX}, sia \prog{LuaLaTeX} con la protrusione e l'espansione dei font; con \prog{XeLaTeX} funziona la protrusione ma non ancora l'espansione dei font.
\item[etoolbox] è funzionale alla classe, ma non è escluso che possa essere utile anche all'autore.
%
\item[xcolor] serve per usare i colori e per sfruttare la sua sintassi per definire i colori “misti”; non è specificata nessuna opzione per i colori. L'autore è pregato di non caricare il pacchetto \pack{color} che vanifica in parte le funzionalità di \pack{xcolor} e può produrre incompatibilità.
%
\item[tikz] viene caricato senza opzioni; è funzionale per la classe per la quale si carica anche la sua estensione \pack{decorations}; l'autore non ha quindi bisogno di bisogno di caricare esplicitamente \pack{tikz}, ma se lo fa, lo carichi senza opzioni, per evitare errori di \emph{option clash} ma lo configuri usando le sue estensioni specifiche mediante il comando \cs{usetikzlibrary} e/o i suoi comandi di setup.
%
\item[natbib] era precaricato dalla classe nele sue precedenti versioni; ora m è lasciato all'autore insieme al file di stile bibliografico \file{guidatematica.bst} e se ne raccomanda l'uso. Esso era funzionale alla compilazione della bibliografia che usa uno stile “autore-anno” e si rifà ad una variante dello stile bibliografico \filestyle{arstex\-nica.bst}\index{file!arstexnica.bst@\filestyle{arstexnica.bst}} e si chiama \file{guidatematica.bst}; viene distribuito insieme a questa classe. Ma questo pacchetto precaricato impedisce all'autore di servirsi di \pack{biblatex}. Per rimuovere questo ostacolo, \pack{natbib} non viene più precaricato, e si lascia all'autore il suo caricamanto. Piccole personalizzazioni possono essere attuate re-impostando alcune opzioni di \pack{natbib} stesso attraverso i suoi propri comandi descritti nella sua documentazione. Ora che l'ostacolo è rimosso, l'autore deve caricare \pack{natbib} con lo stile raccomandato, oppure \pack{biblatex} con uno stile non troppo difforme, da quello predisposto per questa classe.
%
\item[multicol] può servire all'autore, ma è funzionale alla composizione dell'indice analitico.
%
\item[imakeidx] serve per comporre uno o più indici analitici in modo sincrono con la composizione del documento. Esso era inizialmente incompatibile con la classe \class{memoir} che aveva un suo meccanismo per comporre uno o più indici analitici; dalla versione 1.1 in poi \pack{imakeidx} consente di comporre gli indici analitici anche con \class{memoir} purché si usino solo le impostazioni e i comandi di \pack{imakeidx}. Dalla versione 1.2e \pack{imakeidx} è compatibile anche con le funzionalità di \mbox{\pack{showidx}} originali, sia con quelle simulate dalla classe \class{memoir}. Avendo la classe \class{memoir} come base, non è necessario caricare mai il pacchetto \mbox{\packstyle{showidx}}, ma per mostrare le voci indicizzate nel margine basta specificare \cs{showindexmarks} dopo \Bambiente{document} per attivare questa funzio\-nalità; \cs{hideindexmarks} la disattiva; questa funzionalità è inizialmente disattivata ma, appunto, può essere attivata e disattivata dall'autore a suo piacimento.
%
\item[inputenc] è\CLRmarginpar{Solo per \prog{pdflatex}} caricato dalla classe con l'opzione di codifica \opz{utf8} se e solo se si sta componendo con \prog{pdfLaTeX}. Con \prog{XeLaTeX} e \prog{LuaLaTeX} si deve usare solo la codifica \opz{utf8} senza specificare il pacchetto \pack{inputenc}. Avendo caricato questo pacchetto con questa opzione, si pensa di avere agevolato l'autore, anche se è possibile che, per comporre con questa classe il file di una guida tematica già scritto in precedenza, egli debba provvedere a cambiarne la codifica.
%
\item[fontenc] è caricato se e solo se si sta componendo con \prog{pdfLaTeX}; l'opzione prescelta è \opz{T1}; con \prog{XeLaTeX} e \prog{LuaLaTeX} si usano solitamente font OpenType in codifica UNICODE, quindi la scelta dei font con cui comporre il documento deve essere fatta dall'autore. Questa classe carica di default i font Latin Modern Type~1 quando si compone con \prog{pdfLaTeX} e Latin Modern OpentType quando si compone con \prog{XeLaTeX} o \prog{LuaLaTeX}.
%
\item[babel] viene\CLRmarginpar{Solo per \prog{pdflatex}} caricato solo con l'opzione \opz{italian} e solo se si sta componendo con \prog{pdfLaTeX}; se si vogliono usare altre lingue oltre all'italiano se ne specifichino le opzioni fra quelle della classe. Se invece si compone con \prog{XeLaTeX} o \prog{LuaLaTeX}, il pacchetto \pack{polyglossia} è già precaricato ed è già specificato che la lingua principale è l'italiano, ma si possono dichiarare direttamente altre lingue (secondarie/alternative) secondo le modalità proprie di \pack{polyglossia} con comandi da inserire nel preambolo.
%
\item[cfr-lm] quando si compone con \prog{pdfLaTeX} serve per usare i font vettoriali Latin Modern in modo avanzato, sfruttandone le molte possibilità di uso che non sono accessibili con il semplice pacchetto \pack{lmodern}. Il lettore si può riferire alla documentazione del pacchetto \pack{cfr-lm} per avere una panoramica completa dell'uso avanzato che si può fare con questo pacchetto. Quando una guida viene composta con \prog{pdfLaTeX} viene usato proprio il pacchetto \pack{cfr-lm}.
%
\item[fontspec] se\CLRmarginpar{Solo per \prog{lualatex} e \prog{xelatex}}[yellow][red] invece si compone con \prog{XeLaTeX} o con \prog{LuaLaTeX}, viene caricato il pacchetto \pack{fontspec} senza opzioni; si sono definiti alcuni font e alcuni comandi per far sì che usare \prog{pdfLaTeX}, \prog{XeLaTeX}, o \prog{LuaLaTeX} non producano risultati sostanzialmente differenti. Si veda però il capitolo~\ref{cap:xelatex}.
%
\item[polyglossia] viene richiamato se si compone con \prog{XeLaTeX} o con \prog{LuaLaTeX} e viene impostato l'italiano come lingua principale; se l'autore desidera usare altre lingue, basta che specifichi \cs{setotherlanguages} nel suo preambolo elencando le altre lingue che desidera usare con la solita lista di lingue separate da virgole.
%
\item[fancyvrb] può essere utile all'autore per comporre ambienti verbatim in modo diverso da quello che si può ottenere con l'ambiente standard del nucleo di \LaTeX. Se ne legga la documentazione prima di farne uso.
%
\item[afterpage] serve per trattenere l'esecuzione di una sezione di codice fino alla fine della pagina corrente; molto utile in certe circostanze, ma qui finalizzato soltanto all'uso di questa classe.
%
\item[enumitem] serve per personalizzare le liste, crearne di nuove, specificare ogni dettaglio di composizione delle etichette, eccetera; con le funzionalità di questo pacchetto si sono ridefiniti numerosi ambienti utili non solo per comporre questo documento, ma anche per l'autore in generale che usa la classe \class{guidatematica} per descrivere un tema particolare inerente il mondo di \TeX\ ed abbia bisogno di nuovi tipi di liste. La consultazione della documentazione di \pack{enumitem} diventa quindi utile e necessaria per usare i comandi di personalizzazione in modo corretto ed efficiente.
%
\item[listings] è il pacchetto principe per comporre listati di comandi di vari programmi; in questa classe esso è già configurato per usare la sintassi valida per il linguaggio \TeX\ nel suo ‘dialetto’ \LaTeX. Possono venire caricati altri dialetti come si possono caricare altri linguaggi. Si possono anche estendere le liste di parole chiave secondo le modalità descritte nella documentazione del pacchetto \pack{listings}.
%
\iffalse % eliminata la chiamata a canoniclayout il 4/2/2013
\item[canoniclayout] è funzionale alla classe e definisce il layout
della pagina qualunque sia il formato della ‘carta’. Il layout
della pagina di questa classe è indicato graficamente nella
pagina~\pageref{pag:layout}.
\fi
%
\end{compactdescription}
\section{Nuovi comandi}
La classe \class{guidatematica} mette a disposizione dell'autore un certo numero di comandi per rendere più agevole la descrizione della sintassi di certi comandi e di certi ambienti e, eventualmente, di inviare agli indici analitici i comandi, i nomi dei pacchetti, dei programmi, degli ambienti, eccetera.
\begin{compactdescription}[before={\renewcommand\makelabel[1]{\cs{##1}}}]
\item[meta] serve per scrivere il descrittore di un argomento in corsivo fra parentesi acute; per esempio: \meta{numero}.
\item[marg] serve per racchiudere il descrittore di un argomento fra parentesi graffe composte in carattere teletype; per esempio: \marg{numero}.
\item[oarg] serve per racchiudere il descrittore di un argomento fra parentesi quadre composte in carattere teletype; per esempio: \oarg{numero}.
\item[garg] richiede due descrittori di argomenti separati da una virgola e serve per comporli fra parentesi tonde, sempre separati da una virgola; virgola e parentesi tonde sono composte in carattere teletype; per esempio: \verb|\garg{x1,y1}| produce \garg{x1,y1}.
\item[comando] serve per scrivere un comando verbatim, senza interpretarlo e senza svilupparlo; per esempio: \comando{\textup}.
\item[cs] è simile a \cs{comando} ma richiede il nome del comando senza il backslash iniziale ma ne stampa il nome preceduto dal suo backslash; per esempio: \cs{normalfont}. Se vengono composti gli indici analitici, invia il comando all'indice analitico generale completo di backslash ma indicizzato senza backslash.
\item[Sambiente] serve per descrivere la sintassi di un ambiente, il cui nome ne costituisce il primo argomento; il secondo argomento rappresenta il numero di argomenti che il comando di apertura può ricevere; per esempio:\thispagestyle{headingslayout}\label{pag:layout}
\begin{flushleft}
\Sambiente{ambiente}{N-arg}
\end{flushleft}
Per ambienti che richiedono sia il numero di argomenti, sia il valore di default del primo argomento, se questo è opzionale, bisogna procedere con il prossimo comando.
\item[Dambiente] si comporta come il comando precedente ma compone due argomenti facoltativi, di cui il secondo rappresenta il valore di default del primo argomento che si può passare al comando di apertura; per esempio:
\begin{flushleft}
\Dambiente{ambiente}{N-arg}{default}
\end{flushleft}
\item[Bambiente] serve per comporre il comando di apertura di un ambiente specifico in carattere teletype; per esempio:\\ \Bambiente{equation}.
\item[Eambiente] {\sloppy similmente serve per scrivere il comando di chiusura di un ambiente specifico; per esempio: \Eambiente{equation}.\par}
\item[Arg] e \cs{Marg} sono equivalenti; servono per comporre in carattere teletype un argomento specifico racchiuso fra le sue parentesi graffe; per esempio: \Marg{Titolo di questo documento}.
\item[Oarg] simile a \cs{Marg} ma si riferisce agli argomenti facoltativi: \Oarg{twoside}.
%
\item[GetFileInfo] {\sloppy richiede un argomento costituito dal nome di un file completo di estensione; se il file è dotato del comando \cs{ProvidesFile}, oppure \cs{ProvidesClass} oppure \cs{ProvidesPackage}, allora questo comando estrae le informazioni che attribuisce alle macro \cs{filename}, \cs{filedate} e \cs{fileversion} così da poterle usare per altri scopi, per esempio con il prossimo comando. Il file di cui estrarre le informazioni deve essere già stato caricato; per esempiio: il file principale con cui è composto questa guida si chiama \file{guidatematica-doc.tex} e questo nome passato come argomento a \cs{GetFileInfo}\GetFileInfo{guidatematica-doc.tex} produce le tre informazioni: \cs{filename} = \filename; \cs{filedate} = \filedate; e \cs{fileversion} = \fileversion. Ma il comando \cs{documentclass} carica la classe \class{guidatematica}, perciò il comando \comando\GetFileInfo\texttt{\{gui\-datematica.cls\}}\GetFileInfo{guidatematica.cls} produce le tre informazioni: \cs{filename} = \filename; \cs{filedate} = \filedate; e \cs{fileversion} = \fileversion.
\par}
%
\item[setcopymark] compone il suo argomento ruotato di 90° nella parte bassa del margine esterno; serve per indicare il tipo di bozza che si è appena composta, oppure qualunque altra informazione che si desidera ripetere ad ogni pagina; di per sé il comando non prevede nessun testo predefinito; quindi sta all'autore usare un argomento adatto per avere le informazioni che gli servono; qui, per esempio, dopo aver eseguito il precedente comando \cs{GetFileInfo} in questa maniera:\GetFileInfo{guidatematica-doc.tex}%
\setcopymark{\textcolor{blue!50!white}{\filestyle{\filename}, \fileversion, del \filedate}}\afterpage{\expandafter\gdef\csname @copymark\endcsname{}}
\begin{Verbatim}
\GetFileInfo{guidatematica-doc.tex}
\end{Verbatim}
\phantomsection\label{page:copymark}\relax si usa (solo per questa pagina) il seguente argomento:
\begin{Verbatim}
\setcopymark{%
\textcolor{blue!50!white}{%
\filestyle{\filename},
\fileversion,
del \filedate}}
\end{Verbatim}
È ovvio, però, che questo genere di informazioni dovrebbe apparire su tutte le pagine di una bozza e dovrebbe venire cancellato solo per la versione definitiva.
%
\item[licenza]permette di comporre una diversa dichiarazione a cui la guida tematica può essere soggetta. Per impostazione predefinita la licenza a cui dovrebbero essere sottoposte tutte le guide tematiche è la LPPL (\LaTeX\ Project Public Licence), quella a cui sono soggetti quasi tutti i programmi e i file del sistema \TeX; tuttavia in certe circostanze potrebbe essere necessario specificare una licenza diversa. Per esempio i file che contengono i pattern di sillabazione sono soggetti ad altre licenze, perché vengono usati anche da altri software più o meno liberi che hanno adottato l'approccio del sistema \TeX\ per gestire la sillabazione. Tolti questi casi particolari, gli altri software del sistema \TeX\ sono generalmente soggetti alla LPPL. Nel caso delle guide tematiche del \GuIT\ potrebbero essere coinvolti anche programmi esterni a quelli del sistema \TeX; in qualche guida tematica potrebbe essere quindi necessario specificare una licenza che permetta l'uso di quel software. Il comando \cs{licenza} permette di definire una dichiarazione di licenza che va a sostituire, nel retro del frontespizio, la dichiarazione relativa alla LPPS. La sintassi è semplicissima:
\begin{sintassi}
\cs{licenza}\marg{dichiarazione relativa alla nuova licenza}
\end{sintassi}
dove l'argomento potrebbe contenere anche alcuni (brevi) capoversi e, per esempio, una serie di piccole icone come quelle predisposte dalla Creative Commons.
Attenzione: se l'autore di una guida tematica è “tenuto” ad usare una licenza diversa dalla LPPL, deve usare questo comando \cs{licenza}, ma lo deve usare \emph{prima} di generare la pagina del titolo mediante il comando \cs{maketitle}. Se invece l'autore deve comporre un'intera pagina per queste informazioni legali, allora deve prima inibire la produzione della dichiarazione relativa alla LPPL; la via più semplice e intuitiva consiste nello specificare \verb|\licenza{}| perché in questo modo l'argomento di \cs{licenza} è vuoto, e il test per verificarne il contenuto evita di scrivere alcunché in calce al retrofrontespizio.
\end{compactdescription}%
I comandi seguenti definiscono lo stile di scrittura di determinate entità e per scriverle in quello stile; non mettono niente, eventualmente, negli indici analitici. Sarebbe opportuno non ridefinire questi comandi, perché sarebbe desiderabile che in tutte le guide tematiche i nomi delle classi venissero sempre composti in un dato carattere, i nomi dei pacchetti in un altro dato carattere, eccetera, altrimenti i lettori ne resterebbero confusi.%\thispagestyle{headingslayout}
\begin{compactdescription}[before={\renewcommand\makelabel[1]{\cs{##1}}}]
\item[ambstyle] serve per comporre il nome di un ambiente in carattere lineare inclinato; per esempio: \ambstyle{description}.
\item[classstyle] serve per comporre il nome di una classe in carattere teletype proporzionale inclinato; per esempio: \classstyle{guidatematica}.
\item[filestyle] serve per comporre il nome di un file in carattere teletype monospaziato diritto; per esempio: \filestyle{t1enc.def}.
\item[packstyle] serve per comporre il nome di un pacchetto in carattere teletype proporzionale corsivo; per esempio: \packstyle{microtype}.
\item[progstyle] serve per comporre il nome di un programma in carattere lineare diritto; per esempio: \progstyle{pdfLaTeX}.
\item[opzstyle] serve per comporre il nome di un'opzione in carattere graziato corsivo; per esempio: \opzstyle{landscape}.
\item[contastyle] serve per comporre il nome di un contatore in carattere teletype monospaziato diritto; per esempio: \contastyle{page}.
\item[stilestyle] serve per comporre il nome dello stile di pagina in carattere teletype monospaziato diritto; per esempio: \stilestyle{headings}.
\item[numeristyle] serve per comporre il tipo di numerazione in carattere teletype monospaziato diritto; per esempio: \numeristyle{arabic}.
\item[umisurastyle] serve per comporre il nome di una unità di misura del sistema \TeX\ in carattere teletype monospaziato diritto; per esempio: \umisurastyle{pt}.
\item[chiavestyle] serve per comporre le varie chiavi che \LaTeX\ usa nelle scritture del tipo “\meta{chiave} = \meta{valore}” in carattere teletype monospaziato diritto; per esempio: \chiavestyle{angle}.
\item[descrittorestyle] serve per comporre i descrittori delle colonne delle tabelle e delle matrici in carattere teletype monospaziato diritto; per esempio: \descrittorestyle{p}.
\item[posizionestyle] serve per comporre i simboli di posizione degli oggetti flottanti in carattere teletype monospaziato diritto; per esempio \posizionestyle{h}.
\item[allineamentostyle] serve per comporre i simboli dell'allineamento verticale di tabelle, matrici, ambienti \amb{minipage}, e simili in carattere teletype monospaziato diritto; per esempio: \allineamentostyle{c}.
\end{compactdescription}
Va detto che l'uso di questi comandi non è necessario quando non si compongono gli indici analitici per i quali sono funzionali nel senso di comporre la parola nel testo e nell'indice usando lo stesso stile; potrebbe essere necessario usarli nei comandi di sezionamento quando si vuole evitare che i collegamenti ipertestuali generati da \pack{hypertext} (non precaricato nella classe, ma da richiedere espressamente da parte dell'autore) non abbiano da “singhiozzare” perché certi comandi non sono accettabili nei testi che possono costituire dei bookmark. In questo caso si dovrebbe procedere usando il comando \cs{texorpdfstring} in questo modo:
\begin{Verbatim}
\subsection{L'uso della chiave %
\texorpdfstring{\chiavestyle}{}{angle}}
\end{Verbatim}
I comandi seguenti fanno uso dei comandi precedenti e, se è richiesta la composizione degli indici analitici, provvedono a inviare ai debiti file di indicizzazione l'informazione corretta anche quando si tratta di termini da raggruppare sotto una voce principale. Perciò questi comandi sono quasi del tutto equivalenti ai precedenti comandi se \emph{non} è stato specificato il comando \cs{makeindex} nel preambolo, perché solo questo comando rende attivo ed efficace il comando \cs{index}.
%\begin{compactdescription}[before={\renewcommand\makelabel[1]{\cs{##1}}}]
\begin{compactdescription}[format=\cs]
\item[{opz}] compone il suo argomento nello stile delle opzioni e lo invia all'indice analitico principale sotto la voce “opzione”.
\item[{conta}] compone il suo argomento nello stile dei contatori e lo invia all'indice analitico principale sotto la voce “contatore”.
\item[{stile}] compone il suo argomento come lo stile delle pagine e lo invia all'indice analitico principale sotto la voce “stile della pagina”.
\item[{numeri}] compone il suo argomento nello stile delle numerazioni e lo invia all'indice analizzo principale sotto la voce “numerazione”.
\item[{umisura}] compone il suo argomento nello stile delle unità di misura e lo invia all'indice analitico principale sotto la voce “unità di misura”.
\item[{chiave}] compone il suo argomento nello stile delle chiavi e lo invia all'indice analitico principale sotto la voce “chiave”.
\item[{descrittore}] compone il suo argomento nello stile dei descrittori di colonna e lo invia all'indice analitico principale sotto la voce “descrittore di colonna”.
\item[{posizione}] compone il suo argomento nello stile della posizione degli oggetti flottanti e lo invia all'indice analitico principale sotto la voce “Posizione degli oggetti flottanti”.
\item[{allineamento}] compone il suo argomento nello stile dei codici di allineamento e lo invia all'indice analitico principale sotto la voce “codice di allineamento”.
\item[{amb}] compone il suo argomento nello stile degli ambienti e lo invia all'indice analitico principale sotto la voce “ambiente”.
\item[{class}] compone il suo argomento nello stile delle classi e lo invia all'indice analitico principale sotto la voce “classe”.
\item[{file}] compone il suo argomento nello stile dei file e lo invia all'indice analitico principale sotto la voce “file”.
\item[{pack}] compone il suo argomento nello stile dei pacchetti e lo invia all'indice analitico principale sotto la voce “pacchetto”.
\item[{prog}] compone il suo argomento nello stile dei programmi e lo invia all'indice analitico principale sotto la voce “programma”.
\end{compactdescription}
\newpage
\section{Nuovi ambienti}
Grazie al pacchetto \pack{enumitem} si sono fortemente estese le possibilità di personalizzare le liste rispetto a quanto si può fare con i comandi di personalizzazione di \class{memoir}. I suoi ambienti standard \ambstyle{descriptioon} e \ambstyle{block\-descritption}, sono stati modificati per avere la loro etichetta composta in maiuscoletto; inoltre sono state definite altre liste che si descrivono qui di seguito.
Si noti che per le liste descrittive si può cambiare a piacere il modo di scrivere l'oggetto da descrivere, e questo torna molto utile in una classe come \class{guidatematica}, dove vengono descritti spesso oggetti della stessa “categoria”, che spesso debbono essere composti in uno stile particolare oppure devono venire inviati all'indice analitico. Si veda poco oltre alcuni esempi di questi usi che ricorrono alla comoda sintassi del pacchetto \pack{enumitem}, basata su espressioni del tipo \meta{chiave} = \meta{valore}.
\begin{blockdescription}[before={\renewcommand\blockdescriptionlabel[1]{\normalfont\scshape##1\index{ambiente!##1@\ambstyle{##1}}}\tolerance=3000}]
\item[description] non differisce dall'omonimo ambiente del nucleo di \LaTeX\ e della classe \class{book}; come è stato ridefinito qui, ha l'oggetto da descrivere composto in maiuscoletto.
\item[blockdescription] è costituito da questa particolare descrizione più compatta orizzontalmente di quella tradizionale di \LaTeX, ma altrettanto aperta verticalmente, con le etichette non sporgenti a sinistra e senza margine di lista rientrato. Anche in questo ambiente l'oggetto da descrivere è composto in maiuscoletto.
\item[compactitemize] produce la solita lista puntata in modo compatto verticalmente, come si è fatto sempre in questa guida. Infatti, tranne in questo particolare ambiente per comporre questa descrizione dei nuovi ambienti, si può notare che gli spazi verticali sono stati eliminati da tutte le liste, e si è lasciato solamente uno spazio di un quarto di riga prima dell'inizio e dopo la fine di tutte le liste.
\item[compactenumerate] produce una lista numerata verticalmente compatta; differisce da \amb{compactitemize} solo per il modo di scrivere l'etichetta di ogni voce.
\item[compactdescription] produce una lista descrittiva verticalmente compatta. Si è ritenuto che questo ambiente fosse quello più indicato per descrivere i nuovi comandi introdotti in questa classe e per crearne le corrispondenti voci nell'indice analitico. Lo si è fatto nel modo descritto qui di seguito.
\item[plaindescription] differisce dall'ambiente \amb{description} solo perché il modo di scrivere l'etichetta è impostato a \cs{normalfont}; questo ambiente si presta particolarmente bene per usare stili diversi per le varie etichette degli oggetti da descrivere.
\end{blockdescription}
\begin{compactenumerate}
\item Questo ambiente \amb{plaindescription} o l'ambiente \amb{compactdescription} (come d'altronde si può fare con qualunque altro ambiente gestito con il pacchetto \pack{enumitem}) sono particolarmente adatti per i tipi di ambiente che descrivono comandi o altre cose simili di un linguaggio di programmazione, di una classe, di un pacchetto, perché con il comando di apertura è semplice specificare come argomento facoltativo il modo di comporre l'etichetta dell'oggetto da descrivere; per esempio, se si volessero descrivere un certo numero di file, varrebbe la pena descriverli tutti con lo stile per comporre i nomi dei file; basta allora fare così:
\begin{verbatim}
\begin{[plaindescription}%
[format=\ttfamily]
\end{verbatim}
usando nella descrizione del formato solo delle dichiarazioni\footnote{Nella documentazione di \pack{enumitem} c'è scritto che l'ultimo comando che specifica la chiave \chiave{format}, o il suo sinonimo \chiave{font}, può accettare un argomento; quindi lascerebbe intendere che l'ultima sequenza di controllo potrebbe essere un comando, invece che una dichiarazione. Non spiega però come fare. Si fa così: basta racchiudere fra graffe il contenuto delle quadre che contengono l'oggetto da descrivere. Questo modo di procedere può essere fonte di dimenticanze (bisogna scrivere \comando{\item}\texttt{[\{\meta{voce}\}]} invece che semplicemente \cs{item}\oarg{voce}, quindi è facile dimenticare il paio di graffe interne). Per quanto sia possibile seguire questa strada forse è preferibile seguirne un'altra descritta poco oltre.}; quali dichiarazioni? Quelle usate per definire \cs{filestyle}. Per la verità la definizione di \cs{filestyle} contiene una dichiarazione e un comando perché deve venire usata anche nelle specificazioni dell'oggetto da indicizzare, ma non è difficile aprire il file \file{guidatematica.cls}, cercare la definizione di \cs{filestyle} e ricavare da lì le dichiarazioni da usare.
Ci sono sostanzialmente due modi per sfruttare questi ambienti: il primo consiste nell'usare \amb{plaindescription} e scrivere ogni voce della lista nella forma, per esempio:
\begin{flushleft}
\cs{item}\texttt{[\normalfont\cs{file}\marg{file}]}
\end{flushleft}
Il secondo modo consiste nell'usare l'argomento facoltativo del comando di apertura specificando con la sintassi \meta{chiave} = \meta{valore} le opzioni compositive dell'etichetta dell'oggetto da descrivere.
Il vantaggio di seguire questa strada è che dopo aver specificato il \meta{valore} della chiave \chiave{format}, in tutta la lista si userà la normale sintassi \cs{item}\oarg{file} per avere tutti i nomi dei file, che iniziano ogni voce della descrizione, composti tutti con lo stesso carattere in modo omogeneo con qualunque altra istanza dello stesso nome di file in qualunque altro punto del documento.
\item {\sloppy In particolare, se si volessero descrivere delle entità particolari da raggruppare nell'indice analitico sotto una stessa voce si potrebbe invocare questo ambiente con il comando:
\begin{verbatim}
\begin{compactdescription}[before=%
{\let\makelabel\indicizzafile}]
\end{verbatim}
dopo aver definito in questo modo il comando \cs{indicizzafile}:\par}
\begin{verbatim}
\DeclareRobustCommand
\indicizzafile[1]{\file{#1}}
\end{verbatim}
oppure si potrebbe agire direttamente\footnote{La chiave \chiave{before} mette il suo argomento in testa all'elenco di comandi che \LaTeX, internamente, esegue per impostare una lista. Il doppio “cancelletto” \texttt{\#\#} prima del numero dell'argomento è necessario quando si sta definendo una macro con argomento all'interno di un'altra macro.}:
\begin{verbatim}
\begin{compactdescription}[before={%
\renewcommand\makelabel[1]{%
\file{##1}}}]
\end{verbatim}
in modo che con l'una o l'altra definizione si potrebbe scrivere:
\begin{verbatim}
... i file di servizio sono:
\begin{compactdescription}[before=%
{...}]
\item[fleqn.clo] serve per comporre
le equazioni ad una distanza fissa
dal margine sinistro della pagina
invece che centrate.
\item[leqno.clo] serve per scrivere
il numero di ogni equazione
numerabile a sinistra invece che
a destra.
...
\end{verbatim}
\end{compactenumerate}
Naturalmente l'autore, se vuole, può definire altre varianti dell'ambiente di descrizione sfruttando i comandi del pacchetto \pack{enumitem} predisposti a questo scopo.
Sono stati ridefiniti anche gli ambienti \amb{thebibliography} e \amb{theindex}, in modo che compaiano anche nell'indice generale; l'ambiente \amb{theindex} è reso compatibile con il pacchetto \pack{imakeidx} in modo da poterne sfruttare tutte le funzionalità. Probabilmente non era necessario ridefinirlo, ma non disturba averlo fatto.
Per la bibliografia si usa lo stile predefinito \file{guidatematica.bst}, del tipo autore-anno e adattato alla lingua italiana; se si vuole usare \pack{biblatex} o un altro stile, è possibile farlo anche con la presenza di questa impostazione. Per le citazioni l'autore può usare tutte le forme del comando \cs{cite} e delle sue varianti messe a disposizione dal pacchetto \pack{natbib}. Se l'autore decide di usare \pack{biblatex} troverà comodo specificare l'apposita opzione per rendere \pack{biblatex} compatibile con i suddetti comandi di \pack{natbib}.
Molto importante per una guida di questo genere è l'ambiente \amb{sintassi} predisposto per specificare la sintassi dei comandi dentro un ambiente sbandierato con l'allineamento a sinistra; di per sé questo ambiente definisce l'ambiente \amb{flushleft} e una cornice dentro la quale specificare la sintassi che si desidera descrivere; di solito si tratta di una riga soltanto, ma se dovesse richiedere più righe allora l'autore sarebbe facilitato se in apertura dell'ambiente specificasse il comando \cs{obeylines} che trasforma ogni fine riga in un “a capo” esplicito. Per esempio si può descrivere l'impostazione di un documento con la sintassi seguente:
\ifdim\dimexpr\pagegoal-\pagetotal<6\onelineskip\newpage\fi
\begin{sintassi}\obeylines
\cs{documenclass}\oarg{opzioni}\marg{classe}
\meta{preambolo}
\Bambiente{document}
\meta{corpo del documento}
\Eambiente{document}
\end{sintassi}
con i comandi:
\begin{verbatim}
\begin{sintassi}\obeylines
\cs{documenclass}\oarg{opzioni}%
\marg{classe}
\meta{preambolo}
\Bambiente{document}
\meta{corpo del documento}
\Eambiente{document}
\end{sintassi}
\end{verbatim}
Inoltre la classe \class{memoir} non definisce l'ambiente \amb{titlepage} per una esplicita scelta del suo autore. Nel nostro caso, invece si vuole che la pagina del titolo sia composta in modo uniforme per tutte le guide tematiche del \GuIT.
Per questo scopo l'autore non deve usare esplicitamente questo ambiente; basta che usi il comando \cs{maketitle}, che a sua volta imposta l'ambiente. L'autore deve limitarsi a specificare nel preambolo i soliti comandi arricchiti dall'ulteriore comando \cs{subtitle}, il cui uso è evidentemente facoltativo:
\begin{sintassi}\obeylines
\cs{author}\marg{un solo nome di autore o una lista di nomi separati da virgole}
\cs{title}\marg{Titolo della guida}
\cs{subtitle}\marg{eventuale sottotitolo}
\cs{date}\marg{data o altra informazione}
\end{sintassi}
Se \cs{date} non viene specificato, viene inserita la data del giorno; se viene specificata con un argomento nullo, non viene inserito nulla nella pagina del titolo; altrimenti si può specificare quello che si vuole, purché sia una breve locuzione visto che viene scritta nel piedino. Potrebbe essere utile usare il comando \cs{GetFileInfo} e inserire in \cs{date} il nome, la data e la versione contenute nelle rispettive macro.
L'intero blocco dei dati nella pagina del titolo viene centrato orizzontalmente nella pagina e il logo tondo del \GuIT\ viene inserito automaticamente; si tratta di una variante del “timbro” del \GuIT\ predisposta in modo che la scritta attorno al logo centrale non abbia mai le lettere capovolte.
\section{La virgola intelligente}
Come è noto, i numeri fratti vanno scritti con la virgola nella funzione di separatore decimale in tutte le lingue tranne che in inglese e nelle sue varietà. Certo è possibile usare il pacchetto \pack{siunitx} impostandone le opzioni per usare sempre la virgola e per separare la parte intera e la parte fratta in gruppi di tre cifre collegate da uno spazio fine non separabile (quando le cifre sono più di quattro) usando il suo comando \cs{num}.
Tuttavia questa classe contiene una definizione della virgola come segno \emph{da usare in matematica} in modo che capisca da solo, dal contesto in cui si trova, se funziona da separatore decimale oppure da segno di interpunzione. Si noti che dalla versione 1.3 del file di descrizione della lingua italiana per \pack{babel}, la definizione della virgola intelligente è già contenuta in quel file; ci pensa la classe a farlo, anche se per attivare questa funzionalità bisogna specificare il comando \cs{IntelligentComma}; per disabilitarlo bisogna usare il comando \cs{NoIntelligentComma}.
Quando, invece, si usa \pack{polyglossia}, il corrispondente file di descrizione dell'italiano non contiene nessuna definizione per la virgola intelligente, quindi per questa classe \class{guidatematica} viene definita una macro che funziona anche con \XeLaTeX e \LuaLaTeX, e rimane sempre attiva sempre e soltanto metre si compone della matematica.
Il fatto che in italiano la virgola matematica svolga due funzioni diverse non è tanto per quel che riguarda i numeri, quanto per le liste di oggetti matematici che compaiono frequentemente quando si scrive tecnico. Queste vanno dall'elenco delle variabili in una funzione (per esempio: $f(x,y,z)$), ad un elenco di funzioni (per esempio: “le funzioni $Gx),H(x),\mbox{ e }H(x)$ sono legate da~\dots”); da una lista di numeri (per esempio: “per ogni $i=1, 2, 3,\dots$”), agli elementi di un insieme (per esempio: “$\mathbb{Z}_N= 0, 1, 2, 3,\dots,N$”). Gli esempi forniti non rappresentano una casistica completa, ma sono indicativi del problema.
Anche se la filosofia dell'uso del mark-up di \LaTeX\ è quella di sollevare il compositore dall'occuparsi della forma, ma di concentrarsi sul contenuto, scrivendo espressioni matematiche è sufficientemente impegnativo occuparsi della moltitudine di simboli diversi e, se si riesce a sollevare il compositore dall'occuparsi della doppia funzione della virgola, tanto di guadagnato.
{\sloppy La macro della virgola intelligente, dunque, usa la virgola decimale se e solo se è seguita da una cifra \emph{senza spazi interposti}, e usa la virgola interpuntiva nelle liste. L'unico caso in cui bisogna stare attenti ad inserire uno spazio dopo la virgola (nel file sorgente) è quando si usa una elencazione di numeri, come per esempio in \verb*|\forall\ i=1, 2, 3,\dots,\infty| che produce correttamente $\forall\ i=1, 2, 3,\dots,\infty$; in questo caso, infatti, il contesto non è abbastanza significativo per l’\,“\hz intelligenza” della virgola al fine di decidere quale tipo di funzione essa svolga fra due cifre, se non ci fosse lo spazio interposto. Tralasciando gli spazi tra la virgola e la cifra che la segue si otterrebbe invece {\NoIntelligentComma$\forall\ i=1,2,3,\dots,\infty$}, che ha le spaziature evidentemente errate. Se ciò che segue la virgola non è una cifra, la definizione della virgola inserisce una virgola interpuntiva, come succede quando essa è seguita dalle sequenze di controllo \verb|\dots| e \verb|\infty|. Gli spazi dopo la virgola vanno espressamente inseriti anche dopo liste si simboli o operatori ottenuti semplicemente con i simboli della tastiera: $+, -, /, *, !$, eccetera.\par}
Forse è opportuno spiegare perché qui si usi la locuzione “sequenza di controllo” invece della parola “macro” o di altre espressioni più comuni: una sequenza di controllo è in generale un \emph{token complesso}, cioè un token il cui nome è formato da una o più lettere o simboli ed è preceduto dal carattere di escape, generalmente, ma non obbligatoriamente, rappresentato dal segno \texttt{\char92}\,; potrebbe andare bene qualunque altro carattere che abbia codice di categoria pari a zero. Una sequenza di controllo può essere: $(a)$ indefinita, se non le è mai stato assegnato un significato; $(b)$ una macro se le è stato assegnato un significato mediante il comando primitivo \cs{def} o un comando equivalente; $(c)$ qualcosa che può avere caratteristiche diverse da quelle di una macro se le è stato attribuito un significato mediante il comando primitivo \cs{let} o un comando equivalente. In quest'ultimo caso la sequenza di controllo, anche se ha tutto l'aspetto di una macro, può non essere affatto una macro: se per esempio mediante \cs{let} si rende \comando{\miocomando} equivalente a \comando{\newcommand}, \comando{\miocomando} diventa un sinonimo di \comando{\newcommand} e rappresenta quindi una macro; invece, se mediante \cs{let} si rende \comando{\miaA} equivalente ad \texttt{A}, \comando{\miaA} diventa un sinonimo di \texttt{A}, quindi rappresenta una lettera, non una macro; infatti in questo caso si dice che la sequenza di controllo è un \emph{carattere implicito}.
Queste sono le situazioni delicate che talvolta rendono difficile la programmazione perché è facile confondersi; le spiegazioni diventano difficili perché la lingua italiana sembra poco flessibile per descrivere questo genere di cose. In relazione a quanto si diceva poco sopra, \cs{dots} è una macro; invece \cs{infty} ha le caratteristiche di una macro con pdf\/\LaTeX, ma quelle di un carattere implicito con \XeLaTeX; perciò la macro della virgola intelligente di questa classe deve saper distinguere le due situazioni sulla base del nome della sequenza di controllo, non solamente sul suo significato.
\iffalse
\begin{align*}
a, &\quad b, \\
3, &\quad 4,
\end{align*}
\fi
\chapter{Gli indici analitici}\label{cap:indiceA}
Non è assolutamente necessario inserire uno o più indici analitici in ogni guida tematica; dipende dall'argomento e dalla complessità di questi indici.
Di solito un solo indice analitico è sufficiente a meno che non si tratti di un indice di parecchie decine di pagine; in questo caso sarebbe forse meglio suddividere l'unico grosso indice analitico in indici parziali suddivisi per argomenti.
Questa classe viene distribuita con due file di stile per l'indice analitico: \file{guidatematica.ist} e \file{guidatematicafiles.ist}; entrambi gli stili dividono il loro contenuto in “sezioni" marcate con la lettera iniziale del gruppo di voci. Ma quando l'iniziale non è una lettera, le voci vengono raccolte sotto la definizione di “Simboli”; se l'iniziale fosse una cifra, sarebbe raccolti in una sezione intitolata “Numeri”.
Ma se si facesse un indice analitico contenente solo nomi di file e delle loro estensioni (che cominciano con un punto) non sarebbe conveniente raccogliere le estensioni sotto una intestazione “Simboli”, ma è meglio raccoglierle sotto l'intestazione “Estensioni”; questo è quello che fa lo stile definito da \file{guidatematicafiles.ist}.
Per questo motivo in questa guida l'unico indice analitico è configurato con il seguente comando che usa la sintassi del pacchetto \pack{imakeidx}:
\begin{verbatim}
\makeindex[options=%
{-s guidatematica.ist},intoc]
\end{verbatim}
Come si vede, l'argomento di \texttt{options} contiene la specificazione di usare lo stile \file{guidatematica.ist}, in modo che quando \prog{pdfLaTeX} o \prog{XeLaTeX} invia al sistema operativo il comando di eseguire \prog{makeindex} gli passa anche questa opzione.
In questo indice analitico unico i file sono tutti elencati sotto la voce “file" quindi anche le estensioni stanno bene raggruppate sotto questa voce.
La definizione preimpostata nella classe è infatti:
\begin{Verbatim}
\DeclareRobustCommand*\file[1]{%
\filestyle{#1}%
\index{file!#1@\filestyle{#1}}}
\end{Verbatim}
Ma se si volesse predisporre un indice dei file usati separato dall'indice analitico generico, allora bisognerebbe specificare:
\begin{verbatim}
\makeindex[name=files, options=%
{-s guidatematicafiles.ist},intoc,
title=Indice dei file]
\end{verbatim}
e i nomi dei file o delle loro estensioni andrebbero specificati con il comando:
\begin{sintassi}
\cs{index}\texttm{[files]}\marg{nome o estensione di un file}
\end{sintassi}
quindi il comando \cs{file} andrebbe ridefinito così:
\begin{verbatim}
\DeclareRobustCommand*\file[1]{%
\filestyle{#1}%
\index[file]{#1@\filestyle{#1}}}
\end{verbatim}
Si noti che il comando \cs{DeclareRobustCommand} provvede a dichiarare il suo argomento come “robusto”; se il comando è già definito, si limita a mettere un avviso nel file \file{.log} e non produce un errore come fanno invece i comandi \cs{newcommand} o \cs{renewcommand}.
Alcuni utenti considerano molto utile avere l'indicazione delle voci inviate all'indice segnate nel margine della pagina dove la voce da indicizzare è riportata. Può essere utile per togliere i comandi “indicizzanti” dai luoghi dove una certa parola o una certa locuzione è usata, ma non si trova in una posizione importante all'interno del testo; in una posizione, cioè, nella quale si dica qualcosa di importante a proposito della parola o della locuzione. L'autore allora, con l'aiuto di queste indicazioni a margine può facilmente ritrovare le voci indicizzate e analizzare criticamente se quella voce vada riportata nell'indice con riferimento a quella specifica pagina, oppure se non sia importante e possa quindi essere omessa.
Per fare questo esisterebbe il pacchetto \pack{showidx}, ma si raccomanda di non usarlo, perché la classe \class{memoir} ne provvede le funzionalità, anzi le provvede meglio, nel senso che si possono attivare e disattivare diverse volte lungo il documento. Il comando per attivare questa funzionalità è \cs{showindexmarks} e quello per disattivarla è \cs{hideindexmarks}. Il compositore stia bene attento a disattivare tutte le istanze di attivazione quando compone la versione finale del documento.
Il pacchetto \pack{imakeidx} dalla versione 1.2e è reso perfettamente compatibile con la funzionalità della classe \class{memoir} e i due comandi di attivazione e disattivazione continuano a funzionare anche quando si usi questo utilissimo pacchetto.
\chapter{ \progstyle{pdfLaTeX}, \progstyle{XeLaTeX} o \progstyle{LuaLaTeX}?}\label{cap:xelatex}
\markboth{Capitolo \thechapter. \progstyle{pdfLaTeX} o \progstyle{XeLaTeX} o \progstyle{LuaLaTeX}?\hfill\null}{\null\hfill Capitolo \thechapter. \progstyle{pdfLaTeX} o \progstyle{XeLaTeX} o \progstyle{LuaLaTeX}?}
Chiaramente la scelta di uno dei tre programmi dipende esclusivamente dall'autore. Vale la pena di segnalare qui alcune differenze per consentire una scelta consapevole.
\prog{XeLaTeX} e \prog{LuaLaTeX} differiscono da \prog{pdfLaTeX}, sotto alcuni aspetti sostanziali:
\begin{compactdescription}[style=nextline]
\item[I font OpenType] I font OpenType sono usabili solo con \prog{XeLaTeX} e \prog{LuaLaTeX}; veramente sarebbero usabili anche con \prog{pdfLaTeX} ma sarebbe necessario creare ed installare opportuni file virtuali per spezzare le numerose pagine di glifi contenute nei file OpenType, in singole pagine di soli 256 caratteri e bisognerebbe ridefinire molti comandi di \LaTeX\ per accedere ai singoli frammenti di un font OpenType spezzato come detto sopra.
{\sloppy Disponendo di \prog{XeLaTeX} e \prog{LuaLaTeX}\footnote{Con le distribuzioni del sistema \TeX\ successive al 2006 tutte contengono \XeLaTeX\ e quelle successive al 2009 contengono \prog{LuaLaTeX}; questi motori di composizione sono disponibili per tutte le piattaforme di elaborazione Windows, Linux, Mac.}, queste acrobazie con i font si possono evitare facilmente usando, appunto, \prog{XeLaTeX} o \prog{LuaLaTeX}.\par}
\item[Il formato di uscita] Sia \prog{pdfLaTeX} sia \prog{XeLaTeX} sia \prog{LuaLaTeX} producono l'uscita in formato PDF; il primo e il terzo producono quel formato in modo diretto, mentre il secondo passa attraverso una versione estesa e modificata del formato DVI e provvede ad eseguire la conversione in formato PDF mediante il programma esteso \prog{xdvipdfmx}; siccome il formato DVI, seppure esteso, non consente alcune delle funzionalità del formato PDF, la conversione anche se ben fatta, non può introdurre nel file PDF quello che non c'era nel file DVI esteso. Passando, quindi, per \prog{XeLaTeX} si perdono alcune funzionalità; \prog{LuaLaTeX}, invece, consente di conservare tutte le funzionalità associate al formato PDF.
\item[Il formato PDF archiviabile] Non so quanto sia importante per le guide tematiche del \GuIT, ma con \prog{XeLaTeX} non si può produrre il file di uscita in formato PDF compatibile con le norme ISO 19005-1:2005 per l'archiviabilità; oggi poi esiste un aggiornamento della norma, ISO 19005-2:2011, e a maggior ragione il file PDF generato con \prog{XeLaTeX} non è conforme con le norme ISO citate. Tuttavia ricorrendo a \pack{pdfpages} è possibile ottenere la conversione in formato archiviabile in modo corretto; nella sezione di Documentazione del sito del \GuIT\ esistono alcuni testi che descrivono il modo di procedere. Dal 2017 con \prog{LuaLaTeX} è possibile produrre un file PDF conforme alle norme suddette; anzi, la conformità si ottiene più facilmente con \prog{LuaLaTeX} che con \prog{pdfLaTeX}.
\item[La microtipografia] \prog{pdfLaTeX} e \prog{LuaLaTeX} possono sfruttare ogni artificio di microtipografia per comporre le pagine in modo praticamente perfetto; con i font in dotazione, possono comporre sfruttando sia la protrusione di certi segni completamente o parzialmente nei margini destro e sinistro, sia l'espansione dei font, tecnica che permette di espandere o comprimere i caratteri di una riga di quel poco che basta per passare inosservato ma che rende gli spazi nella riga molto più omogenei fra righe adiacenti, cosicché non appaiono i brutti “ruscelli” bianchi che serpeggiano tra le parole attraverso la pagina mal composta.
\prog{XeLaTeX} può usare solo la protrusione dei segni, senza l'espansione dei caratteri. Molte delle raffinatezze che il pacchetto \pack{microtype} permette di fare con i caratteri (per esempio spazieggiare il maiuscoletto o il maiuscolo; definire e usare fattori di spazio diversi per i segni di interpunzione,~\dots) possono essere eseguite anche con oculate impostazioni delle proprietà dei font OpenType, ma il risultato finale della composizione è comunque migliore con l'uso dell'espansione dei caratteri.
\item[I font con i corpi ottici] Il sistema \TeX\ è nato con i font corredati dei corpi ottici; fin dall'inizio esistevano i font Computer Modern a 5, 6, 7, 8, 9, 10, 12, 14,4, \dots\ punti tipografici. Questo significa che al variare del corpo cambia anche un pochino il disegno dei segni in modo che i più piccoli siano ancora leggibili e i più grandi non appaiano troppo neri. I font Computer Modern sono stati via via sostituiti da font in codifiche diverse ma contenenti più segni (da 128 si è passati a 256); oggi quelli più “moderni” sono i font Latin Modern accessibili normalmente da \prog{pdfLaTeX} richiamando il pacchetto \pack{lmodern}, oppure, ancor meglio, il pacchetto \pack{cfr-lm}; questo consente di selezionare sia font di forma e di serie diverse da quelle tradizionali, sia alcune particolarità non accessibili con il pacchetto \pack{lmodern}. Quasi tutti gli altri font accessibili con \prog{pdfLaTeX} sono dotati di un unico corpo e tutti gli altri corpi sono ottenuti per ingrandimento o rimpicciolimento proporzionale; il risultato è che spesso i corpi più piccoli sono quasi illeggibili perché i loro tratti sono diventati troppo sottili, e quelli più grandi di serie media ricordano più la serie nera che la serie media, visto che i tratti dei segni sono diventati troppo spessi rispetto allo spazio occupato da ogni singolo segno.
La situazione non è molto diversa con \prog{XeLaTeX} e \prog{LuaLaTeX}; la maggior parte dei font OpenType disponibili è dotato di un solo corpo. Fanno eccezione, ovviamente, i font OpenType Latin Modern, che consentono quindi di mantenere la massima leggibilità qualunque sia la dimensione dei caratteri. Se vogliamo, la gestione dei font Latin Modern è leggermente migliore sotto alcuni punti di vista rispetto a quella che si può avere con \prog{pdfLaTeX}, ma sotto certi altri aspetti richiede un coinvolgimento maggiore da parte dell'autore. Esistono anche altri pochi font dotati di corpi ottici, e spesso il loro uso non è completamente libero come avviene per i Latin Modern.
Infatti per avere le proprietà dei font Latin Modern in formato Type~1 usabili da \progstyle{pdf\/LaTeX} bastano poche righe di codice per caricarli e usarli:
\begin{compactitemize}
\item nel preambolo basta usare un solo statement con le caratteristiche desiderate; qui si è usato:
\begin{Verbatim}[fontsize=\normalsize]
\RequirePackage[tt={%
oldstyle=false,tabular,
monowidth}]{cfr-lm}
\end{Verbatim}
%
Con questa unica riga si dispone dell'intera collezione con le impostazioni di default, tranne che per il font teletype per il quale non si vogliono le cifre minuscole (old style), ma si vogliono quelle maiuscole adatte alle tabelle, e si vuole la varietà di font monospaziati.
\item in questa classe sono anche già disponibili i comandi \cs{texttv} per selezionare il font teletype proporzionale e \cs{texttm} per usare quello a spaziatura fissa indipendentemente dalle impostazioni specificate fra le opzioni del pacchetto; inoltre il comando \cs{textl} garantisce l'uso delle cifre maiuscole con qualunque famiglia, forma e serie.
\end{compactitemize}
Per avere le stesse funzionalità con \prog{XeLaTeX} e \prog{LuaLaTeX} si sono dovute specificare le famiglie dei font: principale (font proporzionale con grazie e le cifre minuscole); sans serif (font proporzionale sgraziato o lineare, che dir si voglia, con le cifre minuscole); teletype proporzionale con le cifre maiuscole; teletype a spaziatura fissa con le cifre maiuscole; infine il maiuscoletto con le cifre minuscole.
Con queste impostazioni si è però ridefinito il comando \cs{textl} per le cifre maiuscole tenendo conto delle particolarità dei font OpenType, e si sono dovuti definire con \cs{DeclareTextFontCommand} i comandi equivalenti a quelli disponibili con il pacchetto \pack{cfr-lm} usabile solo da \prog{pdfLaTeX}.
\begin{Verbatim}[fontsize={\fontsize{9.5}{11.5}\selectfont}]
\RequirePackage{fontspec}
\setmainfont[Ligatures=TeX,Numbers=OldStyle]{Latin Modern Roman}
\setsansfont[Ligatures=TeX,Numbers=OldStyle]{Latin Modern Sans}
\setmonofont[Numbers=Lining]{Latin Modern Mono}
\newfontfamily{\tvfamily}[Numbers=Lining]{Latin Modern Mono Prop}
\newfontfamily{\scfamily}[Ligatures=TeX,Numbers=OldStyle]{Latin
Modern Roman Caps}
\DeclareRobustCommand\scshape{\scfamily}
\DeclareTextFontCommand{\texttm}{\ttfamily}
\DeclareTextFontCommand{\texttv}{\tvfamily}
\DeclareTextFontCommand{\textsc}{\scfamily}
\def\textl#1{{\addfontfeature{Numbers=Lining}#1}}
\end{Verbatim}
In compenso è stato possibile specificare gli stessi font Latin Modern adatti alla matematica, in modo da sfruttare appieno le potenzialità dei font OpenType matematici; il pacchetto \pack{unicode-math} mette a disposizione tutti i comandi matematici necessari.
\begin{verbatim}
\RequirePackage{unicode-math}
\setmathfont{Latin Modern Math}
\end{verbatim}
\item[Velocità di composizione] I tre programmi di composizione hanno velocità di composizione dello stesso testo molto diverse; il più veloce è \prog{pdfLaTeX}; il più lento è \prog{LuaLaTeX}; nonostante \prog{XeLaTeX} produca un file DVI esteso e poi lo converta automaticamente in PDF, la sua velocità di composizione è intermedia rispetto agli altri due programmi. Il compositore di una guida tematica deve quindi tenere conto anche di questo fatto e scegliere il programma di composizione a ragion veduta. È ovvio che \prog{LuaLaTeX} ha molte funzionalità in più rispetto agli altri due programmi, ma non vale la pena usarlo se non si ha veramente bisogno di quelle ulteriori funzionalità.
\end{compactdescription}
Con tali impostazioni comporre la documentazione con questa classe produce sostanzialmente gli stessi risultati che si usi \prog{pdfLaTeX}, \prog{XeLaTeX} oppure \prog{LuaLaTeX}.
Perché scegliere l'uno o l'altro programma di composizione? Dipende dal contenuto della guida tematica; se occorre fare uso di alfabeti diversi da quello latino (per esempio: greco, cirillico, arabo, eccetera) allora è opportuno, se non obbligatorio, ricorrere \prog{XeLaTeX} o a \prog{LuaLaTeX}, quest'ultimo solo nel caso che sia necessario servirsi delle sue maggiori funzionalità. Altrimenti è preferibile usare \prog{pdfLaTeX}.
Questa guida composta con \prog{XeLaTeX} e con \prog{LuaLaTeX} presenta qualche piccola differenza nelle stesse pagine dovute al fatto che il motore \prog{LuaTeX} sfrutta appieno le funzionalità del pacchetto \pack{microtype}, compresa l'espansione dei font, che \prog{XeLaTeX} non può usare, ma queste differenze non sono tali da giustificare da sole l'uso di \prog{LuaLaTeX}; nello stesso tempo questa particolare guida non ha bisogno delle ulteriori funzionalità di \prog{LuaLaTeX}, anzi, la sua composizione con \prog{pdfLaTeX} è ottima e veloce con differenze trascurabili rispetto al prodotto di \prog{LuaLaTeX}. Questo non vuol dire che con altre guide non sia preferibile agire diversamente. E in effetti la guida tematica \texttt{guidalua} non può essere composta se non con LuaLaTeX.
\backmatter
\renewcommand{\prebibhook}{%
Per concludere si riporta qui una bibliografia che si suppone sia utile per la documentazione non tanto di questa classe, quanto per chi scrive guide tematiche sui vari argomenti che possono interessare i frequentatori del sito del \GuIT.
\begin{center}
*\quad*\quad*
\end{center}}
\nocite{*}
\bibliography{guidatematica}
\printindex
\end{document}