- Questo topic ha 11 risposte, 5 partecipanti ed è stato aggiornato l'ultima volta 14 anni, 7 mesi fa da
robitex.
-
CreatoreTopic
-
30 Gennaio 2012 alle 21:30 #69214::
Evidentemente non sono l’unico sul forum che ha problemi di velocità di compilazione. 🙁Sto lavorando a un testo il cui solo preambolo richiede una quindicina di secondi per essere compilato. Ho avuto l’idea di cavarne fuori un .fmt in modo da ridurre i tempi di compilazione.
La struttura del mio documento è
`\documentclass{…}\begin{document}
\end{document}`
dove tra classe e preambolo ci sono circa 1200 righe di codice. Contando i pacchetti inclusi, penso di sforare le 20000 righe di codice.La mia idea è di creare un file di formato che incorpori:
`\documentclass{…}`
in modo da compilare ogni volta solamente
`\begin{document}
\end{document}`È possibile?
Ho fatto alcuni tentativi sia con MikTeX (Windows) che con TeX Live (Ubuntu), ottenendo ogni volta errori diversi (I’m stymied, missing \begin{document}, \normalfont non definito, I can’t find file/format…).
Supponiamo che io voglia ottenere un file di formato che abbia latex.ltx precaricato, di voler compilare con pdftex (cioè: tutto deve essere equivalente a compilare con pdflatex), e che il preambolo sia questo:
`% file: tikzlatex.tex\documentclass{article}
\usepackage{mathptmx}
\usepackage{tikz}
\usepackage[active,pdftex,tightpage]{preview}
\PreviewEnvironment[]{tikzpicture}
\PreviewEnvironment[]{pgfpicture}
\DeclareSymbolFont{symbolsb}{OMS}{cmsy}{m}{n}
\SetSymbolFont{symbolsb}{bold}{OMS}{cmsy}{b}{n}
\DeclareSymbolFontAlphabet{\mathcal}{symbolsb}\dump
\endinput`Quali sono i passi da fare per ottenere tikzlatex.fmt?
Una volta ottenuto, qual è il comando per compilare?Grazie,
AntonioPS: Se si riuscisse a ottenere tikzlatex.fmt, si potrebbe velocizzare anche QTikZ…
-
CreatoreTopic
-
AutoreRisposte
-
-
30 Gennaio 2012 alle 22:38 #69215::
antonio.macrì” post=68351Evidentemente non sono l’unico sul forum che ha problemi di velocità di compilazione. 🙁
Sto lavorando a un testo il cui solo preambolo richiede una quindicina di secondi per essere compilato. Ho avuto l’idea di cavarne fuori un .fmt in modo da ridurre i tempi di compilazione.
La struttura del mio documento è
`\documentclass{…}\begin{document}
\end{document}`
dove tra classe e preambolo ci sono circa 1200 righe di codice. Contando i pacchetti inclusi, penso di sforare le 20000 righe di codice.La mia idea è di creare un file di formato che incorpori:
`\documentclass{…}`
in modo da compilare ogni volta solamente
`\begin{document}
\end{document}`È possibile?
Ho fatto alcuni tentativi sia con MikTeX (Windows) che con TeX Live (Ubuntu), ottenendo ogni volta errori diversi (I’m stymied, missing \begin{document}, \normalfont non definito, I can’t find file/format…).
Supponiamo che io voglia ottenere un file di formato che abbia latex.ltx precaricato, di voler compilare con pdftex (cioè: tutto deve essere equivalente a compilare con pdflatex), e che il preambolo sia questo:
`% file: tikzlatex.tex\documentclass{article}
\usepackage{mathptmx}
\usepackage{tikz}
\usepackage[active,pdftex,tightpage]{preview}
\PreviewEnvironment[]{tikzpicture}
\PreviewEnvironment[]{pgfpicture}
\DeclareSymbolFont{symbolsb}{OMS}{cmsy}{m}{n}
\SetSymbolFont{symbolsb}{bold}{OMS}{cmsy}{b}{n}
\DeclareSymbolFontAlphabet{\mathcal}{symbolsb}\dump
\endinput`Quali sono i passi da fare per ottenere tikzlatex.fmt?
Una volta ottenuto, qual è il comando per compilare?Grazie,
AntonioPS: Se si riuscisse a ottenere tikzlatex.fmt, si potrebbe velocizzare anche QTikZ…
Non userei preview in un posto del genere (ho provato e i documenti non si compilano); meglio standalone, forse.
Dalla linea di comando dai
`pdftex -ini -jobname=tikzlatex “&pdflatex tikzlatex.tex”`
Puoi spostare il .fmt che viene creato in ~/texmf/web2c e poi chiamare
`pdftex -fmt tikzlatex file`
Il posto è ~/Library/texmf/web2c su Mac OS X; su Windoze non lo so, scoprilo da te. :)Ciao
Enrico
-
31 Gennaio 2012 alle 8:48 #69216
-
31 Gennaio 2012 alle 10:24 #69217
-
31 Gennaio 2012 alle 11:08 #69218::
ansys” post=68366Potete spiegare meglio questo metodo per compilare? I tempi di compilazione si riducono?
Grazie
OrlandoProvo a spiegarlo in parole povere (e magari imprecise).
Anche quando compili un documento LaTeX (anziché plain TeX), il compilatore avviato è sempre pdftex (This is pdfTeX, Version 3.1415926-2.3-1.40.12 (TeX Live 2011)). Di suo, pdftex riconosce solo i comandi TeX, non quelli di LaTeX. Non conosce cioè il significato di \documentclass, \begin{document} eccetera. Dargli in pasto un file che inizia direttamente con \documentclass non potrebbe funzionare…
Questi comandi (e tutto il markup LaTeX) sono definiti nel file latex.ltx: sono oltre 7000 linee di codice. Chiaramente, ogni volta che si compila un documento LaTeX, se pdftex dovesse rileggere tutto quel file (e gli altri inclusi), impiegherebbe un tempo non trascurabile (ma anche evitabile: le modifiche a latex.ltx sono decisamente rare, anzi forse ormai sono parecchi lustri che non viene toccato).
L’idea è allora di dare in pasto a pdftex il file latex.ltx (in realtà credo sia pdflatex.tex) e memorizzare il suo stato alla fine della compilazione. Ciò avviene facendo un dump della sua memoria (esiste proprio la macro \dump, come vedi nel mio esempio precedente). Chiaramente, alla fine di questa “compilazione”, pdftex non ha prodotto alcun PDF (il codice è tutto preambolo), perché sul \dump si interrompe. Il file di formato è proprio questo dump.
Alla compilazione effettiva di un documento, pdflatex richiama pdftex dicendogli di caricare preliminarmente lo stato salvato (il dump della memoria), ovvero un file pdflatex.fmt (o simile).
L’idea è allora di far elaborare a pdftex tutto un preambolo, memorizzarne il suo stato, e ottenere così un file di formato personalizzato (diciamo tikzlatex.fmt). Specificando a pdftex il formato tikzlatex, si evita che ogni volta debba rileggere ed elaborare tutto il preambolo.
Questo aumenta la velocità di compilazione, soprattutto se si caricano molti pacchetti ingombranti. Ovviamente, una piccola modifica al preambolo richiede di rigenerare il file di formato, quindi non è una cosa conveniente su preamboli che vengono modificati spesso. Credo invece che possa tornare molto utile per un’applicazione come QTikZ.
Ho fatto alcune prove con questo semplice file:
`\begin{document}
\begin{tikzpicture}
\fill[black!30] (5,5) — (12,9) — (12,2);
\fill[blue!30] (0,5) — (0,9) — (12,9) — (5,5);
\fill[black!10] (0,5) — (0,2) — (12,2) — (5,5);
\draw[dashed,thick] (0,2) — (0,9) — (12,9) — (12,2) — (0,2);
\draw[thick,blue](0,5) — (5,5) — (12,9);
\draw[thick,blue] (5,5) — (12,2);
\end{tikzpicture}
\end{document}
`Su Windows (MikTeX), col formato standard ci vuole una ventina di secondi a fare 20 compilazioni. Con il formato personalizzato ne impiega circa 7. In realtà, a ripensarci, mi sono reso conto di aver commesso un piccolo errore nell’impostare il test: il file tikzlatex.fmt stava nella cartella corrente, mentre il file pdflatex.fmt doveva andare a cercarselo tra gli alberi TeX. In ogni caso la differenza è notevole. Con TeXlive (su Ubuntu) ho messo il file di formato nell’albero locale: la differenza è circa 2.9 contro 5.5 secondi.
Con disegni più seri è normale che la differenza si riduca. Solo usandolo si potrebbe capire quanto vale. Nel mio caso, con un preambolone, fa perfettamente il suo lavoro!
🙂Comunque sto cercando un modo per far lavorare tikzlatex.fmt con QTikZ, un po’ di pazienza… 😀 Eventualmente, poi aggiorno la relativa discussione. 😉
Ciao,
Antonio
-
31 Gennaio 2012 alle 13:44 #69219::
Sei stato bravissimo a sintetizzare la funzione del file di formato; ci sono alcun piccole imprecisioni, ma non è il caso di pignoleggiare per dare una idea generale del problema. Va bene così.Aggiungerei un paio di notizie;
1) secondo quello che c’è scritto all’inizio del file latex.ltx sembrerebbe che l’ultima modifica sia stata eseguita nel 2009, non diversi lustri fa. Questo conferma che il nucleo di latex è piuttosto stabile, anche se non così immobile come il “diversi lustri fa’ lascerebbe pensare, ma un certo aggiornamento viene fatto sia pure non in modo frenetico.
2) In realtà non ce ne accorgiamo, ma aggiorniamo e ricreiamo il formato ogni volta che facciamo l’upgrade con il TeX Live manager o con gli appositi strumenti di MiKTeX.
3) come Enrico ci mostra abbastanza sovente, quello che viene fatto oggi è di modificare le classi in modo che carichino i pacchetti il cui nome comincia con l3, che sono i pacchetti più o meno stabili che vengono collaudati dall’utenza generale o da persone come Enrico che li studiano a fono e li imparano ad usare anticipando i tempi e focalizzando eventualmente alcune criticità. Sono quello che diventerà il LaTeX3 prossimo venturo.
-
31 Gennaio 2012 alle 19:17 #69220
-
31 Gennaio 2012 alle 20:45 #69221::
OldClaudio” post=68374Aggiungerei un paio di notizie;
1) secondo quello che c’è scritto all’inizio del file latex.ltx sembrerebbe che l’ultima modifica sia stata eseguita nel 2009, non diversi lustri fa. Questo conferma che il nucleo di latex è piuttosto stabile, anche se non così immobile come il “diversi lustri fa’ lascerebbe pensare, ma un certo aggiornamento viene fatto sia pure non in modo frenetico
In effetti continuano a modificarlo ogni tanto. Queste sono le modifiche negli ultimi sei anni: niente di sconvolgente, ma non è poi del tutto immobile come pensavo.
-
31 Gennaio 2012 alle 20:50 #69222::
Riporto la procedura completa per generare un file di formato (quindi ripeterò alcune cose già scritte), con TeXlive su Ubuntu.Per comodità, creiamo una cartella temporanea in cui lavorare.
Si parte creando un file, che qui continuerò a chiamare tikzlatex.tex, con un codice simile a questo:
`% tikzlatex.tex\documentclass[preview]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes,fadings,arrows,backgrounds,chains,calc,%
positioning,decorations.pathreplacing,decorations.markings}\dump`
Deve corrispondere (più o meno) a un preambolo e deve essere terminato da un \dump. Volendo si potrebbe aggiungere anche il “\begin{document}” (prima del \dump): dato che molte espansioni avvengono proprio “\AtBeginDocument”, ciò dovrebbe ridurre ulteriormente i tempi di compilazione.Per generare il file di formato, si apre un terminale nella nostra cartella e si dà:
`pdftex -ini -jobname=tikzlatex “&pdflatex tikzlatex.tex”`
Viene generato “tikzlatex.fmt”.Bisogna ora aggiungerlo all’albero locale, che nel mio caso si trova in
`/home/antonio/.texlive2011/texmf-var/web2c`
Spostando tikzlatex.fmt in questo percorso, si può già compilare da una qualsiasi cartella, con il comando:
`pdftex -fmt tikzlatex esempio.tex`
(non serve rigenerare il FNDB).Volendo, si può creare un piccolo script (da mettere in /opt/texbin, ma servono i permessi di root) chiamato tikzlatex, di contenuto
`pdftex -fmt tikzlatex $@`
in modo da compilare semplicemente con
`tikzlatex esempio.tex`Il file esempio.tex sarà qualcosa come
`% esempio.tex\begin{document}
\begin{tikzpicture}
\fill[black!30] (5,5) — (12,9) — (12,2);
\fill[blue!30] (0,5) — (0,9) — (12,9) — (5,5);
\fill[black!10] (0,5) — (0,2) — (12,2) — (5,5);
\draw[dashed,thick] (0,2) — (0,9) — (12,9) — (12,2) — (0,2);
\draw[thick,blue](0,5) — (5,5) — (12,9);
\draw[thick,blue] (5,5) — (12,2);
\end{tikzpicture}
\end{document}`
eventualmente senza il “\begin{document}” se è stato già incorporato nel file di formato. (Si ringraziano claudio peppo e cfiandra per avermi inconsapevolmente offerto questo esempio :))Con MikTeX sto avendo qualche problema: un po’ non mi trova il file di formato, un po’ non mi fa aggiungere il \begin{document}. Boh! 😕
Ancora grazie a Enrico, senza di lui non se ne faceva niente!
(Quanto all’uso di preview, quello era il codice di un template di QTikZ. In questo esempio ho ridotto all’osso, usando standalone, ma mi sono reso conto che se non gli passo l’opzione preview rimane un margine bianco a destra. Vabbè, è solo un esempio…)
-
2 Febbraio 2012 alle 9:07 #69223::
antonio.macrì” post=68400Riporto la procedura completa per generare un file di formato (quindi ripeterò alcune cose già scritte), con TeXlive su Ubuntu…
Ciao a tutti,
ho fatto 3 test con un documento LaTeX di 107 pagine contenente circa 140 oggetti flottanti tra figure e tabelle e che richiede il caricamento di tikz e dei pacchetti LaTeX3. Il sistema è basato su Windows XP con TeX Live 2011.I tempi di compilazione non sono un riferimento assoluto, ma è interessante confrontarli per le diverse situazione di compilazione:
1 – da TeXworks -> 43 s
2 – da console -> 40 s
3 – da console con file di formato -> 39 sCome vedete sono tempi abbastanza simili. La compilazione con comando da console fa risparmiare molto più tempo (3 secondi circa) rispetto al caso di compilazione con file di formato precompilato (solo un ulteriore vantaggio di 1 secondo circa).
Conclusione: in genere per un documento con molti oggetti flottanti, costruire un file di formato precompilato non porta a benefici pratici.NB. ho compilato il documento avendo cura di eseguire più volte il processo e di registrare i tempi solo per l’ultima compilazione, per effettuare il confronto con i file secondari dei sommari e dei riferimenti incrociati, già costruiti.
NB. su sistemi Linux mi aspetto di rilevare differenze di tempo più ridotte tra il caso 1 ed il caso 2 essendo più efficenti in generale i processi di output nell’ambiente a riga di comando.
Un saluto.
-
2 Febbraio 2012 alle 10:57 #69224::
robitex” post=68466
Riporto la procedura completa per generare un file di formato (quindi ripeterò alcune cose già scritte), con TeXlive su Ubuntu…
Ciao a tutti,
ho fatto 3 test con un documento LaTeX di 107 pagine contenente circa 140 oggetti flottanti tra figure e tabelle e che richiede il caricamento di tikz e dei pacchetti LaTeX3. Il sistema è basato su Windows XP con TeX Live 2011.I tempi di compilazione non sono un riferimento assoluto, ma è interessante confrontarli per le diverse situazione di compilazione:
1 – da TeXworks -> 43 s
2 – da console -> 40 s
3 – da console con file di formato -> 39 sCome vedete sono tempi abbastanza simili. La compilazione con comando da console fa risparmiare molto più tempo (3 secondi circa) rispetto al caso di compilazione con file di formato precompilato (solo un ulteriore vantaggio di 1 secondo circa).
Conclusione: in genere per un documento con molti oggetti flottanti, costruire un file di formato precompilato non porta a benefici pratici.NB. ho compilato il documento avendo cura di eseguire più volte il processo e di registrare i tempi solo per l’ultima compilazione, per effettuare il confronto con i file secondari dei sommari e dei riferimenti incrociati, già costruiti.
NB. su sistemi Linux mi aspetto di rilevare differenze di tempo più ridotte tra il caso 1 ed il caso 2 essendo più efficenti in generale i processi di output nell’ambiente a riga di comando.
Un saluto.
Ciao Roberto, grazie del tuo intervento, che dà modo di precisare alcune cose, a scanso di equivoci.
Un file di formato non è certo la soluzione definitiva alla lentezza di compilazione, altrimenti ognuno si genererebbe il suo sempre. L’uso di un file di formato può essere pressoché irrilevante quando il tempo per la compilazione del preambolo è trascurabile rispetto al tempo totale. Per di più, gli oggetti mobili sono notoriamente la cosa che LaTeX elabora più lentamente, quindi se nel documento ce ne sono diversi il vantaggio di un file di formato può non sentirsi affatto.
Nel mio caso ho un testo di circa 180 pagine suddiviso in 12 capitoli, con un preambolo abbastanza lungo, sia perché carico molti pacchetti (e diverse librerie TikZ), sia per svariati comandi e ambienti che (ri)definisco. Lavorando su un singolo capitolo mediante \includeonly, il tempo di compilazione senza file di formato è circa metà per la compilazione del preambolo e metà per il capitolo (varia da capitolo a capitolo; in alcuni ho diversi oggetti mobili, in altri zero). Usando il file di formato, annullo il tempo per la compilazione del preambolo, e di conseguenza quasi dimezzo il tempo di compilazione complessivo. Compilando l’intero documento, i tempi si riducono di appena un decimo.
Un file di formato può quindi essere utile in un caso come il mio: preambolo lungo e compilazione (in fase di stesura del documento) di un capitolo alla volta.
Ciao,
Antonio
-
2 Febbraio 2012 alle 11:06 #69225
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.