Script compil

Description

compil a pour but d'aider à la compilation de fichiers latex. Il lance autant de fois qu'il le faut le compilateur latex, mais aussi bibtex si besoin et produit un fichier PDF au final. Le nettoyage des fichiers temporaires est optionnel.

Téléchargement

Télécharger compil

compil est distribué sous licence libre CeCILL.

Installation

Une fois le fichier téléchargé, vous devez

Ce logiciel nécessite l'utilisation des utilitaires latex, bibtex, dvips et ps2pdf, installables sous Ubuntu ou Debian par

sudo aptitude install texlive-latex-base texlive-latex-bin ghostscript

La visualisation finale du fichier PDF produit est optionnelle et réalisée à l'aide du logiciel evince. Son installation n'est pas obligatoire pour la compilation, mais l'est pour la visualisation. Elle peut se faire sous Ubuntu ou Debian par

sudo aptitude install evince

Aide en ligne

$ compil -h

Usage : compil [-vlqy] fichier [fichier ...]
        compil -h

Compilation Latex améliorée des fichiers donnés en argument.

Exécute une fois latex, une fois bibtex si besoin (après détection des fichiers
bibtex utilisés), deux fois latex, puis dvips et ps2pdf.
Par défaut, un nettoyage des fichiers de compilation est effectué. Le fichier de
log est alors conservé pendant 10 secondes.
Les extensions .tex des fichiers peuvent être omises.

Options :
 -h : afficher cette aide
 -v : visualiser le fichier pdf produit (utilise evince)
 -l : ne pas nettoyer les fichiers de compilation
 -q : ne pas afficher le résultat (« Fichier ... compilé »)
 -y : ne pas poser de question si plusieurs fichiers

Transcript

#!/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, <ravat@free.fr> (2007-2011)
# Website : http://www.cyril-ravat.fr/scripts/compil.php
# Help : compil -h

# Options par défaut
VISUALISE=
CLEAN=1
QUIET=
YES=

# Options du script
while getopts ":hvlqy" option
do
  case $option in
    "h")
      echo -e "Usage : $(basename "$0") [-vlqy] \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-l\033[0m : ne pas nettoyer les fichiers de compilation"
      echo -e " \033[1m-q\033[0m : ne pas afficher le résultat (« Fichier ... compilé »)"
      echo -e " \033[1m-y\033[0m : ne pas poser de question si plusieurs fichiers"
      echo 
      exit 0
    ;;
    "v")   VISUALISE=1 ;;
    "l")   CLEAN=      ;;
    "q")   QUIET=1     ;;
    "y")   YES=1       ;;
    "?")   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}"

  # Vérification de l'existence du fichier entré
  if [ ! -f "$NOM.tex" ] ; then
    echo -e "$NOM.tex n'existe pas."
    shift && continue
  fi

  # Demande d'exécution si plusieurs
  if [ $NOMBRE -gt 1 ] && [ ! $YES ] ; then
    read -p "Compiler $(basename "$NOM.tex") ? [O/n] " ok
    if [ -n "$ok" ] && [ `expr "$ok" : '[nN]'` == 1 ]; then
      echo "$(basename "$NOM.tex") 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
  }
  
  # Changement de répertoire
  PWD=`pwd`
  cd `dirname "$NOM"`
  NOM=`basename "$NOM"`

  # Compilation
  OPT="-shell-escape -interaction=nonstopmode -halt-on-error"
  latex $OPT "$NOM.tex" | grep '^l\.' -B 3 -A 1 | tee /tmp/compil.log
  ERREUR=`cat /tmp/compil.log | wc -l`
  rm /tmp/compil.log
  [ $ERREUR -eq 0 ] && biblio "$NOM" && \
  latex $OPT "$NOM.tex" 1> /dev/null && \
  dvips -q -o "$NOM.ps" "$NOM.dvi" && \
  ps2pdf -dPDFSETTINGS=/printer "$NOM.ps"
  # anciennement : ps2pdf -dUseCIEColor -dPDFSETTINGS=/printer "$NOM.ps"
  
  # Nettoyage
  if [ $CLEAN ]; then
    rm -f "$NOM.ps" "$NOM.dvi" "$NOM.tex~" "$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 et sortie si erreur
  if [ $ERREUR -eq 0 ]; then
    if [ $VISUALISE ]; then
      if [ -n "`which qpdfview`" ]; then
        qpdfview --unique "$NOM.pdf" &
      else
        evince "$NOM.pdf" &
      fi
    fi
    [ $QUIET ] || echo "Fichier \"$NOM.tex\" compilé"
    cd "$PWD"
  else
    echo "Erreur lors du traitement de $NOM.tex"
    cd "$PWD"
    exit 1
  fi

  shift
  
done