#!/bin/bash
###############################################################################
#                                                                             #
#                                  ShLaTeX                                    #
#                                                                             #
###############################################################################
#                                                                             #
# Auteur:           Mael Hilléreau                                            #
# Mél :             mael.hillereau@free.fr                                    #
# Web :             http://mael.hillereau.free.fr                             #
# Création :        06/03/2003                                                #
# Dernière modif.:  21/08/2003                                                #
# Version:          1.2b-fr                                                   #
# Description:      Script de compilation LaTeX pour Linux                    #
#                                                                             #
###############################################################################
#                                                                             #
# ShLaTeX -- Script de compilation LaTeX pour Linux.                          #
# Copyright (C) 2003  Mael Hilléreau                                          #
#                                                                             #
# This program is free software; you can redistribute it and/or               #
# modify it under the terms of the GNU General Public License                 #
# as published by the Free Software Foundation; either version 2              #
# of the License, or (at your option) any later version.                      #
#                                                                             #
# This program is distributed in the hope that it will be useful,             #
# but WITHOUT ANY WARRANTY; without even the implied warranty of              #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               #
# GNU General Public License for more details.                                #
#                                                                             #
# You should have received a copy of the GNU General Public License           #
# along with this program; if not, write to the Free Software                 #
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. #
#                                                                             #
###############################################################################
nomshell=`expr match "$0" '.*/\([^-\]*\).*'`;
version="1.2b-fr";

## envoi du code de retour approprié
function fin() {
	echo -ne "terminé.\n\n";
	if [ $errindex -eq 1 ]
	then
		exit 3;
	else
		if [ $errbib -eq 1 ]
		then
			exit 2;
		else
			if [ $errcompil -eq 1 ]
			then
				exit 1;
			else
				exit 0;
			fi
		fi
	fi
}

## suppression des temporaires
function suppressionTemp() {
	if [ $tmp -eq 0 ]
	then
		echo "suppression des temporaires latex...";
		rm -fr ./"$f".ShLaTeX
	fi
}

## fct de rappel pour CTRL^C
function ctrlc() {
	echo -ne "\n> Annulation !\n";
	if [ ! "$f" == "-" ]
	then
		repCourant=`pwd`;
		repCourant=`expr match "$repCourant" '.*/\(.*\)'`
		if [ "$repCourant" == "$f".ShLaTeX  ]
		then
			cd ..;
		fi
		suppressionTemp;
	fi
	fin;
}

## déclaration des variables globales

# nom du fichier
f="-";

# codes d'erreur
errindex=0;
errcompil=0;
errbib=0;

# options préférencielles
P_dvipdf=-1;
P_pdflatex=-1;
P_dvips=-1;
P_pstopdf=-1;
P_dvi=-1;
P_idx=-1;
P_no_idx=-1;
P_idx_file="-";
P_bib=-1;
P_no_bib=-1;
P_bib_file="-";
P_toc=-1;
P_no_toc=-1;
P_tmp=-1;
P_no_tmp=-1;
P_z=-1;
P_no_z=-1;
P_un=-1;
P_deux=-1;
P_quatre=-1;
P_sep=-1;
P_no_sep=-1;
P_m=-1;
P_no_m=-1;
P_view=-1;
P_no_view=-1;
P_sept=-1;
P_huit=-1;
P_v_ps="-";
P_v_pdf="-";
P_v_dvi="-";

# options de la ligne de commande
L_dvipdf=-1;
L_pdflatex=-1;
L_dvips=-1;
L_pstopdf=-1;
L_dvi=-1;
L_idx=-1;
L_no_idx=-1;
L_idx_file="-";
L_bib=-1;
L_no_bib=-1;
L_bib_file="-";
L_toc=-1;
L_no_toc=-1;
L_tmp=-1;
L_no_tmp=-1;
L_z=-1;
L_no_z=-1;
L_un=-1;
L_deux=-1;
L_quatre=-1;
L_sep=-1;
L_no_sep=-1;
L_m=-1;
L_no_m=-1;
L_view=-1;
L_no_view=-1;
L_sept=-1;
L_huit=-1;
L_v_ps="-";
L_v_pdf="-";
L_v_dvi="-";

## options d'éxécution
mode="dvi";
idx=0;
idx_file="-";
bib=0;
bib_file="-";
toc=1;
tmp=0;
z=0;
ppf=1;
sep=0;
m=0;
view=1;
ascii=7;
v_ps="gv";
v_pdf="gv";
v_dvi="xdvi";

## capture des CTRL^C
trap "ctrlc" SIGINT

## affiche une aide rapide
function aideRapide() {
	echo -ne "> Utilisation :\n";
	echo -ne "\n";
	echo -ne "    $nomshell [options] <nom_fichier.tex>\n";
	echo -ne "\n";
	echo -ne "    tapez \"man shlatex\" ou \"$nomshell -?\" pour une aide complète.\n";
	echo -ne "\n";
}

## affiche une aide complète
function aideComplete() {
echo ".TH \\fBShLaTeX\\fP 1 \"Août 2003\" \"version 1.2b-fr\" \"Manuel d'utilisation\"

.SH NOM
\\fBShLaTeX\\fP \\- Script de compilation pour documents écrits en langage LaTeX.

.SH SYNOPSIS
\\fBShLaTeX\\fP [options] \\fIfichierSource.tex\\fP

.SH DESCRIPTION
.PP
  Ce script permet de centraliser les nombreux appels de commandes nécessaires à
la compilation complète d'un document LaTeX. Notamment, les appels multiples à
la commande \\fBlatex\\fP indispensables pour créer une table des matières, une
bibliographie ou un index sont effectués automatiquement. Sont également gérés
les appels aux programmes \\fBbibtex\\fP et \\fBmakeindex\\fP ainsi que la
visualisation du fichier résultat (au format DVI, PostScript ou PDF) par appel à
un programme externe.
.PP
  Il est possible de compiler les documents qui utilisent les commandes
\\fB\\\\input\\fP et \\fB\\\\include\\fP pour faire référence à des fichiers externes et
cela de façon transparente en ne compilant que le fichier source principal.
.PP
  Une fois la compilation effectuée les fichiers temporaires sont effacés (option
\\fB-no-tmp\\fP) ou conservés (option \\fB-tmp\\fP). Les fichiers DVI générés par
LaTeX peuvent alors être directement convertis au format PostScript ou PDF.
.PP
  Ce script prend aussi en charge l'accentuation des caractères français par
l'intermédiaire d'un programme C externe (nommé \\fBtex8to7\\fP) et fourni avec le
script (la gestion des accents est donc transparente). Il gère aussi le \"c\"
cédille ainsi que le remplacement des guillemets par les commandes \\fB\\\\og\\fP et
\\fB\\\\fg\\fP (cela suppose que les guillemets soient appariés). Les guillemets
peuvent être impriqués en utilisant des accolades pour distinguer les différentes
paires de guillemets. Par exemple, le texte :
.PP
    Les guillemets \"peuvent être {\"imbriqués\"} à l'aide d'accolades\".
.PP
  est un exemple correct.
.PP
  Les options par défaut (préférences) sont stockées dans le répertoire
personnel de l'utilisateur dans le fichier \\fB~/.shlatex\\fP. Voir la section
FICHIERS pour connaître la syntaxe de ce fichier.
.SH OPTIONS
.IP \"\\fB\\-dvipdf\\fP\"
Sélectionne un format PDF au lieu du format DVI pour le fichier résultat. Le
programme \\fBdvipdf\\fP est alors utilisé pour la conversion.
.IP \"\\fB\\-pdflatex\\fP\"
Sélectionne un format PDF au lieu du format DVI pour le fichier résultat. Le
programme \\fBpdflatex\\fP est  alors directement utilisé pour créer le fichier
résultat.
.IP \"\\fB-dvips\\fP\"
Sélectionne un format PostScript au lieu du format DVI pour le fichier résultat.
Le programme \\fBdvips\\fP est alors utilisé pour la conversion.
.IP \"\\fB-ps2pdf\\fP\"
Sélectionne un format PDF au lieu du format PostScript pour le fichier résultat.
Utilise l'option \\fB-dvips\\fP. Les programmes \\fBdvips\\fP et \\fBps2pdf\\fP sont
successivement utilisés pour la conversion et le fichier PostScript est conservé
après la conversion.
.IP \"\\fB-dvi\\fP\"
Sélectionne un format DVI pour le fichier résultat.
.IP \"\\fB-idx\\fP \\fI[style.ist]\\fP ou \\fB--index\\fP \\fI[style.ist]\\fP\"
Active la création de l'index (pour une utilisation avec le module
\\fImakeidx\\fP). Le fichier optionnel \\fIstyle.ist\\fP est un fichier de
style pour \\fBmakeindex\\fP.
.IP \"\\fB-no-idx\\fP ou \\fB--no-index\\fP\"
Désactive la création de l'index.
.IP \"\\fB-bib\\fP \\fI[fichier.bib]\\fP ou \\fB--bibliography\\fP \\fI[fichier.bib]\\fP\"
Active la création de la bibliographie avec \\fBbibtex\\fP en se basant sur
\\fIfichier.bib\\fP. Si aucun fichier n'est indiqué, le fichier d'extension \".bib\"
doit porter le même nom que \\fIfichierSource\\fP.tex.
.IP \"\\fB-no-bib\\fP ou \\fB--no-bibliography\\fP\"
Désactive la création de la bibliographie.
.IP \"\\fB-toc\\fP ou \\fB--table-of-contents\\fP\"
Active la compilation supplémentaire pour la construction d'une table des
matières, une table des figures, une liste des tableaux et toutes les références
LaTeX (commande \\fB\\label{...}\\fP).
.IP \"\\fB-no-toc\\fP ou \\fB--no-table-of-contents\\fP\"
Désactive la compilation supplémentaire pour la construction d'une table des
matières, une table des figures, une liste des tableaux et toutes les références
LaTeX (commande \\fB\\label{...}\\fP).
.IP \"\\fB-tmp\\fP ou \\fB--temporary\\fP\"
Conserve après l'ecécution du script les fichiers temporaires créés par LaTeX.
Ces fichiers sont ainsi stockés dans un répertoire nommé
\\fIfichierSource.ShLaTeX\\fP.
.IP \"\\fB-no-tmp\\fP ou \\fB--no-temporary\\fP\"
Supprime après l'ecécution du script les fichiers temporaires créés par LaTeX.
.IP \"\\fB-z\\fP ou \\fB--gzip\\fP\"
Compresse les fichiers PostScript avec le programme \\fBgzip\\fP. Les fichiers
prennent alors l'extension \".ps.gz\".
.IP \"\\fB-no-z\\fP ou \\fB--no-gzip\\fP\"
Désactive la compression des fichiers PostScript avec le programme \\fBgzip\\fP.
.IP \"\\fB-1\\fP ou \\fB--1page\\fP\"
Génère des fichiers PostScript ayant 1 page a4 par feuille a4.
.IP \"\\fB-2\\fP ou \\fB--2pages\\fP\"
Génère des fichiers PostScript ayant 2 pages a5 par feuille a4.
.IP \"\\fB-4\\fP ou \\fB--4pages\\fP\"
Génère des fichiers PostScript ayant 4 pages a6 par feuille a4.
.IP \"\\fB-sep\\fP ou \\fB--separator\\fP\"
S'utilise avec l'option \\fB-2\\fP ou \\fB-4\\fP. Permet de tracer une ligne séparatrice entre
les différentes pages d'une même feuille.
.IP \"\\fB-no-sep\\fP ou \\fB--no-separator\\fP\"
S'utilise avec l'option \\fB-2\\fP ou \\fB-4\\fP. Permet de désactiver le tracé de la
ligne séparatrice entre les différentes pages d'une même feuille.
.IP \"\\fB-m\\fP ou \\fB--messages\\fP\"
Affiche systématiquement les messages de LaTeX dans la console (voir aussi la
section ERREURS DE COMPILATION).
.IP \"\\fB-no-m\\fP ou \\fB--no-messages\\fP\"
Si cette option est utilisée, les messages de LaTeX n'apparaissent qu'en cas
d'erreur (voir aussi la section ERREURS DE COMPILATION).
.IP \"\\fB-view\\fP ou \\fB--viewer\\fP\"
Active la visualisation finale.
.IP \"\\fB-no-view\\fP ou \\fB--no-viewer\\fP\"
Désactive la visualisation finale.
.IP \"\\fB-7\\fP ou \\fB--7bits\\fP\"
Désactive l'accentuation du fichier source LaTeX. Le fichier source doit être un
fichier ascii codé sur 7 bits.
.IP \"\\fB-8\\fP ou \\fB--8bits\\fP\"
Active l'accentuation du fichier source LaTeX. Le fichier source peut être un
fichier ascii codé sur 8 bits.
.IP \"\\fB-v-ps\\fP \\fIvisionneur\\fP ou \\fB--view-ps-with\\fP \\fIvisionneur\\fP\"
Utilise le programme \\fIvisionneur\\fP pour la visualisation finale des fichiers
PostScript.
.IP \"\\fB-v-pdf\\fP \\fIvisionneur\\fP ou \\fB--view-pdf-with\\fP \\fIvisionneur\\fP\"
Utilise le programme \\fIvisionneur\\fP pour la visualisation finale des fichiers
PDF.
.IP \"\\fB-v-dvi\\fP \\fIvisionneur\\fP ou \\fB--view-dvi-with\\fP \\fIvisionneur\\fP\"
Utilise le programme \\fIvisionneur\\fP pour la visualisation finale des fichiers
DVI.
.IP \"\\fB-v\\fP ou \\fB--version\\fP\"
Affiche la version et quitte.
.IP \"\\fB-?\\fP, \\fB-h\\fP ou \\fB--help\\fP\"
Affiche l'aide.

.IP \"\\fINote\\fP :\"
Lors de l'utilisation de l'option \\fB\\-view\\fP, le format de fichier choisi en
sortie (DVI, PostScript ou PDF) doit être lisible par le programme
\\fIvisionneur\\fP pour que la visualisation fonctionne correctement. Par défaut,
les programme utilisés sont \\fBxdvi\\fP pour les fichiers DVI et \\fBgv\\fP pour
les fichiers PostScript et PDF.

.SH \"ERREURS DE COMPILATION\"
.PP
  Si l'option \\fB-no-m\\fP est utilisée, en cas d'erreur de compilation par
LaTeX, le script ne répond plus. On peut l'arrêter en tapant les options de la
ligne de commande (\"x\" pour ignorer, \"q\" pour quitter, ...) en aveugle, ou en
tapant \"Ctrl^C\". Dans les deux cas, les erreurs seront affichées juste après.
Cette imperfection est due au choix de ne pas afficher les messages du programme
\\fBlatex\\fP par défaut. Cependant, le problème n'existe que si le mode
d'interaction autorise LaTeX à s'arrêter sur les erreurs (ce qui n'est pas le
cas, par exemple si la commande \\fB\\\\nonstopmode\\fP est utilisée).
.PP
  Dans tous les cas, il est possible de forcer l'affichage des messages de
\\fBlatex\\fP en utilisant l'option \\fB-m\\fP à la place de l'option \\fB-no-m\\fP.

.SH \"FICHIERS\"
.PP
  Le fichier \\fB~/.shlatex\\fP contient les préférences de l'utilisateur. Il peut
être modifié afin d'utiliser des valeurs par défaut personnalisées pour les
options du script, mais la syntaxe du fichier doit être respectée :
.PP
  Chaque ligne du fichier doit contenir une et une seule option. Les options
sont toutes permises à l'exeption de \\fB-v\\fP et \\fB-?\\fP qui n'auraient pas
leur place dans le fichier de préférences. Pour les options qui admettent des
paramètres, comme dans le shell, ils seront placés après leur option respective
mais devront en être séparés par un seul caractère d'espacement ('\\ '). L'ordre
des options n'importe pas.
.PP
  Dans le cas où des incohérences apparaîtraient lors de l'exécution du script,
des avertissements seront affichés.
.PP
  Si lors de la première exécution du script, le fichier \\fB~/.shlatex\\fP
n'existe pas, alors il sera créé automatiquement avec le contenu suivant :
.RS 5
.IP \"-dvips\"
.IP \"-view\"
.IP \"-no-idx\"
.IP \"-no-bib\"
.IP \"-toc\"
.IP \"-no-tmp\"
.IP \"-no-z\"
.IP \"-1\"
.IP \"-no-sep\"
.IP \"-no-m\"
.IP \"-8\"
.IP \"-v-ps gv\"
.IP \"-v-pdf gv\"
.IP \"-v-dvi xdvi\"

.SH \"PROBLÈMES CONNUS\"
.SS \"BoundingBox\"
.PP
  Lorsque l'on insère une image avec la commande \\fB\\\\includegraphics\\fP, il
faut spécifier la \"boundingbox\" en argument de la commande, sinon la compilation
ne fonctionne pas. Voici un exemple :
.PP
  \\\\includegraphics[bb=0 0 100 200]{image.eps}
.SS \"Fichiers externes\"
  Pour que l'inclusion de fichiers externes fonctionne correctement, les commandes
\\fB\\\\input\\fP et \\fB\\\\include\\fP doivent être placées sur des lignes indépendantes
du fichier \\fIfichierSource.tex\\fP.

.SH \"VOIR AUSSI\"
.BR latex (1),
.BR pdflatex (1),
.BR dvips (1),
.BR ps2pdf (1),
.BR dvipdf (1),
.BR xdvi (1),
.BR gv (1),
.BR gzip (1)

.SH \"BOGUES\"
.PP
Merci de signaler les bogues en envoyant un mél à l'adresse de la section
AUTEUR.

.SH \"LICENCE\"
.PP
  Ce script et l'ensemble des fichiers qui lui sont relatifs (dont ce manuel)
sont soumis aux termes de la Licence Publique Générale GNU. La GPL GNU est
fournie avec le script (fichier /usr/share/shlatex/GPL.TXT) et est également
disponible à l'adresse http://www.gnu.org/licenses/gpl.html.

.SH \"AUTEUR\"
.PP
Copyright (C) 2003 Mael Hilléreau
.PP
\\fIcontact\\fP : mael.hillereau@free.fr
.PP
\\fIweb\\fP : http://mael.hillereau.free.fr
" > ~/ShLaTeX_"$version".tmp;
man ~/ShLaTeX_"$version".tmp
rm -f ~/ShLaTeX_"$version".tmp
}

## affiche un message d'erreur
function erreur() {
	echo -ne "\n";
	echo -ne "> Erreur :\n";
	echo -ne "    $1\n";
	echo -ne "\n";
	if [ $# -eq 2 ]
	then
		if [ $2 == "-?" ]
		then
			aideRapide;
		fi
	fi
}

## affiche un message d'avertissement
function avertissement() {
	echo -ne "\n";
	echo -ne "> Avertissement :\n";
	echo -ne "    $1\n";
	echo -ne "\n";
}

## affiche la version et sort
function version() {
	echo -ne "$nomshell version $version - Script de compilation LaTeX pour Linux.\nCopyright (C) 2003 Mael Hilléreau\n";
	exit 0;
}

## recherche les fichiers externes (1 seul par ligne dans le source LaTeX !)
function fichiersExternes() {
	fExt="";
	lignes=`grep -e "^[ |\t]*\input{" $1`;
	lignes=`echo $lignes | grep -v -E "^[ |\t]*%.*"`
	for l in $lignes
	do
		fExt="$fExt `expr match $l '.*\input{\(.*\)}'`";
	done
	lignes=`grep -e "^[ |\t]*\include{" $1`;
	lignes=`echo $lignes | grep -v -E "^[ |\t]*%.*"`
	for l in $lignes
	do
		fExt="$fExt `expr match $l '.*\include{\(.*\)}'`";
	done
	lignes=`grep -e "^[ |\t]*\in\(put\|clude\) " $1`;
	lignes=`echo $lignes | grep -v -E "^[ |\t]*%.*"`
	for l in $lignes
	do
		if [ ! $l == "\input" -a ! $l == "\include" ]
		then
			fExt="$fExt $l";
		fi
	done
	fTemp="";
	for l in $fExt
	do
		cTemp=`expr match $l '[ |\t]*\(.*\)\.tex'`;
		if [[ $cTemp == "" ]]
		then
			fTemp="$fTemp $l";
		else
			fTemp="$fTemp $cTemp";
		fi
	done
	fExt=$fTemp;
}

## remplace les fichiers externes nommés $1 par $2 dans le fichier $3
function rplcExtFich() {
	if [ -f $3 ]
	then
		lignes=`cat $3 | grep -n "\input $1" | tr " " "@"`;
		lignes="`cat $3 | grep -n \input{$1}` $lignes";
		for ligne in $lignes
		do
			ligne=`echo $ligne | tr "@" " "`;
			nblignes=`wc -l $3 | tr -s " " ":" | cut -f 2 -d ":"`;
			nligne=`echo $ligne | cut -f 1 -d ":"`;
			nligne=`expr $nligne - 1`;
			fin=`expr $nblignes - $nligne - 1`;
			head -$nligne "$3" > "$3".tmp
			echo "\input{$2}" >> "$3.tmp"
			tail -n $fin "$3" >> "$3".tmp
			mv -f "$3".tmp "$3"
		done
		lignes=`cat $3 | grep -n "\include $1" | tr " " "@"`;
		lignes="`cat $3 | grep -n \include{$1}` $lignes";
		for ligne in $lignes
		do
			ligne=`echo $ligne | tr "@" " "`;
			nblignes=`wc -l $3 | tr -s " " ":" | cut -f 2 -d ":"`;
			nligne=`echo $ligne | cut -f 1 -d ":"`;
			nligne=`expr $nligne - 1`;
			fin=`expr $nblignes - $nligne - 1`;
			head -$nligne "$3" > "$3".tmp
			echo "\include{$2}" >> "$3.tmp"
			tail -n $fin "$3" >> "$3".tmp
			mv -f "$3".tmp "$3"
		done
	fi
}

## vérifie que le fichier fourni est accessible et éxécutable
function estExec() {
	for rep in `echo $PATH | tr ":" " "`
	do
		if [ -x $rep/$1 ]
		then
			return 1;
		fi
	done
	return 0;
}

## vérifie qu'au plus un seul des arguments entiers a été initialisé
function verifInit() {
	i=0;
	for a
	do
		if [ $a -ne -1 ]
		then
			i=`expr $i + 1`;
		fi
	done
	return $i;
}

## charge les préférences à partir du fichier ~/.shlatex (une option par ligne)
function preferences() {
	for ligne in `grep -e "^-.*" ~/.shlatex | tr " " "="`
	do
		opt=`expr match $ligne '[:space:]*\(-[-a-z0-9]*\)=*.*'`;
		paramopt="";
		paramopt=`expr match $ligne '[:space:]*-[-a-z0-9]*=\(.*\)'`;
		case $opt in
			"-dvipdf" )
				P_dvipdf=1;;
			"-pdflatex" )
				P_pdflatex=1;;
			"-ps2pdf" )
				P_pstopdf=1;;
			"-dvips" )
				P_dvips=1;;
			"-dvi" )
				P_dvi=1;;
			"-idx" | "--index" )
				P_idx=1;
				if [ ! $paramopt == "" ]
				then
					P_idx_file=$paramopt;
				fi ;;
			"-no-idx" | "--no-index" )
				P_no_idx=1;
				;;
			"-bib" | "--bibliography" )
				P_bib=1;
				if [ ! $paramopt == "" ]
				then
					P_bib_file=`expr match $paramopt '\(.*\)\.bib'`;
				fi ;;
			"-no-bib" | "--no-bibliography" )
				P_no_bib=1;;
			"-toc" | "--table-of-contents" )
				P_toc=1;;
			"-no-toc" | "--no-table-of-contents" )
				P_no_toc=1;;
			"-tmp" | "--temporary" )
				P_tmp=1;;
			"-no-tmp" | "--no-temporary" )
				P_no_tmp=1;;
			"-z" | "--gzip" )
				P_z=1;;
			"-no-z" | "--no-gzip" )
				P_no_z=1;;
			"-1" | "--1page" )
				P_un=1;;
			"-2" | "--2pages" )
				P_deux=1;;
			"-4" | "--4pages" )
				P_quatre=1;;
			"-sep" | "--separator" )
				P_sep=1;;
			"-no-sep" | "--no-separator" )
				P_no_sep=1;;
			"-m" | "--messages" )
				P_m=1;;
			"-no-m" | "--no-messages" )
				P_no_m=1;;
			"-view" | "--viewer" )
				P_view=1;;
			"-no-view" | "--no-viewer" )
				P_no_view=1;;
			"-7" )
				P_sept=1;;
			"-8" )
				P_huit=1;;
			"-v-ps" | "--view-ps-with" )
				if [ ! $paramopt == "" ]
				then
					P_v_ps=$paramopt;
				else
					avertissement "fichier \"$HOME/.shalatex\" -- option \"$opt\" ignorée, paramètre manquant !";
				fi ;;
			"-v-pdf" | "--view-pdf-with" )
				if [ ! $paramopt == "" ]
				then
					P_v_pdf=$paramopt;
				else
					avertissement "fichier \"$HOME/.shalatex\" -- option \"$opt\" ignorée, paramètre manquant !";
				fi ;;
			"-v-dvi" | "--view-dvi-with" )
				if [ ! $paramopt == "" ]
				then
					P_v_dvi=$paramopt;
				else
					avertissement "fichier \"$HOME/.shalatex\" -- option \"$opt\" ignorée, paramètre manquant !";
				fi ;;
			* )
				avertissement "fichier \"$HOME/.shlatex\" -- option \"$opt\" ignorée ; cette option n'existe pas ou n'est pas supportée dans le fichier de préférences";;
		esac
	done
	## vérification des options des préférences
	# mode
	verifInit $P_pstopdf $P_dvips $P_dvipdf $P_pdflatex $P_dvi;
	if [ $? -gt 1 ]
	then
		avertissement "fichier \"$HOME/.shlatex\" -- les options -dvipdf, -dvips, -pdflatex, -ps2pdf et -dvi sont mutuellement exclusives !";
	fi
	# index
	verifInit $P_idx $P_no_idx;
	if [ $? -gt 1 ]
	then
		avertissement "fichier \"$HOME/.shlatex\" -- les options -idx et -no-idx sont mutuellement exclusives !";
	fi
	# bibliography
	verifInit $P_bib $P_no_bib;
	if [ $? -gt 1 ]
	then
		avertissement "fichier \"$HOME/.shlatex\" -- les options -bib et -no-bib sont mutuellement exclusives !";
	fi
	# table of contents
	verifInit $P_toc $P_no_toc;
	if [ $? -gt 1 ]
	then
		avertissement "fichier \"$HOME/.shlatex\" -- les options -toc et -no-toc sont mutuellement exclusives !";
	fi
	# temporary
	verifInit $P_tmp $P_no_tmp;
	if [ $? -gt 1 ]
	then
		avertissement "fichier \"$HOME/.shlatex\" -- les options -tmp et -no-tmp sont mutuellement exclusives !";
	fi
	# gzip
	verifInit $P_z $P_no_z;
	if [ $? -gt 1 ]
	then
		avertissement "fichier \"$HOME/.shlatex\" -- les options -z et -no-z sont mutuellement exclusives !";
	fi
	# 1, 2, 4
	verifInit $P_un $P_deux $P_quatre;
	if [ $? -gt 1 ]
	then
		avertissement "fichier \"$HOME/.shlatex\" -- les options -1, -2 et -4 sont mutuellement exclusives !";
	fi
	# separator
	verifInit $P_sep $P_no_sep;
	if [ $? -gt 1 ]
	then
		avertissement "fichier \"$HOME/.shlatex\" -- les options -sep et -no-sep sont mutuellement exclusives !";
	fi
	# messages
	verifInit $P_m $P_no_m;
	if [ $? -gt 1 ]
	then
		avertissement "fichier \"$HOME/.shlatex\" -- les options -m et -no-m sont mutuellement exclusives !";
	fi
	# view
	verifInit $P_view $P_no_view;
	if [ $? -gt 1 ]
	then
		avertissement "fichier \"$HOME/.shlatex\" -- les options -view et -no-view sont mutuellement exclusives !";
	fi
	# 7, 8
	verifInit $P_sept $P_huit;
	if [ $? -gt 1 ]
	then
		avertissement "fichier \"$HOME/.shlatex\" -- les options -7 et -8 sont mutuellement exclusives !";
	fi
}

## si il n'y a pas de fichier de préférences, on le crée avec des valeurs par défaut
if [ ! -f ~/.shlatex ]
then
	echo -ne "-dvips\n-view\n-no-idx\n-no-bib\n-toc\n-no-tmp\n-no-z\n-1\n-no-sep\n-no-m\n-8\n-v-ps gv\n-v-pdf gv\n-v-dvi xdvi\n" > ~/.shlatex
fi

## chargement des préférences
preferences;

## vérification du nombre d'arguments et récupération des options
if [ $# -lt 2 ]
then
	if [ $# -eq 1 ]
	then
		if [ $1 == "-?" -o $1 == "-h" -o $1 == "--help" ]
		then
			aideComplete;
			exit 0;
		elif [ $1 == "-v" -o $1 == "--version" ]
		then
			version
			exit 0;
		fi
	else
		erreur "nombre d'arguments incorrect !" -?;
		exit 1;
	fi
else
	noshift=0;
	while [ $# -gt 1 ]
	do
		case $1 in
			"-dvipdf" )
				L_dvipdf=1;;
			"-pdflatex" )
				L_pdflatex=1;;
			"-ps2pdf" )
				L_pstopdf=1;;
			"-dvips" )
				L_dvips=1;;
			"-dvi" )
				L_dvi=1;;
			"-idx" | "--index" )
				L_idx=1;
				if [ $# -gt 2 ]
				then
					shift;
					if [ ! ${1:0:1} == "-" ]
					then
						L_idx_file=$1;
					else
						noshift=1;
					fi
				fi ;;
			"-no-idx" | "--no-index" )
				L_no_idx=1;;
			"-bib" | "--bibliography" )
				L_bib=1;
				if [ $# -gt 2 ]
				then
					shift;
					if [ ! ${1:0:1} == "-" ]
					then
						if [ -f $1 ]
						then
							L_bib_file=`expr match "$1" '\(.*\)\.bib'`;
						else
							erreur "le fichier de bibliographie \"$1\" n'existe pas !" -?;
							exit 1;
						fi
					else
						noshift=1;
					fi
				fi ;;
			"-no-bib" | "--no-bibliography" )
				L_no_bib=1;;
			"-toc" | "--table-of-contents" )
				L_toc=1;;
			"-no-toc" | "--no-table-of-contents" )
				L_no_toc=1;;
			"-tmp" | "--temporary" )
				L_tmp=1;;
			"-no-tmp" | "--no-temporary" )
				L_no_tmp=1;;
			"-z" | "--gzip" )
				L_z=1;;
			"-no-z" | "--no-gzip" )
				L_no_z=1;;
			"-1" | "--1page" )
				L_un=1;;
			"-2" | "--2pages" )
				L_deux=1;;
			"-4" | "--4pages" )
				L_quatre=1;;
			"-sep" | "--separator" )
				L_sep=1;;
			"-no-sep" | "--no-separator" )
				L_no_sep=1;;
			"-m" | "--messages" )
				L_m=1;;
			"-no-m" | "--no-messages" )
				L_no_m=1;;
			"-view" | "--viewer" )
				L_view=1;;
			"-no-view" | "--no-viewer" )
				L_no_view=1;;
			"-7" )
				L_sept=1;;
			"-8" )
				L_huit=1;;
			"-v-ps" | "--view-ps-with" )
				if [ $# -gt 2 ]
				then
					shift;
					if [ ! ${1:0:1} == "-" ]
					then
						estExec $1;
						if [ $? -eq 1 ]
						then
							L_v_ps=$1;
						else
							erreur "le fichier \"$1\" n'est pas accessible ou n'est pas éxécutable depuis la ligne de commande !";
							exit 1;
						fi
					else
						noshift=1;
					fi
				else
					erreur "l'argument $1 nécessite un paramètre !" -?;
					exit 1;
				fi ;;
			"-v-pdf" | "--view-pdf-with" )
				if [ $# -gt 2 ]
				then
					shift;
					if [ ! ${1:0:1} == "-" ]
					then
						estExec $1;
						if [ $? -eq 1 ]
						then
							L_v_pdf=$1;
						else
							erreur "le fichier \"$1\" n'est pas accessible ou n'est pas éxécutable depuis la ligne de commande !";
							exit 1;
						fi
					else
						noshift=1;
					fi
				else
					erreur "l'argument $1 nécessite un paramètre !" -?;
					exit 1;
				fi ;;
			"-v-dvi" | "--view-dvi-with" )
				if [ $# -gt 2 ]
				then
					shift;
					if [ ! ${1:0:1} == "-" ]
					then
						estExec $1;
						if [ $? -eq 1 ]
						then
							L_v_dvi=$1;
						else
							erreur "le fichier \"$1\" n'est pas accessible ou n'est pas éxécutable depuis la ligne de commande !";
							exit 1;
						fi
					else
						noshift=1;
					fi
				else
					erreur "l'argument $1 nécessite un paramètre !" -?;
					exit 1;
				fi ;;
			"-?" | "-h" | "--help" )
				aideRapide;
				exit 0;;
			"-v" | "--version" )
				version;;
			* )
				erreur "l'argument \"$1\" est incorrect !" -?;
				exit 1;;
		esac
		if [ $noshift -eq 0 ]
		then
			shift;
		else
			noshift=0;
		fi
	done
fi

# vérification de l'existence d'un nom pour le fichier source LaTeX
if [ $# -ne 1 ]
then
	erreur "fichier source LaTeX manquant !" -?;
	exit 1;
fi

# vérification de l'existence du fichier source LaTeX
if [ ! -f $1 ]
then
	erreur "impossible de trouver le fichier \"$1\" !" -?;
	exit 1;
fi

# nom du fichier source
fich=$1;

# nom du fichier source sans son extension ".tex"
f=`expr match "$fich" '\(.*\)\.[a-zA-Z]*'`;

## vérification des options de la ligne de commande
# mode
verifInit $L_pstopdf $L_dvips $L_dvipdf $L_pdflatex $L_dvi;
iopt=$?;
if [ $iopt -gt 1 ]
then
	erreur "les options -dvipdf, -dvips, -pdflatex, -ps2pdf et -dvi sont mutuellement exclusives !";
	exit 1;
elif [ $iopt -eq 1 ]
then
	# ligne de commande
	if [ $L_dvipdf -eq 1 ]
	then
		mode="dvipdf";
	elif [ $L_dvips -eq 1 ]
	then
		mode="dvips";
	elif [ $L_pdflatex -eq 1 ]
	then
		mode="pdflatex";
	elif [ $L_pstopdf -eq 1 ]
	then
		mode="ps2pdf";
	elif [ $L_dvi -eq 1 ]
	then
		mode="dvi";
	fi
else
	# préférences
	if [ $P_dvipdf -eq 1 ]
	then
		mode="dvipdf";
	elif [ $P_dvips -eq 1 ]
	then
		mode="dvips";
	elif [ $P_pdflatex -eq 1 ]
	then
		mode="pdflatex";
	elif [ $P_pstopdf -eq 1 ]
	then
		mode="ps2pdf";
	elif [ $P_dvi -eq 1 ]
	then
		mode="dvi";
	fi
fi
# index
verifInit $L_idx $L_no_idx;
iopt=$?;
if [ $iopt -gt 1 ]
then
	erreur "les options -idx et -no-idx sont mutuellement exclusives !";
	exit 1;
elif [ $iopt -eq 1 ]
then
	# ligne de commande
	if [ $L_idx -eq 1 ]
	then
		idx=1;
	else
		idx=0;
	fi
else
	# préférences
	if [ $P_idx -eq 1 ]
	then
		idx=1;
	else
		idx=0;
	fi
fi
if [ ! $L_idx_file == "-" ]
then
	idx_file=$L_idx_file;
elif [ ! $P_idx_file == "-" ]
then
	idx_file=$P_idx_file;
fi
# bibliography
verifInit $L_bib $L_no_bib;
iopt=$?;
if [ $iopt -gt 1 ]
then
	erreur "les options -bib et -no-bib sont mutuellement exclusives !";
	exit 1;
elif [ $iopt -eq 1 ]
then
	# ligne de commande
	if [ $L_bib -eq 1 ]
	then
		bib=1;
	else
		bib=0;
	fi
else
	# préférences
	if [ $P_bib -eq 1 ]
	then
		bib=1;
	else
		bib=0;
	fi
fi
if [ ! $L_bib_file == "-" ]
then
	bib_file=$L_bib_file;
elif [ ! $P_bib_file == "-" ]
then
	bib_file=$P_bib_file;
fi
# table of contents
verifInit $L_toc $L_no_toc;
iopt=$?;
if [ $iopt -gt 1 ]
then
	erreur "les options -toc et -no-toc sont mutuellement exclusives !";
	exit 1;
elif [ $iopt -eq 1 ]
then
	# ligne de commande
	if [ $L_toc -eq 1 ]
	then
		toc=1;
	else
		toc=0;
	fi
else
	# préférences
	if [ $P_toc -eq 1 ]
	then
		toc=1;
	else
		toc=0;
	fi
fi
# temporary
verifInit $L_tmp $L_no_tmp;
iopt=$?;
if [ $iopt -gt 1 ]
then
	erreur "les options -tmp et -no-tmp sont mutuellement exclusives !";
	exit 1;
elif [ $iopt -eq 1 ]
then
	# ligne de commande
	if [ $L_tmp -eq 1 ]
	then
		tmp=1;
	else
		tmp=0;
	fi
else
	# préférences
	if [ $P_tmp -eq 1 ]
	then
		tmp=1;
	else
		tmp=0;
	fi
fi
# gzip
verifInit $L_z $L_no_z;
iopt=$?;
if [ $iopt -gt 1 ]
then
	erreur "les options -z et -no-z sont mutuellement exclusives !";
	exit 1;
elif [ $mode == "dvips" -o $mode == "ps2pdf" ]
then
	if [ $iopt -eq 1 ]
	then
		# ligne de commande
		if [ $L_z -eq 1 ]
		then
			z=1;
		else
			z=0;
		fi
	else
		# préférences
		if [ $P_z -eq 1 ]
		then
			z=1;
		else
			z=0;
		fi
	fi
elif [ $iopt -eq 1 ]
then
	avertissement "option -z ignorée -- l'option -z ne concerne que les fichiers PostScript !";
fi
# 1, 2, 4
verifInit $L_un $L_deux $L_quatre;
iopt=$?;
if [ $iopt -gt 1 ]
then
	erreur "les options -1, -2 et -4 sont mutuellement exclusives !";
	exit 1;
elif [ $mode == "dvips" -o $mode == "ps2pdf" ]
then
	if [ $iopt -eq 1 ]
	then
		# ligne de commande
		if [ $L_un -eq 1 ]
		then
			ppf=1;
		elif [ $L_deux -eq 1 ]
		then
			ppf=2;
		else
			ppf=4;
		fi
	else
		# préférences
		if [ $P_un -eq 1 ]
		then
			ppf=1;
		elif [ $P_deux -eq 1 ]
		then
			ppf=2;
		else
			ppf=4;
		fi
	fi
elif [ $iopt -eq 1 ]
then
	if [ $L_un -eq 1 ]
	then
		avertissement "option -1 ignorée -- les options -1, -2 et -4 n'agissent que sur les fichiers PostScript !";
	elif [ $L_deux -eq 1 ]
	then
		avertissement "option -2 ignorée -- les options -1, -2 et -4 n'agissent que sur les fichiers PostScript !";
	else
		avertissement "option -4 ignorée -- les options -1, -2 et -4 n'agissent que sur les fichiers PostScript !";
	fi
fi
# separator
verifInit $L_sep $L_no_sep;
iopt=$?;
if [ $iopt -gt 1 ]
then
	erreur "les options -sep et -no-sep sont mutuellement exclusives !";
	exit 1;
elif [ $ppf -gt 1 ]
then
	if [ $iopt -eq 1 ]
	then
		# ligne de commande
		if [ $L_sep -eq 1 ]
		then
			sep=1;
		else
			sep=0;
		fi
	else
		# préférences
		if [ $P_sep -eq 1 ]
		then
			sep=1;
		else
			sep=0;
		fi
	fi
elif [ $iopt -eq 1 ]
then
	avertissement "option -sep ignorée -- l'option -sep ne s'utilise qu'avec les options -2 et -4 !";
fi
# messages
verifInit $L_m $L_no_m;
iopt=$?;
if [ $iopt -gt 1 ]
then
	erreur "les options -m et -no-m sont mutuellement exclusives !";
	exit 1;
elif [ $iopt -eq 1 ]
then
	# ligne de commande
	if [ $L_m -eq 1 ]
	then
		m=1;
	else
		m=0;
	fi
else
	# préférences
	if [ $P_m -eq 1 ]
	then
		m=1;
	else
		m=0;
	fi
fi
# view
verifInit $L_view $L_no_view;
iopt=$?;
if [ $iopt -gt 1 ]
then
	erreur "les options -view et -no-view sont mutuellement exclusives !";
	exit 1;
elif [ $iopt -eq 1 ]
then
	# ligne de commande
	if [ $L_view -eq 1 ]
	then
		view=1;
	else
		view=0;
	fi
else
	# préférences
	if [ $P_view -eq 1 ]
	then
		view=1;
	else
		view=0;
	fi
fi
# 7, 8
verifInit $L_sept $L_huit;
iopt=$?;
if [ $iopt -gt 1 ]
then
	erreur "les options -7 et -8 sont mutuellement exclusives !";
	exit 1;
elif [ $iopt -eq 1 ]
then
	# ligne de commande
	if [ $L_sept -eq 1 ]
	then
		ascii=7;
	else
		ascii=8;
	fi
else
	# préférences
	if [ $P_sept -eq 1 ]
	then
		ascii=7;
	else
		ascii=8;
	fi
fi
# v_dvi
if [ ! $L_v_dvi == "-" ]
then
	# lige de commande
	v_dvi=$L_v_dvi;
elif [ ! $P_v_dvi == "-" ]
then
	# préférences
	v_dvi=$P_v_dvi;
fi
# v_ps
if [ ! $L_v_ps == "-" ]
then
	# lige de commande
	v_ps=$L_v_ps;
elif [ ! $P_v_ps == "-" ]
then
	# préférences
	v_ps=$P_v_ps;
fi
# v_pdf
if [ ! $L_v_pdf == "-" ]
then
	# lige de commande
	v_pdf=$L_v_pdf;
elif [ ! $P_v_pdf == "-" ]
then
	# préférences
	v_pdf=$P_v_pdf;
fi


## test de l'existance du fichier de bibliographie
if [ $bib -eq 1 -a $bib_file == "-" ]
then
	if [ ! -f "$f".bib ]
	then
		erreur "vous avez utilisé l'option -bib et le fichier \"$f.bib\" n'existe pas !" -?;
		exit 1;
	fi
fi


## affichage d'un petit message de version
echo -ne "\n$nomshell version $version - Script de compilation LaTeX pour Linux.\nCopyright (C) 2003 Mael Hilléreau\n\n";


## création d'un répertoire de travail
if [ ! -d "$f".ShLaTeX ]
then
	mkdir "$f".ShLaTeX
fi


## recherche (non récursive) des fichiers externes
fichiersExternes $fich


## copie du fichier latex source principal
cp "$f".tex "$f".ShLaTeX

## copie des fichiers latex source externes
fExtTmp="";
for fe in $fExt
do
	if [ -f "$fe".tex ]
	then
		cp "$fe".tex "$f".ShLaTeX
		# élimination du chemin relatif dans le fichier source
		sansChemin=`expr match "/$fe" '.*/\(.*\)'`;
		rplcExtFich "$fe.tex" "$sansChemin.tex" "$f".ShLaTeX/"$f".tex
		fExtTmp="$sansChemin $fExtTmp";
	else
		avertissement "le fichier externe \"$fe.tex\" référencé dans \"$fich\" est introuvable !";
	fi
done
fExt=$fExtTmp;

## copie du fichier de bibliographie
if [ $bib -eq 1 ]
then
	if [ $bib_file == "-" ]
	then
		bib_file=$f;
	fi
	cp "$bib_file".bib "$f".ShLaTeX
fi

## copie du fichier de style d'index
if [ ! $idx_file == "-" ]
then
	if [ -f $idx_file ]
	then
		cp $idx_file "$f".ShLaTeX
	fi
fi

## on passe dans le répertoire de travail
cd "$f".ShLaTeX

## accentuation
if [ $ascii -eq 8 ]
then
	## accentuation du fichier latex source
	echo "> Accentuation en cours...";
	echo -ne "<$fich>"
	tex8to7 $fich > /dev/null 2>&1

	## écrasement du fichier latex source
	mv -f "$fich"7 $fich

	## accentuation et écrasement des fichier latex source externes
	for fe in $fExt
	do
		if [ -f "$fe".tex ]
		then
			echo -ne "<$fe.tex>"
			tex8to7 "$fe".tex > /dev/null 2>&1
			mv -f "$fe".tex7 "$fe".tex
		fi
	done
	echo ""
fi

## compilation du fichier latex source accuentué
echo "> Lancement de la compilation latex...";
reslatex=0;
echo "> Compilation (ShLaTeX)" >latex.log
if [ ! $mode == "pdflatex" ]
then
	if [ $m -eq 1 ]
	then
		latex $fich
	else
		latex $fich >>latex.log 2>&1
	fi
	reslatex=$?;
else
	if [ $m -eq 1 ]
	then
		pdflatex $fich
	else
		pdflatex $fich >>latex.log 2>&1
	fi
	reslatex=$?;
fi
if [ $reslatex -ne 0 ]
then
	errcompil=1;
else
	echo "première compilation effectuée avec succès.";
fi

## création de la biliographie et deuxième compilation
if [ $bib -eq 1 -a $errcompil -ne 1 ]
then
	echo "> Création de la bibliographie...";
	bib_file=`expr match "/$bib_file" '.*/\(.*\)'`;
	if [ $ascii -eq 8 ]
	then
		echo "> Accentuation du fichier \""$bib_file".bib\"...";
		tex8to7 "$bib_file".bib > /dev/null 2>&1
		echo "<$bib_file.bib>"
		mv -f "$bib_file".bib7 "$bib_file".bib
	fi
	bibtex "$f" > bibtex.log 2>&1
	if [ $? -eq 0 ]
	then
		if [ ! $mode == "pdflatex" ]
		then
			echo "> Compilation (ShLaTeX)" >>latex.log
			latex $fich >>latex.log 2>&1
			reslatex=$?;
		else
			echo "> Compilation (ShLaTeX)" >>latex.log
			pdflatex $fich >>latex.log 2>&1
			reslatex=$?;
		fi
		if [ $reslatex -ne 0 ]
		then
			errcompil=1;
		else
			echo "deuxième compilation effectuée avec succès.";
		fi
	else
		echo -ne "\n";
		cat bibtex.log
		erreur "problème lors de la création de la bibliographie !";
		errbib=1;
	fi
fi

## création d'un index
if [ $idx -eq 1 -a $errcompil -ne 1 -a $errbib -ne 1 ]
then
	echo "> Création de l'index...";
	if [ $idx_file == "-" ]
	then
		makeindex "$f".idx > makeindex.log 2>&1
	else
		makeindex -s $idx_file "$f".idx > makeindex.log 2>&1
	fi
	if [ $? -ne 0 ]
	then
		echo -ne "\n";
		cat makeindex.log
		cat "$f".ilg 2>/dev/null
		erreur "problème lors de la création de l'index !";
		errindex=1;
	else
		errindex=0;
		echo "index créé avec succès.";
	fi
fi

## deuxième ou troisième compilation pour l'index et la table des matières
if [ $toc -eq 1 -a $errbib -ne 1 -a $errindex -ne 1 -a $errcompil -ne 1 ]
then
	if [ ! $mode == "pdflatex" ]
	then
		echo "> Compilation (ShLaTeX)" >>latex.log
		latex $fich >>latex.log 2>&1
		reslatex=$?;
	else
		echo "> Compilation (ShLaTeX)" >>latex.log
		pdflatex $fich >>latex.log 2>&1
		reslatex=$?;
	fi
	if [ $reslatex -ne 0 ]
	then
		errcompil=1;
	else
		if [ $bib -eq 1 ]
		then
			echo "troisième compilation effectuée avec succès.";
		else
			echo "deuxième compilation effectuée avec succès.";
		fi
	fi
fi

## déplacement du fichier dvi ou pdf
if [ $mode == "pdflatex" ]
then
	mv "$f".pdf ..
else
	mv "$f".dvi ..
fi

## on sort du répertoire de travail
cd ..

## conversion du fichier dvi
errconvert=0;
if [ $errbib -ne 1 -a $errindex -ne 1 -a $errcompil -ne 1 -a ! $mode == "pdflatex" -a ! $mode == "dvi" ]
then
	echo "> Conversion en cours...";
	if [ $mode == "dvipdf" ]
	then
		dvipdf "$f".dvi "$f".pdf > ./"$f".ShLaTeX/dvipdf.log 2>&1
		if [ $? -ne 0 ]
		then
			echo -ne "\n";
			cat ./"$f".ShLaTeX/dvipdf.log
			erreur "problème de conversion PDF !";
			errconvert=1;
		fi
	elif [ $mode == "dvips" -o $mode == "ps2pdf" ]
	then
		dvips -Ppdf "$f".dvi -o "$f".ps > ./"$f".ShLaTeX/dvips.log 2>&1
		if [ $? -ne 0 ]
		then
			echo -ne "\n";
			cat ./"$f".ShLaTeX/dvips.log
			erreur "problème de conversion PostScript !";
			errconvert=1;
		fi
		if [ $errconvert -ne 1 ]
		then
			optpstops="";
			if [ $sep -eq 1 ]
			then
				optpstops="-d";
			fi
			if [ $ppf -eq 2 ]
			then
				pstops $optpstops "2:0L@.7(21cm,0cm)+1L@.7(21cm,14.85cm)" "$f".ps "$f".2ppf.ps >/dev/null 2>&1
				mv "$f".2ppf.ps "$f".ps
			elif [ $ppf -eq 4 ]
			then
				pstops $optpstops "4:0@.5(0cm,14.85cm)+1@.5(10.5cm,14.85cm)+2@.5(0cm,0cm)+3@.5(10.5cm,0cm)" "$f".ps "$f".4ppf.ps >/dev/null 2>&1
				mv "$f".4ppf.ps "$f".ps
			fi
			if [ $mode == "ps2pdf" ]
			then
				ps2pdf "$f".ps "$f".pdf > ./"$f".ShLaTeX/ps2pdf.log 2>&1
				if [ $? -ne 0 ]
				then
					echo -ne "\n";
					cat ./"$f".ShLaTeX/ps2pdf.log
					erreur "problème de conversion PDF !";
					errconvert=1;
				fi
			fi
			if [ $z -eq 1 ]
			then
				rm -f "$f".ps.gz
				gzip "$f".ps > /dev/null 2>&1
			fi
		fi
	fi
	rm -f "$f".dvi
fi

## visualisation du fichier dvi, ps ou pdf
if [ $errconvert -ne 1 -a $errbib -ne 1 -a $errindex -ne 1 -a $errcompil -ne 1 -a $view -eq 1 ]
then
	echo "> Lancement de la visualisation du résultat.";
	case $mode in
		"dvi" )
			$v_dvi "$f".dvi >/dev/null 2>&1 & ;;
		"dvips" )
			if [ $z -eq 1 ]
			then
				$v_ps "$f".ps.gz >/dev/null 2>&1 &
			else
				$v_ps "$f".ps >/dev/null 2>&1 &
			fi ;;
		"ps2pdf" | "dvipdf" | "pdflatex" )
			$v_pdf "$f".pdf >/dev/null 2>&1 & ;;
	esac
fi

## affichage des messages d'erreur de compilation
if [ $errcompil -eq 1 ]
then
	if [ $m -eq 0 ]
	then
		echo -ne "\n";
		cat ./"$f".ShLaTeX/latex.log
	fi
	erreur "problème de compilation !";
fi

## suppression des temporaires et sortie
suppressionTemp;
fin;