Je viens de finir d’écrire un script permettant d’afficher au fur et à mesure de la composition d’un document LaTeX, son rendu (un peu comme le fait gummi).
Comme d’habitude, je le soumet à vos critiques.
Pour ceux que ça intéresse, je suis tombé sur ça pendant mes recherches : bbs.archlinux.org/viewtopic.php?id=107164 (cependant, il laisse moins de liberté à l’utilisateur).
Vous pouvez modifier l’éditeur, ainsi que la commande servant à compiler le .tex, le visionneur et la commande pour le recharger grâce aux variables en début de script. Par défaut, c’est vim+latex+xdvi .
Ah, et si un fichier Makefile est présent, alors c’est la commande make qui sera lancée pour la compilation :
#!/bin/sh
# Auteur : thuban (thuban@singularity.fr)
# licence : GNU General Public Licence
#
# Script permettant d'afficher régulièrement le rendu d'un document LaTeX.
# Utilisation :
# autoTexPrev.sh titre_du_document
# Variables à éditer :
EDITEUR="x-terminal-emulator -e vim" # Votre éditeur favori pour écrire du LaTeX
# (urxvt -e ed, gvim, ...)
#COMPILPROG="pdflatex -interaction nonstopmode -no-file-line-error"
COMPILPROG="latex \
-interaction nonstopmode \
-no-file-line-error" # Le compilateur de sources latex.
# (latex, pdflatex...)
# Attention à ne pas mettre de commande bloquante
# Si un fichier Makefile est présent, alors la commande
# make sera utilisée.
#VIEWER="mupdf"
VIEWER="xdvi" # Le programme qui affiche le document compilé.
# (xdvi, mupdf, gv...)
#EXTENSION=".pdf"
EXTENSION=".dvi" # Extension du document compilé (.dvi, .pdf, .ps, ...)
#RELOAD="xdotool search --class mupdf key --window %@ r > /dev/null 2>&1"
RELOAD="pkill -USR1 xdvi" # Command à lancer pour recharger le fichier.
# Laisser vide si pas besoin.
# exemple pour mupdf : xdotool search --class mupdf key --window %@ r > /dev/null 2>&1
reload() {
if [ -n "$RELOAD" ]; then
echo "On recharge ! "
eval $RELOAD
fi
}
verification () {
FILE="$1"
if [ -z "$FILE" ]; then
echo "Nom du document non précisé..."
exit 1
fi
FILENAME=$(basename "$FILE")
EXT="${FILENAME##*.}"
if [ "$EXT" != "tex" ]; then
echo "Extension invalide"
echo "Le nom du fichier doit se terminer par .tex"
exit 1
fi
DIRNAME=$(dirname "$FILE")
}
preview () {
PID=$1
FILENAME=$2
VIEWERPID=0
NEWDIFF=0
PREVDIFF=0
while [ -n "$(ps --no-headers -o comm= -p $PID)" ]; do
if [ -f $FILENAME ]; then
PREVDIFF=$NEWDIFF
NEWDIFF=$(stat --format=%Y "$FILENAME")
fi
if [ $NEWDIFF -ne $PREVDIFF ]; then
echo "On compile..."
if [ -f "Makefile" ]; then
make
else
$COMPILPROG $FILENAME
fi
if [ $? -eq 0 ]; then
echo "Compilation réussie"
reload
if [ $VIEWERPID -eq 0 ]; then
echo "Lancement du visionneur"
$VIEWER "${FILENAME%.*}$EXTENSION" &
VIEWERPID=$!
fi
else
echo "[ERREUR] Compilation échouée"
fi
fi
sleep 1
done
kill $VIEWERPID
}
verification "$1"
cd "$DIRNAME"
$EDITEUR "$FILENAME" &
PID=$!
preview $PID "$FILENAME"
kill $PID
exit 0
Pour les utilisateurs de vim :
Vous pouvez automatiquement enregistrer votre fichier toutes les n secondes en ajoutant ces lignes à votre ~/.vimrc
" Pour la sauvegarde automatique
au BufRead,BufNewFile *.tex let b:start_time=localtime()
au CursorHold *.tex call UpdateFile()
au CursorHoldI *.tex call UpdateFile()
au BufWritePre *.tex let b:start_time=localtime()
" only write if needed and update the start time after the save
function! UpdateFile()
if ((localtime() - b:start_time) >= 1 )
update
let b:start_time=localtime()
echo "Only " . (localtime() - b:start_time) . " seconds have elapsed so far."
endif
endfunction