5 # Crea un numero per la rivista Le Matematiche, usando le informazioni contenute in una specifica cartella
7 # Author: Giuseppe Bilotta <bilotta@dmi.unict.it>
11 # Last Modified: 20070317
13 # Copyright: (C) 2007 Giuseppe Bilotta
17 require 'roman_numerals'
20 puts "#{$0} <nome cartella>"
21 puts "\tcrea un numero per la rivista Le Matematiche, usando le informazioni contenute nella cartella"
25 $stderr.puts "ERRORE: %s" % msg
30 $stderr.puts "AVVISO: %s" % msg
34 SIMPLE_GROUP = /#{NOT_BRACE}+?|\{#{NOT_BRACE}*?\}/
35 NESTED_GROUP = /#{SIMPLE_GROUP}+?|\{#{SIMPLE_GROUP}*?\}/
36 TITLE_RX = /\\title\{(#{NESTED_GROUP})\}/m
37 AUTHOR_RX = /\\author\{(#{NESTED_GROUP})\}/m
39 def titolo_e_autore(name, file)
41 content = File.open(file).read
43 titoli = content.scan(TITLE_RX)
46 errore "Impossibile determinare il titolo di %s" % name
48 res[:titolo] = titoli.first.first.gsub("\\\\", "\n").gsub(/\n|\r/, " ").gsub(/\s+/, " ")
50 avviso "%s sembra avere più d'un titolo." % name
51 res[:titolo] = titoli.first.first.gsub("\\\\", "\n").gsub(/\n|\r/, " ").gsub(/\s+/, " ")
54 autori = content.scan(AUTHOR_RX)
57 errore "Impossibile determinare il titolo di %s" % name
59 res[:autori] = autori.map { |ar|
69 puts "Prossimo articolo: %s a pagina %d" % [name, $pg]
72 if File.exists?(tex_file)
74 art_info = titolo_e_autore(name, tex_file)
75 puts "\tTitolo:\n\t\t"+art_info[:titolo]
76 puts "\tAutori:\n\t\t"+art_info[:autori].join("\n\t\t")
78 errore "Impossibile trovare titolo o autore per l'articolo \"%s\" (\"%s\")" % [name, tex_file]
82 $sommario << "\\articolo{#{art_info[:autori].join(' - ')}}{#{art_info[:titolo]}}{#{$pg}}\n"
84 errore "Impossibile aggiornare il sommario con le informazioni sull'articolo \"%s\" (\"%s\")" % [name, tex_file]
87 errore "Impossibile trovare l'articolo \"%s\" (\"%s\")" % [name, tex_file]
94 pub = File.new(pub_file, 'w')
96 pub.puts "\\gdef\\LM@FirstPg{#{$pg}}%"
99 errore "Impossibile impostare le informazioni sull'articolo \"%s\" (\"%s\")" % [name, pub_file]
103 compile = system 'pdflatex', "-interaction=batchmode", tex_file
106 errore "Errore durante la compilazione dell'articolo \"%s\" (\"%s\")" % [name, tex_file]
116 if File.exists?(bib_file)
117 system 'bibtex', name
120 compile = system 'pdflatex', "-interaction=batchmode", tex_file
124 log = File.new(log_file).read
125 if log.match(/Output written on .+ \((\d+) pages, (\d+) bytes\).\s*\r?\n?/)
127 puts "Ok! %d pagine" % pagine
129 errore "Impossibile determinare il numero di pagine per l'articolo \"%s\" (\"%s\")" % [name, tex_file]
132 errore "Errore durante la compilazione dell'articolo \"%s\" (\"%s\"). Consultare il file di log \"%s\" per maggiori informazioni" % [name, tex_file, log_file]
139 if !cartella or cartella.empty?
147 errore "Impossibile accedere alla cartella \"#{cartella}\""
152 if not File.exists?(indice)
153 errore "La cartella \"%s\" non contiene il file di indice!" % cartella
157 info = YAML.load(File.read(indice))
159 errore "Impossibile leggere il file di indice in \"%s\"" % cartella
162 if info.has_key?(:anno)
163 anno = info[:anno].to_i
165 errore "Il file di indice in \"%s\" non specifica l'anno!" % cartella
167 if info.has_key?(:volume)
168 vol = info[:volume].to_i
169 vol_rm = vol.to_s_roman
171 errore "Il file di indice in \"%s\" non specifica il volume!" % cartella
173 if info.has_key?(:fasc)
174 num = info[:fasc].to_i
175 num_rm = num.to_s_roman
177 errore "Il file di indice in \"%s\" non specifica il fascicolo!" % cartella
179 if info.has_key?(:articoli)
180 articoli = info[:articoli]
182 errore "Il file di indice in \"%s\" non specifica alcun articolo!" % cartella
185 puts "Preparazione: Le Matematiche, volume #{vol_rm}, fascicolo #{num_rm}, anno #{anno}"
188 \\gdef\\LM@Year{#{anno}}%
189 \\gdef\\LM@Vol{#{vol_rm}}%
190 \\gdef\\LM@Num{#{num_rm}}%
193 tex_sommario = 'sommario.tex'
196 \\documentclass{lematema}
197 \\usepackage[latin1]{inputenc}
198 \\let\\maketitle\\relax
199 \\newif\\ifpag\\pagtrue
201 \\setbox\\@tempboxa\\hbox{pag}
202 \\newlength\\paglength
203 \\paglength\\wd\\@tempboxa
205 \\newlength\\fullplength
207 \\def\\articolo#1#2#3{%
208 \\hangindent0.8cm\\hangafter1\\noindent
209 #1\ --\ \\textit{#2}\\dotfill &
210 \\parbox[b]{\\fullplength}{%
211 \\parbox[b]{\\paglength}{\\ifpag pag.\\global\\pagfalse\\else\\hfil"\\hfil\\fi}
218 \\renewcommand{\\@oddfoot}{%
219 \\parbox[t]{\\textwidth}{%
220 \\hrule\\medskip\\baselineskip11pt
221 \\centerline{Pubblicazione realizzata con il contributo finanziario}
222 \\centerline{dell'Universt\\`a degli Studi di Catania}
225 \\centerline{\\Large S O M M A R I O}
227 \\fullplength\\textwidth
228 \\advance\\fullplength-11cm\\relax
229 \\begin{tabular*}{\\textwidth}{p{11cm}r}
237 tex_fasc = "le_matematiche_#{vol_rm}_#{num_rm}.tex"
240 \\documentclass{lematema}
241 \\usepackage[final]{pdfpages}
242 \\let\\maketitle\\relax
253 $sommario = File.open(tex_sommario, 'w')
254 $sommario << $somm_begin
256 errore "Impossibile creare il sommario in \"%s\"" % cartella
260 $fasc = File.open(tex_fasc, 'w')
263 errore "Impossibile creare il fascicolo in \"%s\"" % cartella
266 articoli.each { |art|
272 $fasc << "\\includepdf[fitpaper=true,pages=-]{#{art}}\n"
275 $fasc << "\\null\\cleardoublepage\n"
283 puts "Compilo il sommario . . ."
285 log_sommario = 'sommario.log'
287 $sommario << $somm_end
289 compile = system 'pdflatex', "-interaction=batchmode", tex_sommario
292 errore "Errore durante la compilazione del sommario (\"%s\")" % tex_sommario
295 puts "Compilo il fascicolo . . ."
299 compile = system 'pdflatex', "-interaction=batchmode", tex_fasc
302 errore "Errore durante la compilazione del fascicolo (\"%s\")" % tex_fasc