Discussione:
domanda stupidamente tecnica. Anzi due e forse tre
(troppo vecchio per rispondere)
ivan_terzo
2013-12-15 13:55:43 UTC
Permalink
- in che cosa consiste esattamente (vabbe'... più o meno) il processo
di compilazione di LaTeX?
- ammettiamo che per comodità si sia provveduto a definire ulteriori
comandi anche relativamente complessi. Ha senso inglobare
quell'insieme di macro in un <mio_file>.sty anziché richiamarlo nel
documento con un \input? E non dico tanto per averlo a disposizione
in documenti futuri (cosa comunque possibile anche con qualcosa di
diverso da un file *.sty) quanto, invece, per l'efficienza in fase di
compilazione. Richiamare quel <mio_file>.sty con \usepackage è più
efficiente che inglobarlo con un input (in questo caso
<mio_file>.tex)?

E quindi la terza fake_domanda che cortocircuita la prima: a parità di
file (a parte ovviamente l'estensione), il processo di compilazione di
LaTeX tra più giovamento da un \usepackage{<mio_file>} o da un
\input{<mio_file>}?

Come diceva quella: "non so se mi sono stata spiegata". Ma non so
neppure se questi dubbi abbiamo effettivamente un senso.

Sentiti LaTeXuri a tutti.
--
________.________
U ____
K=xxxxXXXX(hh3f)
__)__,
Enrico Gregorio
2013-12-15 20:45:28 UTC
Permalink
Post by ivan_terzo
- in che cosa consiste esattamente (vabbe'... più o meno) il processo
di compilazione di LaTeX?
Ci sono varie fasi; descriverle con dettaglio richiederebbe
un paio di sostanziosi capitoli di un libro.

Fase 1: lettura del file di input

I caratteri vengono trasformati in "token". Un token può essere
"espandibile" oppure "non espandibile". Per esempio "\relax" è
un unico token non espandibile; dopo

\def\macro{replacement}

\macro è un token espandibile. Alcune primitive, come i condizionali,
sono espandibili, altre non lo sono. I semplici caratteri sono
token non espandibili (se non hanno codice di categoria 13, nel
qual caso possono esserlo oppure no, dipende dal significato
assegnato).

Fase 2: espansione

I token espandibili vengono, appunto, espansi. Il token "\macro"
di prima viene sostituito da "replacement". Il processo di espansione
può richiedere la ricerca dei token che formano l'argomento del
comando da espandere. Durante questa ricerca, non si ha alcuna
espansione. Il comando espandibile viene sostituito con la sua
espansione, qualche altro effetto può essere attivato (per esempio
con \noexpand), e TeX ricomincia a vedere se il prossimo token è
espandibile

Fase 3: elaborazione

I token non espandibili vengono inviati più in basso per essere
eseguiti. Per esempio una lettera "A" dirà all'esecutore di comandi
qualcosa come "stampa una A" o, meglio, "il prossimo carattere di
questo capoverso è una A".

In questa fase TeX costruisce "liste" che possono essere verticali
o orizzontali.

Esempio A. In certe situazioni TeX decide che un capoverso è
terminato e quindi ne esegue la divisione in righe, convertendo
la lista orizzontale in una lista verticale che viene concatenata
alla lista verticale che era stata sospesa per elaborare il capoverso.

Esempio B. In certe situazioni TeX decide di trasferire parte della
lista verticale che sta costruendo alla "pagina corrente" e può
decidere di avere abbastanza materiale per costruire una pagina
completa. Perciò sospende l'elaborazione di nuovo materiale,
chiama la routine di output e spedisce la pagina completata
a formare una "pagina fisica" nel file DVI o PDF di uscita.

Occorre notare che tutte queste operazioni si svolgono "insieme".
Quando a TeX servono token (per esempio per argomenti da passare
a un comando), si attiva la fase 1 che prosegue con la fase 2
e con la spedizione di comandi alla fase 3.

Non si deve pensare che il file di input sia letto da cima a
fondo e poi elaborato: sarebbe troppo costoso in termini di
memoria. TeX legge quello che serve per andare avanti; quando
un token è espanso o eseguito, sparisce (almeno così nella
grande generalità dei casi, ma ci sono alcune eccezioni).

Il processo è descritto molto bene in TeX by Topic di
Victor Eijkhout (lo trovi nella TeX Live con

texdoc texbytopic
Post by ivan_terzo
- ammettiamo che per comodità si sia provveduto a definire ulteriori
comandi anche relativamente complessi. Ha senso inglobare
quell'insieme di macro in un <mio_file>.sty anziché richiamarlo nel
documento con un \input? E non dico tanto per averlo a disposizione
in documenti futuri (cosa comunque possibile anche con qualcosa di
diverso da un file *.sty) quanto, invece, per l'efficienza in fase di
compilazione. Richiamare quel <mio_file>.sty con \usepackage è più
efficiente che inglobarlo con un input (in questo caso
<mio_file>.tex)?
È quasi del tutto equivalente; \usepackage{miofile} fa un paio
di compiti di "bookkeping" e poi esegue \input{miofile.sty}.
La differenza è che in un file .sty puoi adoperare più cose
che in un file .tex da richiamare con il semplice \input,
per esempio dichiarare opzioni. In un file .sty richiamato
con \usepackage si suppone implicito un \makeatletter
iniziale e un \makeatother finale.

Ancora, un file richiamato con \usepackage non verrà mai
letto due volte, anche se c'è un secondo \usepackage{miofile}.
Post by ivan_terzo
E quindi la terza fake_domanda che cortocircuita la prima: a parità di
file (a parte ovviamente l'estensione), il processo di compilazione di
LaTeX tra più giovamento da un \usepackage{<mio_file>} o da un
\input{<mio_file>}?
Dovrebbe essere chiaro, no? ;-)
Post by ivan_terzo
Come diceva quella: "non so se mi sono stata spiegata". Ma non so
neppure se questi dubbi abbiamo effettivamente un senso.
Ciao
Enrico
ivan_terzo
2013-12-17 09:27:34 UTC
Permalink
Post by Enrico Gregorio
Post by ivan_terzo
- in che cosa consiste esattamente (vabbe'... più o meno) il processo
di compilazione di LaTeX?
Ci sono varie fasi; descriverle con dettaglio richiederebbe
un paio di sostanziosi capitoli di un libro.
Fase 1: lettura del file di input
I caratteri vengono trasformati in "token". Un token può essere
"espandibile" oppure "non espandibile". Per esempio "\relax" è
un unico token non espandibile; dopo
...cut...
Post by Enrico Gregorio
Esempio B. In certe situazioni TeX decide di trasferire parte della
lista verticale che sta costruendo alla "pagina corrente" e può
decidere di avere abbastanza materiale per costruire una pagina
completa. Perciò sospende l'elaborazione di nuovo materiale,
chiama la routine di output e spedisce la pagina completata
a formare una "pagina fisica" nel file DVI o PDF di uscita.
Occorre notare che tutte queste operazioni si svolgono "insieme".
Quando a TeX servono token (per esempio per argomenti da passare
a un comando), si attiva la fase 1 che prosegue con la fase 2
e con la spedizione di comandi alla fase 3.
Non si deve pensare che il file di input sia letto da cima a
fondo e poi elaborato: sarebbe troppo costoso in termini di
memoria. TeX legge quello che serve per andare avanti; quando
un token è espanso o eseguito, sparisce (almeno così nella
grande generalità dei casi, ma ci sono alcune eccezioni).
Il processo è descritto molto bene in TeX by Topic di
Victor Eijkhout (lo trovi nella TeX Live con
texdoc texbytopic
...cut...

mi sembra anche di capire che questo sia il motivo per cui latex tratta
in maniera così particolare e "originale" gli oggetti flottanti che
molti sembrano non gradire o digerire a malincuore...
Post by Enrico Gregorio
Post by ivan_terzo
- ammettiamo che per comodità si sia provveduto a definire ulteriori
comandi anche relativamente complessi. Ha senso inglobare
quell'insieme di macro in un <mio_file>.sty anziché richiamarlo nel
documento con un \input? E non dico tanto per averlo a disposizione
in documenti futuri (cosa comunque possibile anche con qualcosa di
diverso da un file *.sty) quanto, invece, per l'efficienza in fase di
compilazione. Richiamare quel <mio_file>.sty con \usepackage è più
efficiente che inglobarlo con un input (in questo caso
<mio_file>.tex)?
È quasi del tutto equivalente; \usepackage{miofile} fa un paio
di compiti di "bookkeping" e poi esegue \input{miofile.sty}.
La differenza è che in un file .sty puoi adoperare più cose
che in un file .tex da richiamare con il semplice \input,
per esempio dichiarare opzioni. In un file .sty richiamato
con \usepackage si suppone implicito un \makeatletter
iniziale e un \makeatother finale.
Ancora, un file richiamato con \usepackage non verrà mai
letto due volte, anche se c'è un secondo \usepackage{miofile}.
Post by ivan_terzo
E quindi la terza fake_domanda che cortocircuita la prima: a parità di
file (a parte ovviamente l'estensione), il processo di compilazione di
LaTeX tra più giovamento da un \usepackage{<mio_file>} o da un
\input{<mio_file>}?
Dovrebbe essere chiaro, no? ;-)
ora si... :-). E si, il fatto delle opzioni era naturalmente chiaro. Ma
pensavo anche che latex trattasse i package in modo ancora più
particolare. Chissà perché pensavo a qualcosa di più "monolitico", di
più intimamente connesso al sistema di compilazione, al core vero e
proprio insomma. Cosa che naturalmente pensavo si riuscisse ad ottenere
dopo la prima fase compilazione...
Post by Enrico Gregorio
Ciao
Enrico
come sempre Enrico, $\infty$ grazie :-)
--
________.________
U ____
K=xxxxXXXX(hh3f)
__)__,
Loading...