modif script Perl/genere_catalogue_tests.pl : meilleure gestion des pb de compilation pdflatex
This commit is contained in:
parent
5cb63f3c2f
commit
e9f68f886f
1 changed files with 108 additions and 50 deletions
|
@ -19,8 +19,9 @@ my $format_reel = '[+-]?[\.]?\d+[\.]?\d*(?:[eE][+-]?\d*)?';
|
|||
# disponibles (recopie des rubriques "But du test" et "Description du calcul" du
|
||||
# fichier README de chaque repertoire de test)
|
||||
#
|
||||
#
|
||||
#--------------------------
|
||||
# Notes a tout le monde :
|
||||
#--------------------------
|
||||
# une rubrique est un bloc contenu dans un fichier README sous la forme :
|
||||
# une ligne de tirets
|
||||
# nom de la rubrique
|
||||
|
@ -38,7 +39,9 @@ my $format_reel = '[+-]?[\.]?\d+[\.]?\d*(?:[eE][+-]?\d*)?';
|
|||
# pour l instant ecrite de maniere a reperer une ligne de tirets).
|
||||
#
|
||||
#
|
||||
#--------------------------
|
||||
# Notes aux utilisateurs :
|
||||
#--------------------------
|
||||
# - les repertoires de tests sont recherches dans toute l arborescence depuis l endroit ou
|
||||
# ce script est lance (recherche de tous les repertoires commencant par Test_R ou Test_L)
|
||||
# A noter que si un des repertoires ne contient pas de fichier README, le script s arrete sans
|
||||
|
@ -50,8 +53,14 @@ my $format_reel = '[+-]?[\.]?\d+[\.]?\d*(?:[eE][+-]?\d*)?';
|
|||
# ils sont vides, il n y a pas de README d ou l arret du programme. Pour supprimer,
|
||||
# ces repertoires vides, il suffit de faire "cvs update -dP" ou bien utiliser l option -P a l import du
|
||||
# projet "cvs co -P Verif_Herezh"
|
||||
# - en cas d erreur de compilation Latex, le fichier .tex est fourni pret a la compilation, ainsi qu un fichier
|
||||
# de l historique de compilation. Ces 2 fichiers permettent de cerner le probleme.... et pourquoi pas aussi essayer
|
||||
# de finaliser la compilation manuellement plutot que de rester bloque (sans oublier tout de meme de signaler
|
||||
# le probleme aux developpeurs de ce script)
|
||||
#
|
||||
#--------------------------
|
||||
# Notes aux developpeurs :
|
||||
#--------------------------
|
||||
# - le choix de ne pas generer de pdf a la moindre defaillance d un fichier README a pour
|
||||
# but de forcer a rendre conforme les fichiers README. Une ecriture partielle du fichier
|
||||
# pdf en omettant les README defaillants pourrait conduire a un oubli de certains tests.
|
||||
|
@ -154,12 +163,14 @@ verif_commande('pdflatex') or die "\nErreur (prog:$NOM_PROG) : commande pdflatex
|
|||
#-verif validite de l option -halt-on-error de la commande pdflatex
|
||||
@_ = qx(pdflatex -help | grep -- -halt-on-error);
|
||||
($#_ > -1) or die "\nErreur (prog:$NOM_PROG) : commande pdflatex => option -halt-on-error non existante...\n\n";
|
||||
#-verif validite de l option -interaction de la commande pdflatex
|
||||
@_ = qx(pdflatex -help | grep -- -interaction);
|
||||
($#_ > -1) or die "\nErreur (prog:$NOM_PROG) : commande pdflatex => option -interaction non existante...\n\n";
|
||||
|
||||
#verif validite de la commande makeindex
|
||||
verif_commande('makeindex') or die "\nErreur (prog:$NOM_PROG) : commande makeindex introuvable...\n\n";
|
||||
|
||||
|
||||
|
||||
#########################################################################################################
|
||||
# liste des repertoires de test
|
||||
#########################################################################################################
|
||||
|
@ -200,7 +211,7 @@ if($is_absence_README) {
|
|||
|
||||
#on va creer un repertoire temporaire qui est sense s effacer automatiquement grace a l utilisation de File::Temp->newdir
|
||||
# le probleme est que si un signal d interruption est envoye (ctrl-c par exemple), le repertoire ne sera pas efface.
|
||||
# donc, on va capturer certains signaux pour faire un appel a la subroutine sortie_programme()
|
||||
# donc, on va egalement capturer certains signaux pour faire un appel a la subroutine sortie_programme()
|
||||
$SIG{INT} = \&sortie_programme;#INT => capture signal : ctrl-c ou kill -2
|
||||
$SIG{TERM} = \&sortie_programme;#TERM => capture signal : kill -15
|
||||
#remarque : par essence, le signal kill -9 ne peut pas etre capture
|
||||
|
@ -253,78 +264,124 @@ print $HANDLE_TEX "\\end{document}\n";
|
|||
close($HANDLE_TEX);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#
|
||||
#
|
||||
#
|
||||
# a ce stade, le fichier .tex est cree et pret a la compilation
|
||||
#
|
||||
#
|
||||
#
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------------------
|
||||
#compilation pdflatex (avec index)
|
||||
# en trois temps :
|
||||
# 1- premier pdflatex (generation du .pdf et du .idx)
|
||||
# 2- makeindex (creation de l index)
|
||||
# 3- deuxieme pdflatex (table des matieres et index)
|
||||
# on compile 2 fois :
|
||||
# 1- premier pdflatex (generation du .pdf et des fichiers index .idx, .ilg (makeindex lance automatiquement))
|
||||
# 2- deuxieme pdflatex (table des matieres et index)
|
||||
#
|
||||
# a chaque fois, on utilise des options qui empechent pdflatex d attendre une reponse interactive en cas d erreur de compilation
|
||||
# option -halt-on-error => forcer a quitter a la moindre erreur
|
||||
# option -interaction=nonstopmode => desactiver les demandes interactives (par exemple si un fichier est introuvable, comme par exemple un package .sty inconnu)
|
||||
#------------------------------------------------------------------------------------------
|
||||
#-declaration prealable d une subroutine qui sera execute en cas d erreur latex
|
||||
# => a la moindre erreur, on fournira a l utilisateur le moyen de cerner les bugs et de pourquoi pas finir la compilation par lui-meme
|
||||
sub traitement_erreur_latex {
|
||||
#fichier .tex
|
||||
(my $tex_catalogue = $NOM_PDF_CATALOGUE) =~ s/\.pdf$/.tex/;
|
||||
#fichier .log de la compilation
|
||||
(my $errlog_catalogue = $NOM_PDF_CATALOGUE) =~ s/\.pdf$/.error_log/;
|
||||
warn " Les fichiers suivants ont ete crees pour chercher manuellement la source de l erreur :\n";
|
||||
warn " - $tex_catalogue (fichier .tex pret a la compilation)\n";
|
||||
warn " - $errlog_catalogue (affichage renvoye par pdflatex)\n";
|
||||
warn "\n";
|
||||
warn " (vous pouvez essayer de compiler vous-meme le fichier .tex pour\n";
|
||||
warn " finaliser la creation du catalogue)\n";
|
||||
warn "\n";
|
||||
#recopie du .tex mais en supprimant le retour d un cran dans le path du fichier figure des includegraphics (sinon l utilisateur ne pourra pas tester par lui-meme la compilation du fichier $tex_catalogue)
|
||||
open(FTEX1, "<$racine_fic_latex.tex");
|
||||
open(FTEX2, ">../$tex_catalogue");
|
||||
while(<FTEX1>) {
|
||||
s/\{\.\.\//\{/ if(/^\s*\\includegraphics/);#suppression retour d un cran dans le path du fichier figure
|
||||
print FTEX2;
|
||||
}
|
||||
close(FTEX1);
|
||||
close(FTEX2);
|
||||
system("mv -f toto.log ../$errlog_catalogue");#recopie du .log latex pour debuggage par l utilisateur
|
||||
|
||||
#affichage des eventuelles erreurs presentes dans le fichier $errlog_catalogue
|
||||
chdir "..";
|
||||
my @err_log = qx(grep -i error $errlog_catalogue | grep -v 'no output PDF');#on recupere les lignes qui contiennent le mot 'error' (sauf les lignes qui contiennent 'no output PDF' car on sait bien que le pdf n a pas ete cree!!!!)
|
||||
#si il existe au moins une ligne contenant le mot 'error', on produit un affichage
|
||||
if($#err_log > -1) {
|
||||
warn " Notamment, le fichier $errlog_catalogue contient les erreurs :\n";
|
||||
afficher_ligne_tirets('warn');
|
||||
warn " > $_" for @err_log;
|
||||
afficher_ligne_tirets('warn');
|
||||
warn "\n";
|
||||
}
|
||||
}#sub traitement_erreur_latex
|
||||
|
||||
|
||||
#---
|
||||
#-1ere compilation pdflatex en utilisant des options qui empechent les demandes interactives :
|
||||
# option -halt-on-error => forcer a quitter a la moindre erreur
|
||||
# option -interaction=nonstopmode => desactiver les demandes interactives (par exemple en cas d absence d un package du preambule)
|
||||
#---
|
||||
print "\n";
|
||||
afficher_ligne_tirets('print');
|
||||
print "compilation pdflatex (1ere fois)\n";
|
||||
afficher_ligne_tirets('print');
|
||||
sleep 1;#petite pause pour laisser a l utilisateur le temps de voir l affichage precedent
|
||||
#---
|
||||
#-1ere comilation (pdflatex avec option -halt-on-error pour forcer a quitter a la moindre erreur)
|
||||
#---
|
||||
system("pdflatex -halt-on-error $racine_fic_latex.tex > toto.log");
|
||||
system("pdflatex -halt-on-error -interaction=nonstopmode $racine_fic_latex.tex > toto.log");
|
||||
#-verif presence .pdf
|
||||
if(not -e "$racine_fic_latex.pdf") {
|
||||
warn "\nErreur (prog:$NOM_PROG) : erreur a l execution de pdflatex.\n";
|
||||
warn " Les fichiers suivants ont ete cree a des fins de debug :\n";
|
||||
warn " - $NOM_PDF_CATALOGUE.tex (fichier .tex donne en argument de pdflatex)\n";
|
||||
warn " - $NOM_PDF_CATALOGUE.error_log (affichage renvoye par pdflatex)\n";
|
||||
warn "\n";
|
||||
system("mv -f $racine_fic_latex.tex ../$NOM_PDF_CATALOGUE.tex");
|
||||
system("mv -f toto.log ../$NOM_PDF_CATALOGUE.error_log");
|
||||
chdir "..";
|
||||
warn "\nErreur (prog:$NOM_PROG) : erreur a l execution de pdflatex\n";
|
||||
traitement_erreur_latex();
|
||||
sortie_programme();
|
||||
}
|
||||
#-verif presence des fichiers d index (fichiers .idx et .ilg)
|
||||
if(not -e "$racine_fic_latex.idx" or not -e "$racine_fic_latex.ilg") {
|
||||
warn "\nErreur (prog:$NOM_PROG) : le fichier index .idx ou .ilg n a pas ete cree apres compilation avec pdflatex\n";
|
||||
traitement_erreur_latex();
|
||||
sortie_programme();
|
||||
}
|
||||
#---
|
||||
#-generation de l index
|
||||
#---
|
||||
afficher_ligne_tirets('print');
|
||||
print "compilation index (makeindex)\n";
|
||||
afficher_ligne_tirets('print');
|
||||
sleep 1;#petite pause pour laisser a l utilisateur le temps de voir l affichage precedent
|
||||
#-verif presence .idx
|
||||
if(not -e "$racine_fic_latex.idx") {
|
||||
warn "\nErreur (prog:$NOM_PROG) : le fichier index .idx n a pas ete cree\n";
|
||||
warn " Les fichiers suivants ont ete cree a des fins de debug :\n";
|
||||
warn " - $NOM_PDF_CATALOGUE.tex (fichier .tex donne en argument de pdflatex)\n";
|
||||
warn " - $NOM_PDF_CATALOGUE.error_log (affichage renvoye par pdflatex)\n";
|
||||
warn "\n";
|
||||
system("mv -f $racine_fic_latex.tex ../$NOM_PDF_CATALOGUE.tex");
|
||||
system("mv -f toto.log ../$NOM_PDF_CATALOGUE.error_log");
|
||||
chdir "..";
|
||||
sortie_programme();
|
||||
}
|
||||
system("makeindex $racine_fic_latex.idx > toto.log");
|
||||
#---
|
||||
#-2eme compilation (pdflatex avec option -halt-on-error pour forcer a quitter a la moindre erreur)
|
||||
#-2eme compilation pdflatex en utilisant des options qui empechent les demandes interactives :
|
||||
# option -halt-on-error => forcer a quitter a la moindre erreur
|
||||
# option -interaction=nonstopmode => desactiver les demandes interactives (par exemple en cas d absence d un package du preambule)
|
||||
#---
|
||||
afficher_ligne_tirets('print');
|
||||
print "compilation pdflatex (2eme fois)\n";
|
||||
afficher_ligne_tirets('print');
|
||||
sleep 1;#petite pause pour laisser a l utilisateur le temps de voir l affichage precedent
|
||||
system("rm -f $racine_fic_latex.pdf");
|
||||
system("pdflatex -halt-on-error $racine_fic_latex.tex > toto.log");
|
||||
system("pdflatex -halt-on-error -interaction=nonstopmode $racine_fic_latex.tex > toto.log");
|
||||
#-verif presence .pdf
|
||||
if(not -e "$racine_fic_latex.pdf") {
|
||||
warn "\nErreur (prog:$NOM_PROG) : erreur a l execution de pdflatex.\n";
|
||||
warn " Les fichiers suivants ont ete cree a des fins de debug :\n";
|
||||
warn " - $NOM_PDF_CATALOGUE.tex (fichier .tex donne en argument de pdflatex)\n";
|
||||
warn " - $NOM_PDF_CATALOGUE.error_log (affichage renvoye par pdflatex)\n";
|
||||
warn "\n";
|
||||
system("mv -f $racine_fic_latex.tex ../$NOM_PDF_CATALOGUE.tex");
|
||||
system("mv -f toto.log ../$NOM_PDF_CATALOGUE.error_log");
|
||||
chdir "..";
|
||||
warn "\nErreur (prog:$NOM_PROG) : erreur a l execution de pdflatex\n";
|
||||
traitement_erreur_latex();
|
||||
sortie_programme();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#
|
||||
#
|
||||
#
|
||||
# si on atteint cet endroit du script, c est que tout s est bien passe
|
||||
# il ne reste plus qu a deplacer le .pdf hors du repertoire temporaire (et le repertoire temporaire s effacera tout seul)
|
||||
#
|
||||
#
|
||||
#
|
||||
|
||||
#deplacement du catalogue final vers le repertoire de depart sous le nom prevu par la variable $NOM_PDF_CATALOGUE
|
||||
system("mv -f $racine_fic_latex.pdf ../$NOM_PDF_CATALOGUE");
|
||||
|
||||
|
@ -1056,7 +1113,8 @@ citecolor= green %couleur citation biblio
|
|||
%\pagestyle{arabic}
|
||||
\pagenumbering{arabic}
|
||||
|
||||
%remarque : le package makeidx doit etre place apres \usepackage{hyperref} pour beneficier des liens hyperef dans l index
|
||||
%remarque 1 : le package makeidx doit etre place apres \usepackage{hyperref} pour beneficier des liens hyperef dans l index
|
||||
%remarque 2 : le package makeidx appelle la commande makeindex (donc executer makeindex dans un shell apres la premiere compilation pdflatex ne sert a rien)
|
||||
\usepackage{imakeidx}
|
||||
%-- nouvelles commandes pour que ce soit des numeros de section (et non des pages) qui apparaissent dans l index
|
||||
% selon astuce (2015-06-26) : http://www.latex-community.org/forum/viewtopic.php?f=51&t=14334
|
||||
|
|
Loading…
Reference in a new issue