#!/bin/bash # This software is governed by the CeCILL license under French law and # abiding by the rules of distribution of free software. You can use, # modify and/ or redistribute the software under the terms of the CeCILL # license as circulated by CEA, CNRS and INRIA at the following URL # "http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt". # # Ce logiciel est régi par la licence CeCILL soumise au droit français et # respectant les principes de diffusion des logiciels libres. Vous pouvez # utiliser, modifier et/ou redistribuer ce programme sous les conditions # de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA # à l'adresse "http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt". # # Copyright Cyril Ravat, (2007-2011) # Website : http://www.cyril-ravat.fr/scripts/compil.php # Help : compil -h # Options par défaut VISUALISE= NONSTOP=1 CLEAN=1 VERBOSE=1 # Options du script while getopts ":hvilq" option do case $option in "h") echo -e "Usage : $(basename "$0") [-vilq] \033[1mfichier\033[0m [\033[1mfichier\033[0m ...]" echo -e " $(basename "$0") -h" echo echo -e "Compilation Latex améliorée des \033[1mfichier\033[0ms donnés en argument." echo echo -e "Exécute une fois \033[1mlatex\033[0m, une fois \033[1mbibtex\033[0m si besoin (après détection des fichiers" echo -e "bibtex utilisés), deux fois \033[1mlatex\033[0m, puis \033[1mdvips\033[0m et \033[1mps2pdf\033[0m." echo "Par défaut, un nettoyage des fichiers de compilation est effectué. Le fichier de" echo "log est alors conservé pendant 10 secondes." echo -e "Les extensions .tex des \033[1mfichier\033[0ms peuvent être omises." echo echo "Options :" echo -e " \033[1m-h\033[0m : afficher cette aide" echo -e " \033[1m-v\033[0m : visualiser le fichier pdf produit (utilise evince)" echo -e " \033[1m-i\033[0m : utiliser le mode intéractif de Latex" echo -e " \033[1m-l\033[0m : ne pas nettoyer les fichiers de compilation" echo -e " \033[1m-q\033[0m : se placer en mode silencieux. Sans cette option, une confirmation est" echo -e " demandée lorsque plusieurs \033[1mfichier\033[0ms sont donnés en argument et chaque" echo " action est affichée dans la console." echo exit 0 ;; "v") VISUALISE=1 ;; "i") NONSTOP= ;; "l") CLEAN= ;; "q") VERBOSE= ;; "?") break ;; esac done shift $((OPTIND-1)) # Vérification des utilitaires latex, bibtex, dvips, ps2pdf if [ -z `which latex` ]; then echo -e "L'utilitaire \033[1mlatex\033[0m n'existe pas." echo -e "Il faut installer le paquet \033[1mtexlive-latex-base\033[0m." exit 1 fi if [ -z `which bibtex` ]; then echo -e "L'utilitaire \033[1mbibtex\033[0m n'existe pas." echo -e "Il faut installer le paquet \033[1mtexlive-base-bin\033[0m." exit 1 fi if [ -z `which dvips` ]; then echo -e "L'utilitaire \033[1mdvips\033[0m n'existe pas." echo -e "Il faut installer le paquet \033[1mtexlive-base-bin\033[0m." exit 1 fi if [ -z `which ps2pdf` ]; then echo -e "L'utilitaire \033[1mps2pdf\033[0m n'existe pas." echo -e "Il faut installer le paquet \033[1mghostscript\033[0m." exit 1 fi NOMBRE="$#" while [ -n "$1" ]; do NOM="${1%.tex}" FICHIER="$NOM.tex" SORTIE="$NOM" # Vérification de l'existence du fichier entré if [ ! -f "$FICHIER" ]; then [ $VERBOSE ] && echo -e "$FICHIER n'existe pas." shift && continue fi # Demande d'exécution si plusieurs if [ $NOMBRE -gt 1 ] && [ $VERBOSE ]; then read -p "Compiler $(basename "$FICHIER") ? [O/n] " ok if [ -n "$ok" ] && [ `expr "$ok" : '[nN]'` == 1 ]; then echo "$FICHIER n'a pas été compilé." shift && continue fi fi # Regarder si besoin de bibtex function biblio() { [ `grep -c bibliography "$1.tex"` -gt 0 ] && bibtex "$1" && latex "$1.tex" return 0 } # Mode intéractif ou non [ $NONSTOP ] && OPT="-interaction=nonstopmode" # Compilation ERREUR= latex $OPT "$FICHIER" && \ biblio "$NOM" && \ latex $OPT "$FICHIER" && \ dvips -o "$SORTIE.ps" "$NOM.dvi" && \ ps2pdf -dPDFSETTINGS=/printer "$SORTIE.ps" || ERREUR=1 [ $ERREUR ] && [ $VERBOSE ] && echo "Erreur lors du traitement de $(basename "$FICHIER")" # Nettoyage if [ $CLEAN ]; then rm -f "$SORTIE.ps" "$NOM.dvi" "$FICHIER~" "$NOM.aux" "$NOM.out" "$NOM.toc" "$NOM.bbl" "$NOM.blg" "$NOM.nlo" # Attendre 10 secondes pour supprimer le fichier de log sleep 10 && rm -f "$NOM.log" & fi # Visualisation [ ! $ERREUR ] && [ $VISUALISE ] && [ -n `which evince` ] && evince "$SORTIE.pdf" & shift done