Newsgroup: it.comp.software.tex
Titolo: come funzionano i "comandi" senza  il simbolo "\" di apertura?

forse la domanda e' stupida o banale. Ho provato anche a cercare 
all'interno della root di TeX e LaTeX ma non sono riuscito a trovare 
quello che cerco.
 
Ma mi spiego meglio perche' detta cosi' non si capisce nulla.
 
Un comando latex che non sia un ambiente viene introdotto con il simbolo 
"\" e interpretato quindi come tale.
 
Esistono poi altri tipi di comandi, la cui natura e' pero' diversa, che 
pur privi della "\" che li precede e pur non eseguendo vere e proprie 
operazioni consentono, molto più semplicemente, la stampa di particolari 
caratteri magari non immediatamente disponibili sulla tastiera in uso.
 
E' per esempio il caso delle "n-dash" o "m-dash" "--" e "---" come anche 
quello dei "caporali" "<<" e ">>".
 
Come vengono definite? Se volessi scrivere una cosa del genere da quale 
punto dovrei partire?
 
Grazie per l'attenzione
 
 
-- 
Pandozy vede tutto
     _   _
   O'|,=,/'O
     (0 0)
ooO--(_)--Ooo

 scrive:

In TeX e LaTeX l'unico vero comando non preceduto da "\"
è "~" (bugia, NdR). Le combinazioni come "--" e "---" sono
casi particolari del processo per il quale il gruppo "fi" 
viene reso con un unico carattere (la legatura).
 
Queste combinazioni sono definite da informazioni contenute
nei file .tfm associati ai font in uso, insieme a qualle
relative alle dimensioni dei caratteri.
 
Puoi verificarlo compilando questo piccolo file con pdftex:
 
%=== suppress.tex ===
fi fl ff ffl -- --- !` ?`
 
\pdfnoligatures\font
fi fl ff ffl -- --- !` ?`
\bye
%===
 
Ti accorgerai che la seconda riga non contiene alcuna delle
legature che si trovano nella prima.
 
I programmi di legatura si possono vedere nella versione
umana del file tfm; se esegui
 
tftopl cmr10.tfm > 
cmr10.pl
 
 
troverai, per esempio,
 
(LIGTABLE
   (LABEL O 40)
   (KRN C l R -0.277779)
   (KRN C L R -0.319446)
   (STOP)
   (LABEL C f)
   (LIG C i O 14)
   (LIG C f O 13)
   (LIG C l O 15)
...
 
che dice un po' di cose interessanti: quando il carattere
in posizione '40 = 32 è seguito da una l o una L, viene
inserita una crenatura negativa (nel font cmr10 al posto
'40 c'è la piccola sbarretta che serve a costruire la l
polacca). In seguito c'è qualcosa di più significativo:
se il carattere "f" è seguito da "i", "f" o "l", TeX è
istruito a prendere il carattere in posizione '14, '13
e '15, rispettivamente. Là ci sono le tre legature "fi",
"ff" e "fl".
 
Da dove cominciare, dunque? Da nessuna parte: l'informazione
non è modificabile a livello TeX. Solo con pdfTeX è possibile
eliminare i programmi di legatura dal font attuale (ed è
irreversibile, cioè va avanti per tutto il documento), ma
non definirne di nuovi.
 
A che cosa si riferisce la "bugia" di prima? Vediamo.
Il carattere "~" (ASCII 126) è /attivo/, cioè ha codice
di categoria 13. Un carattere attivo si comporta esattamente
come una macro; infatti in plain.tex si troverà
 
  \catcode`~=13
  \def~{\penalty 10000 \ }
 
(cerca e non troverai, infatti la definizione è data in
modo leggermente più criptico, ma essenzialmente è questa).
Quindi "~" viene sostituito da "\penalty 10000 \ " che è
proprio quello che serve allo scopo per il quale la
definizione è data: la penalità impedisce che venga spezzata
una riga e lo spazio che segue è uno spazio normale "\ ".
 
Ogni carattere può in effetti essere attivato, dando
poi un'opportuna definizione. Ma se attivi "a" non potrai
più usare "a" in un nome di comando (nei nomi di comando
può andare solo /un/ carattere che non abbia categoria
11, oppure una sequenza di caratteri di categoria 11,
che poi sono le normali lettere, almeno nell'impostazione
standard).
 
Dove sta la bugia? Nel fatto che in LaTeX i caratteri
attivi sono molti di più una volta che carichi il
pacchetto inputenc. Supponiamo che tu dica
 
  \usepackage[latin1]{inputenc}
 
Allora il carattere "à" viene attivato e la sua
definizione (letta in latin1.def) è, essenzialmente,
 
  \def à{\`a}
 
La faccenda è molto più complicata con UTF-8, com'è
facilmente prevedibile, e il messaggio che ho
intenzione di scrivere è troppo breve per contenere
tutta la faccenda (la solita vecchia scusa, dirai,
"marginis exiguitas non caperet").
 
Prova a fare qualche esempio più specifico, vediamo
che si può inventare.
 
Ciao
Enrico


quoto tutto perche' voglio conservare il messaggio. Dall'inizio sino 
alla fine.
 
Non credevo fosse cosi' complicato e neppure credevo fosse praticamente 
(almeno per le mie capacita') irrealizzabile.
 
Ho letto i tuoi "Appunti di programmazione in LaTeX e TeX" ma non 
riuscivo a cavarne un ragno dal buco.
 
Per quanto riguarda la cosa che intendevo "curare" o collaudare o 
sperimentare era la mancanza (a meno di non usare un "\:" o un "\,") di 
un spazio di uno spazio che a mio parere non e' affatto sufficiente.
 
Mi riferisco ai periodi inseriti nel corpo del testo e delimitati, a 
destra e a sinistra, da un "n-dash". Per esempio
 
--questo e' un inciso--
 
Ecco, a mio parere lo spazio tra gli "n-dash" e le lettere che 
immediatamente seguono e precedono e' troppo piccolo. Le leneete 
sembrano quasi toccare le lettere.
 
Certo, potrei metter su uno stupidissimo comando che unisce l'n o m-dash 
e uno dei possibili spazi orizzontali gia' esistenti in LaTeX oppure 
rassegnarmi a utilizzarlo cosi' com'e' o, appunto, in unione con qualche 
spazio orizzontale.
 
Comunque caro Enrico, grazie ancora. Ancora una volta la tua e' stata 
un'altra grande lezione. Del resto ho apprezzato con gusto quasi 
paranoico la tua "galleria degli orrori", la tua "babel"(e) che pero' 
non porra' fine a quella geopolitica, i tuoi interventi (come quelli di 
tutti del resto, il mio primo vero libro su latex e' stato quello di 
Claudio Beccari che ancora possiedo e che utilizzavo per compilare con 
PasTeX) sulle guide GuIT.
 
Ma siccome mi considero una sorta di Will Hunting molto piu' sfigato e 
molto piu' impreparato, apprezzo e continuo ad apprezzare anche la tua 
"Algebra".
 
buona notte


 buona notte
 
È ancora presto. :)
 
Ciao
Enrico

 viene reso con un unico carattere (la legatura).
[cut]
 
enrico, ce le hai quadrate. absit iniuria verbis.
 
bye
 
-- 
Infatti cosa e' 1 litro se non 10dl ?