# \[LaTeX\] Aperçus automatiques

**URL:** <https://www.debian-fr.org/t/latex-apercus-automatiques/55600>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 1:42 UTC](https://www.debian-fr.org/t/latex-apercus-automatiques/55600 "2016-02-21T13:42:53Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![thuban](https://www.debian-fr.org/user_avatar/www.debian-fr.org/thuban/32/4177_2.png) [@thuban](https://www.debian-fr.org/u/thuban)\
**Post date:** [Février 21, 2016, 1:42 UTC](https://www.debian-fr.org/t/latex-apercus-automatiques/55600/1 "2016-02-21T13:42:53Z")

</div>

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](https://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 :

```auto
#!/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

```auto
" 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
```

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 1:43 UTC](https://www.debian-fr.org/t/latex-apercus-automatiques/55600/2 "2016-02-21T13:43:35Z")

</div>

Après quelques temps que je me dis que je dois répondre il faut bien le faire. J’ai regardé de manière très succincte ton script (rien vu de choquant).

J’ai utilisé à mon avis des solutions plus simple que les tiennes (mais probablement moins flexibles).

Avant j’avais un makefile pour compiler et après chaque compilation il lancait xpdf ainsi :

```auto

```

ce dernier avait déjà était lancé ainsi (mais c’est peut être inutile) :

```auto

```

Maintenant je fais plus simple encore, j’ouvre mes pdf avec evince et il recharge de manière automatique les pdf, donc il suffit que dans vim je lance :

```auto

```

Pour que ça compile le document et mette à jour la visualisation.

---

<div class="post-metadata">

**Author:** ![thuban](https://www.debian-fr.org/user_avatar/www.debian-fr.org/thuban/32/4177_2.png) [@thuban](https://www.debian-fr.org/u/thuban)\
**Post date:** [Février 21, 2016, 1:43 UTC](https://www.debian-fr.org/t/latex-apercus-automatiques/55600/3 "2016-02-21T13:43:35Z")

</div>

Oui, ça s’adapte, tout dépend en fait des logiciels utilisés par chacun, c’est pour ça que j’ai laissé les variables pour ça au début du script.

Tes précisions serviront bien à quelqu’un 🙂

(c’est bon de te lire!)
