Razionalizzare la produzione di una rivista: -.48ex-20ArsTeX

Razionalizzare la produzione di una rivista: ArsTEXnica
Razionalizzare la produzione di una rivista: ArsTEXnica
Massimiliano Dominici
Gruppo utilizzatori Italiani di TEX
18 ottobre 2014
Massimiliano Dominici | Gruppo utilizzatori Italiani di TEX | guItmeeting2014
1 / 12
Razionalizzare la produzione di una rivista: ArsTEXnica
ArsKit
arstexnica.cls
arstexnica.bst
name.tex
name-package.tex
name-command.tex
name-article.tex
articolo 1
abstract
PDF articolo 1
PDF per la stampa
bibliografia
PDF articolo 2
PDF per il web
articolo 2
articolo N
PDF articolo N
Massimiliano Dominici | Gruppo utilizzatori Italiani di TEX | guItmeeting2014
2 / 12
Razionalizzare la produzione di una rivista: ArsTEXnica
Requisiti
Portabilità
Efficienza
Gestione dei conflitti
Massimiliano Dominici | Gruppo utilizzatori Italiani di TEX | guItmeeting2014
3 / 12
Razionalizzare la produzione di una rivista: ArsTEXnica
Portabilità
Attuale
Futura
• Linguaggio: Bash
• Linguaggio: Lua (texlua)
• Linux: sì
• Linux: sì
• Mac OS X: probabilmente sì
• Mac OS X: sì
• Windows: no (forse con Cygwin)
• Windows: sì
Massimiliano Dominici | Gruppo utilizzatori Italiani di TEX | guItmeeting2014
4 / 12
Razionalizzare la produzione di una rivista: ArsTEXnica
Efficienza
Attualmente
Uno script bash esegue ogni volta in sequenza tutte le operazioni, dalla
creazione dell’immagine per il codice a barre, alla scrittura delle voci
bibliografiche
Possibile soluzione
Gestire tutto con make (lake) e latexmk
Soluzione adottata
Usare latexmk per la compilazione LATEX e gestire separatamente le
operazioni accessorie
Massimiliano Dominici | Gruppo utilizzatori Italiani di TEX | guItmeeting2014
5 / 12
Razionalizzare la produzione di una rivista: ArsTEXnica
Composizione della rivista (vecchio metodo)
\documentclass{arstexnica}
% ...
% Preambolo generale
% ...
\input{dir1/article1-package}
\input{dir2/article2-package}
...
\input{dirN/articleN-package}
\input{dir1/article1-command}
\input{dir2/article2-command}
...
\input{dirN/articleN-command}
\begin{document}
\include{dir1/article1-article}
\include{dir2/article2-article}
...
\include{dirN/articleN-article}
\end{document}
Massimiliano Dominici | Gruppo utilizzatori Italiani di TEX | guItmeeting2014
Possibili conflitti in fase di
compilazione
• Caricamento di pacchetti
incompatibili
• Definizione multipla di
comandi con \newcommand
• Definizione multipla di
comandi con \def
• Ambiguità dei percorsi dei
file inclusi
6 / 12
Razionalizzare la produzione di una rivista: ArsTEXnica
Composizione della rivista (nuovo metodo)
Soluzione: includere i PDF, non il codice TEX.
\documentclass{arstexnica}
% ...
% Preambolo generale
% ...
\usepackage{pdfpages,pax}
\begin{document}
\IncludeArticle{dir1/article1}
\IncludeArticle{dir2/article2}
...
\IncludeArticle{dirN/articleN}
\end{document}
Massimiliano Dominici | Gruppo utilizzatori Italiani di TEX | guItmeeting2014
Problemi
• Numeri di pagina
• Testatine
• Collegamenti ipertestuali
7 / 12
Razionalizzare la produzione di una rivista: ArsTEXnica
Cosa fa \IncludeArticle
\newcommand\IncludeArticle[1]{%
% ... codice ...
\immediate\write18{%
cd \AT@subdirectory/\AT@article@path &&
latexmk -pdf -pdflatex=’pdflatex -shell-escape
’\%O’ \string\\PassOptionsToClass{#1}{arstexnica}
\string\\input{’\%S’}’
\AT@article@name &&
pdfannotextractor \AT@[email protected]
}%
% ... codice ...
\includepdf[pages=-,pagecommand={}]{\AT@subdirectory/#2.pdf}
% ... codice ...
}
Massimiliano Dominici | Gruppo utilizzatori Italiani di TEX | guItmeeting2014
8 / 12
Razionalizzare la produzione di una rivista: ArsTEXnica
Metadati
do
metadata = {
articles = {
...
["Condizionali"]={
["startpage"]=6,
["authors"]={
[[Claudio Beccari]],
},
["title"]=[[I comandi condizionali]],
["abstracts"]={
["italian"]=[[I comandi condizionali ... che li definiscono.]],
["english"]=[[Conditional commands ... in the proper way.]],
},
["endpage"]=13,
["path"]="articoli/ComandiCondizionali/",
},
...
["lastpage"] = 48,
["month"] = "Aprile",
["year"] = "2014",
["number"] = "17",
["issn-print"] = "1828-2350",
["issn-online"] = "1828-2369",
["mode"] = "online",
}
return metadata
end
Massimiliano Dominici | Gruppo utilizzatori Italiani di TEX | guItmeeting2014
9 / 12
Razionalizzare la produzione di una rivista: ArsTEXnica
Possibili svantaggi del nuovo metodo
Nessuna garanzia di coerenza interna
Nessuna possibilità di avere riferimenti
incrociati tra articoli diversi
...
?
Massimiliano Dominici | Gruppo utilizzatori Italiani di TEX | guItmeeting2014
10 / 12
Razionalizzare la produzione di una rivista: ArsTEXnica
Promemoria per il futuro
• Aggiungere funzioni agli script
• Preparare il pacchetto per il rilascio su CTAN
• Integrazione con un DVCS
Massimiliano Dominici | Gruppo utilizzatori Italiani di TEX | guItmeeting2014
11 / 12
Razionalizzare la produzione di una rivista: ArsTEXnica
Dove trovare il codice
https://github.com/mlgdominici/ArsKit-temp
Massimiliano Dominici | Gruppo utilizzatori Italiani di TEX | guItmeeting2014
12 / 12