Riccardo Murri
<murri@phc.unipi.it>
Continuiamo la panoramica su come comporre formule con LaTeX: questa volta vediamo come produrre nuovi simboli a partire da quelli noti a LaTeX, e come definire nuovi comandi.
Quasi tutti i comandi presentati qui di seguito richiedono le estensioni matematiche AMS, che si attivano aggiungendo la riga
\usepackage{amsmath}nel preambolo del documento.
L'uso dei diversi stili di caratteri nelle formule serve in genere a produrre varianti grafiche di lettere o simboli, per aumentare il numero di segni disponibili, piuttosto che per marcare la diversa significatività di un brano, come avviene nel testo ordinario; dunque i comandi che andiamo ad esaminare si applicheranno raramente a formule più lunghe di un piccolo gruppo di caratteri.
Abbiamo già visto (cfr. Linux & C. n. 2) come i comandi per
cambiare lo stile dei caratteri abbiano un funzionamento diverso nel
modo matematico: permettono di inserire testo ordinario in una
formula, secondo lo stile indicato. Come si fa allora per inserire
una ``A'' in carattere grassetto in una formula? Si usano comandi
simili, sostituendo però il prefisso \math
al prefisso
\text
: la figura 1 riporta un elenco. Ognuno
di questi comandi accetta un solo argomento: la formula da rendere
nello stile corrispondente.
Figure:
I vari stili disponibili per i caratteri
matematici. Negli ultimi due è possibile produrre solo
lettere maiuscole.
Alcune precauzioni d'uso:
\mathfrak
e \mathbb
sono disponibili solo se si è
caricata l'estensione amsfonts
nel preambolo, con la riga:
\usepackage{amsfonts}
\mathnormal
permette di ritornare
temporaneamente allo stile normale di scrittura matematica, nel
mezzo di una formula composta con un carattere differente.
\mathcal
e \mathbb
selezionano font che hanno
solo le lettere maiuscole;
Tutti i simboli sono disponibili in tutti gli stili? Provate ad
ottenere lettere greche con \mathbf
, \mathsf
o
\mathtt
. Il simbolo ``<'' si può avere in
\mathsf
? Ed in \mathbf
? E il simbolo di
``maggiore-o-uguale''?
Dato che le lettere greche e molti simboli non alfabetici non si
possono ottenere con \mathbf
, LaTeX definisce i comandi
\boldsymbol
e \pmb
per raggiungere questi effetti.
La figura 2 mostra le differenze tra i due ed il normale
carattere matematico.
Figure 2:
Differenze tra il normale carattere matematico, e
le varie specie di grassetto disponibili in LaTeX.
\boldsymbol
accetta un solo argomento, che deve essere una
lettera, una cifra od un comando che produce un simbolo (ad esempio,
\pi
o \cap
), e disegna una versione in grassetto del
simbolo, cifra o lettera indicato.
\pmb
ha la stessa sintassi di \boldsymbol
, ma effetti
grafici lievemente differenti.
TeX utilizza lo stesso sistema per comporre le lettere accentate del
testo ordinario (come à, é, ï) ed i simboli che si usano nella
scrittura matematica per distinguere differenti specie di variabili
(segni di vettore, tilde, ecc.); questi ultimi prendono perciò il
nome di ``accenti matematici'' nel gergo TeXnico.
Figure 3:
I comandi che producono accenti in LaTeX. Gli
ultimi tre accenti sono usati solo nel modo matematico.
La figura 3 riporta i comandi disponibili in LaTeX per produrre accenti (matematici e non). Esistono dunque due tipi di questi comandi, uno da utilizzare solo nel modo matematico per comporre formule, e l'altro da usare solo nel testo ordinario; TeX riporta un errore se usate un comando nel contesto sbagliato.
Tutti i comandi che producono accenti sono implementati in modo da
sovrapporre un segno all'argomento: un po' come se in una macchina da
scrivere battessimo un apostrofo, poi tornassimo indietro e
scrivessimo una ``a'' per ottenere ``á''. Alcune versioni di
xdvi
non gestiscono bene queste sovrapposizioni e non riescono
a mostrare le lettere accentate: è questo il senso del messaggio
``Overstrike characters may look incorrect''; tuttavia, la stampa sarà
sempre corretta.
Questi comandi permettono di scrivere lettere accentate anche in un file di testo contenente solo i caratteri ASCII, o avendo a disposizione una tastiera USA. In genere è però più comodo scrivere le lettere accentate del testo direttamente nel file: per questo basta aggiungere la riga
\usepackage[latin1]{inputenc}al preambolo del documento.
Notate che si possono omettere le parentesi graffe quando l'argomento
di un comando è costituito di una sola lettera: possiamo scrivere
\'e
invece di \'{e}
e \Tilde a
invece di
\Tilde{a}
, ma i due modi sono del tutto equivalenti. Cosa
produce il codice \Tilde{MA}
? Ovvero, cosa si ottiene cercando
di porre un accento sopra un argomento più largo di una
lettera?
Figure:
I comandi per ornare formule più larghe di una lettera.
LaTeX definisce dei comandi speciali per ornare formule più larghe
di una lettera: la figura 4 ne riporta l'elenco completo.
Tutti questi comandi accettano argomenti di lunghezza arbitraria, ad
eccezione di \widehat
e \widetilde
che possono
allargarsi al più su 3 lettere (provare per credere).
I comandi \underbrace
e \overbrace
permettono di
disporre delle scritte sopra o sotto il segno che appongono su una
formula, tramite la consueta notazione degli esponenti e deponenti: un
esponente ^{...}
dopo \overbrace
indicherà il testo da
collocare sopra la parentesi graffa, così come un deponente
_{...}
dopo \underbrace
specifica quello da porre
sotto la parentesi graffa. Esaminiamo gli esempi di
figura 5: siccome \underbrace
e
\overbrace
funzionano solo in modo matematico, sia l'argomento
di questi comandi, che l'eventuale esponente o deponente vengono
interpretati come formule. Nel primo esempio di
figura 5, si usano il comando \text
per
inserire del testo (che a sua volta contiene una formula!).
Figure 5:
Esempi di testo a completare l'ornamento di una formula.
Gli accenti di figura 3 si possono raddoppiare: ad
esempio, \Bar{\Bar A}
(Quiz: perché il secondo accento è tra
parentesi graffe?) produce una lettera ``A'' sormontata da una
doppia riga.
Questa operazione di raddoppiamento è complicata e può rallentare
TeX se eseguita troppo spesso; LaTeX definisce perciò il comando
\accentedsymbol
, che permette di costruire comandi che
producono combinazioni complesse di accenti. \accentedsymbol
accetta due argomenti: il primo è il nome di un comando da definire
(completo di \
) ed il secondo è il codice LaTeX per produrre
il simbolo accentato che vogliamo:
\accentedsymbol{\Ttildetilde}{\Tilde{\Tilde T}}crea il comando
\Ttildetilde
che disegna una ``T'' sormontata
da una doppia tilde. Sono possibili anche combinazioni molto più
orribili. I manuali di LaTeX consigliano di definire nel preambolo
del documento un comando per ogni simbolo accentato di cui ci sarà
bisogno in seguito.
Attenzione! \accentedsymbol
si può usare solo
nel preambolo di un documento; metterlo nel mezzo del testo
provocherà un errore ``Undefined control sequence.''
LaTeX mette a disposizione anche un comando per approssimare i tipi
di accenti non disponibili coi comandi standard; il comando
\overset
accetta due argomenti, il primo dei quali è un simbolo
che verrà collocato sopra il testo indicato nel secondo argomento. Ad
esempio, \overset{*}{X}
scriverà un asterisco sopra la lettera
``X''. Esiste anche un comando \underset
che pone il simbolo
nel primo argomento sotto il testo. Attenzione! I
comandi \overset
e \underset
si possono usare solo nel
modo matematico.
Come si può mettere un accento sopra le lettere ``i'' o ``j''?
Provando, noterete che il puntino sta pressappoco all'altezza
dell'accento, e dà un risultato esteticamente poco piacevole; TeX definisce \imath
e \jmath
da usare in
combinazione con i comandi che producono accenti per ottenere ``i'' e
``j'' correttamente accentate: \Grave\imath
renderà appunto una
lettera ``ì''. Come dice il nome, questi due comandi funzionano
solo nel modo matematico.
Il comando \not
permette di sovrapporre una barra
``'' al simbolo che lo segue; si possono creare così i segni
``diverso-da'', ``non-equivalente'', ecc. in una formula. Sebbene
\not
non sia propriamente un accento, il principio di
funzionamento di questo comando è lo stesso di \Acute
,,
\Bar
, ecc.
Ormai vi sarete accorti che la scrittura in TeX tende a volte ad
essere un po' verbosa, e che le stesse sequenze di comandi ricorrono
più volte nel corso di uno stesso documento; per fortuna e per
comodità, LaTeX permette ai suoi utenti di definire nuovi comandi.
Il comando per fare ciò si chiama, appunto, \newcommand
, ed ha
diverse forme sintattiche.
Il più semplice utilizzo di \newcommand
sta nel definire
abbreviazioni per parti di testo frequentemente ricorrenti; in
questa sua forma più semplice, \newcommand
prende due
argomenti, il primo dei quali è il nome del comando da definire
(completo di \
) ed il secondo è una stringa che dovrà essergli
sostituita; questa stringa si dice ``espansione'' del comando. Ad
esempio,
\newcommand{\gnu}{GNU's Not \textsc{Unix}}definisce un nuovo comando
\gnu
il cui effetto sarà di produrre
il testo ``GNU's Not UNIX''.
Non si possono definire con \newcommand
dei comandi che siano
già definiti; per via dei meccanismi interni di LaTeX, non si possono
definire neanche comandi il cui nome comincia con ``\end
''.
(Per esempio, \endymione
)
Come si vede dall'esempio qui sopra, l'espansione di un comando può contenere altri comandi, ma non il comando che si sta definendo:
\newcommand{\gnu}{\gnu's Not \textsc{Unix}}è una definizione circolare, e provoca un errore ``TeX capacity exceeded''. Il 99% delle volte questi errori sono causati da definizioni circolari, e non da una reale necessità di aumentare la memoria a disposizione di TeX. Attenzione! TeX sostituisce l'espansione di un comando quando lo incontra nel testo, e non al momento della definizione: se quindi definite il comando
\gnu
come sopra, TeX riporterà errore alla prima occorrenza
di questo comando nel documento.
Per via della sintassi usata da TeX per individuare gli argomenti da
passare ai comandi, tutti gli spazi che seguono un comando senza
argomenti sono ignorati. Si può usare il comando \
(barra inversa-spazio) per inserire uno spazio dopo un
comando.
Ancora, si può usare \newcommand
per definire notazioni di uso
comune: ad esempio,
\newcommand{\R}{\mathbb{R}}permette di usare
\R
per produrre il simbolo del campo dei
numeri reali. L'espansione di questo comando contiene \mathbb
che funziona solo nel modo matematico, perciò anche il nuovo
comando \R
funzionerà solo nel modo matematico: dovremo perciò
scrivere:
il campo \( \R \) dei numeri reali,e non
il campo \R \ dei numeri reali.(Perché
\R
è seguito da barra inversa-spazio?)
LaTeX permette di aggirare questa limitazione: il comando
\ensuremath
compila in modo matematico il suo unico argomento,
indipendentemente dal contesto in cui occorre. Adattando l'esempio
precedente,
\newcommand{\R}{\ensuremath{\mathbb{R}}}definisce un comando
\R
che si può usare indifferentemente e
con gli stessi effetti sia in mezzo ad un paragrafo di testo che ad
una formula.
Insomma, i comandi definiti con \newcommand
possono funzionare
sia nel modo di testo (LR mode) che in quello matematico: tutto
dipende dalla loro espansione.
È anche possibile definire nuovi comandi che accettano argomenti (fino
a 9; questo è un limite di TeX), usando una forma alternativa di
\newcommand
:
\
newcommand{comando}[numero
degli argomenti]{espansione}
Se le combinazioni di caratteri #1
, ..., #9
compaiono
nell'espansione, verranno sostituite con il primo, il secondo, ...,
il nono argomento. (Quiz: perché allora non ci possono essere più di
nove argomenti in un comando?)
Un esempio chiarirà meglio le cose:
\newcommand{\lasecondachehaidetto}[2]{\emph{#2}}definisce un comando che stampa il suo secondo argomento enfatizzato ed ignora il primo; più in dettaglio, se inseriamo
\lasecondachehaidetto{perché}{quando}
nel mezzo di un
documento, durante la compilazione del documento accade che:
\emph{#2}
;
#1
e #2
;
#2
e la sostituisce con il secondo argomento
``quando''.
\emph{quando}
nel
documento. Cosa succede se al posto di #2
si scrive #1
?
E se ci mettiamo #3
?
Un esempio più complicato:
\newcommand{\D}[2]{\frac{\partial #2}{\partial #1}}Cosa fa questo comando? Quanti argomenti accetta? Si può usare in modo testo? (cfr. figura 6)
Un'ultima forma di \newcommand
consente di definire un comando
il cui primo argomento è opzionale:
\
newcommand{comando}[numero
degli argomenti][valore del primo
argomento]{espansione}
Il primo argomento dovrà essere posto fra parentesi quadre, altrimenti
il valore indicato nella definizione verrà sostituito a #1
nell'espansione. Non è possibile rendere facoltativi altri argomenti
oltre il primo.
Per esempio, definiamo un comando \H
con un solo argomento
(facoltativo) che produce una lettera ``H'' seguita dal suo primo
argomento in esponente; se il primo argomento non è specificato, dovrà
mettere in esponente un asterisco:
\newcommand{\H}[1][*]{\ensuremath{H^{#1}}}Provate: cosa produce
\(\H(X)\)
? e \(\H[n](X)\)
? e con
\(\H{4}(X)\)
cosa si ottiene? Come estendereste il comando
\D
definito prima per scrivere derivate di ordine superiore?
Non si può usare \newcommand
per definire un comando esistente,
ma occorre usare la variante \renewcommand
; questa ha
esattamente la stessa sintassi di \newcommand
, ma permette di
costruire solo comandi già definiti.
Ad esempio, supponiamo di decidere che vogliamo rappresentare i
vettori in stile grassetto, e non con la consueta freccettina; la via
più breve per farlo è di ridefinire il comando \Vec
in modo che
stampi il suo argomento in grassetto:
\renewcommand{\Vec}[1]{\mathbf{#1}}
Attenzione! TeX sostituisce ad un comando la sua
espansione quando questo comando occorre nel documento, quindi anche
con \renewcommand
bisogna prestare attenzione alle definizioni
circolari:
\renewcommand{\Vec}[1]{\Vec{\boldsymbol{#1}}}non produce un comando che pone una freccettina sopra un simbolo in stile grassetto, ma genera invece un errore: TeX non può distinguere
\Vec
nel secondo argomento da quello nel primo.
Ancora, questo distrugge la vecchia definizione di
\Vec
, e non è più possibile sovrapporre la freccettina ad un
carattere!
Analizziamo meglio questa situazione: \Vec
è un comando la cui
interpretazione è ``metti una freccina sopra il simbolo che segue'', e
non ``il simbolo che segue rappresenta un vettore''; \Vec
fornisce quindi una indicazione tipografica. Viceversa, il
comando \title
fornisce una indicazione sulla categoria
logica del suo argomento:
\title{Il lavoro mi perseguita, ma io sono più veloce}implica che il testo ``Il lavoro mi perseguita, ma io sono più veloce'' è il titolo del documento, quindi deve ricevere un trattamento tipografico particolare (per esempio, sarà stampato in grassetto e con un carattere grande, oppure in maiuscoletto, ecc.); il fatto di aver marcato quel testo come ``titolo'' permette anche ad esempio di riprenderlo nell'intestazione di ogni pagina, cosa che non sarebbe stata possibile se lo avessimo semplicemente indicato a TeX di impaginarlo come ``grassetto 18pt.''
LaTeX non può fornire comandi per marcare la categoria logica di
ogni possibile brano di testo, ma ciascuno può definire i propri
tramite \newcommand
e \renewcommand
: l'espansione
di questi comandi indicherà il trattamento tipografico da riservare a
queste particolari parti di testo.
Il modo consigliato nei manuali di LaTeX per gestire queste situazioni consiste nel definire comandi che indichino la categoria o la funzione logica che un simbolo ha, e usare questi comandi per produrre gli effetti tipografici desiderati.
Un esempio per chiarire meglio: l'accento \Bar
è usato in
matematica per svariate notazioni; se in un documento usiamo questo
comando per indicare due costrutti diversi (``...dal contesto
risulterà chiaro di cosa si sta parlando ...''), saremo in
difficoltà non appena dovremo usarle entrambe in una formula (per la
legge di Murphy, questo capiterà quasi certamente). Se invece
definiamo:
\newcommand{\cl}[1]{\Bar{#1}} % chiusura toplogica \newcommand{\grad}[1]{\Bar{#1}} % parità dell'elemento \newcommand{\ext}[1]{\Bar{#1}} % estensionepotremo scrivere tranquillamente
\cl{A}
, \grad{a}
,
\ext{f}
e cambiare ad esempio
\newcommand{\grad}[1]{|#1|}se dobbiamo applicare sia
\grad
che \ext
ad un elemento;
in questo modo è possibile cambiare consistentemente e facilmente la
notazione in tutto un documento.
Un altro esempio: il corsivo è usato normalmente nel testo per
enfatizzare parole, oppure, invece delle virgolette, per riportare
brevi citazioni o parole straniere. Il comando \emph
ha in
effetti una interpretazione come ``enfatizza il testo in argomento'',
ma non esistono comandi specifici per gli altri due scopi. Potremmo
perciò definire:
\newcommand{\citazione}[1]{\emph{#1}} \newcommand{\parolastraniera}[1]{\emph{#1}}e poi permetterci di cambiare idea e decidere che vogliamo mettere le citazioni tra virgolette; basterà allora cambiare una sola riga del documento:
\newcommand{\citazione}[1]{``#1''}
Figure 6:
Esempi di definizione di nuovi comandi.
Basta ora con le formule matematiche, e vedremo un'altra volta come trattare alcune raffinatezze tipografiche. La prossima puntata, però, tratterà nuovamente di come organizzare un testo comune in LaTeX. Ciao!
This document was generated using the LaTeX2HTML translator Version 98.2 beta6 (August 14th, 1998)
Copyright © 1993, 1994, 1995, 1996,
Nikos Drakos,
Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998,
Ross Moore,
Mathematics Department, Macquarie University, Sydney.
The command line arguments were:
latex2html -white -address Riccardo Murri
The translation was initiated by Riccardo Murri on 1999-11-25