Comment visualiser des fichiers non postscript sous xdvi ?
D. Barbier propose le script suivant pour inclure des fichier MPS
générés pas Metapost.
La démarche retenue est de pomper dans le .ps toutes les
définitions qui manquent à ce pauvre xdvi. Par exemple, pour voir
les dessins dans le fichier essai.tex, je fais :
makepro essai.tex
Ce qui génère essai.ps (s'il est vieux) et produit un fichier
essai.pro. Il ne reste plus qu'à mettre \special{header=essai.pro}
avant le \begin{document} et le tour est joué. Quand on modifie
le source (on rajoute des dessins), il suffit de relancer
makepro, et de recompiler le document.
Quelques remarques :
+ il faut une version de xdvi >= 20
+ on peut sans encombres utiliser plusieurs fois cette commande
sur le même fichier ;
+ pour faire le .ps final, il faut enlever
\special{header=essai.pro} et recompiler ;
+ s'il y a des problèmes d'échelle, essayer de modifier des paramètres
dans la définition de fshow et fstore.
+ je travaille en 600dpi ;
Comme je ne connais pas grand chose en PostScript, toutes les
remarques seront les bienvenues. Par exemple, les paramètres
dans fshow et fstore sont mis au pif. Quelles sont les bonnes
valeurs ? Comment faire pour que Psfrag passe à la moulinette ?
Et bien d'autres choses.
%%%% debut macro %%%%
#!/bin/sh
# D. Barbier 31/10/97 barbier at cmapx.polytechnique.fr
# Commande : makepro nom_de_fichier
# Usage : voir ci-dessous (ou taper makepro -h)
usage="Usage: `basename $0` nom[.tex]\n\
Cree un preambule \"nom\".pro qui permet l affichage
des fichiers non postscript (inclus par \"nom\") avec
xdvi (version 20 et plus).\n\
Les applications sont notamment l inclusion de fichiers
generes par Metapost."
case "$#:$1" in
1:-h*|1:--h*) echo "$usage"; exit 0;;
1:*) ;;
*) echo "$usage"; exit 1;;
esac
if test -r "$1" ; then
filetex=$1
file=`echo "$filetex" | sed -e 's/\.[^.]*$//'`
else
file=$1
filetex=$file.tex
if test ! -r "$filetex" ; then
echo "Erreur: le fichier $file n existe pas"
exit 1
fi
fi
filedvi=$file.dvi
fileps=$file.ps
filepro=$file.pro
rm -f $filepro
# On teste si la commande \special{header=...}
# est dans le fichier
# Autant ne faire qu'une compilation avant de
# voir le resultat
ligne="\\\\special{header=$filepro}"
if test -z "`grep $ligne $filetex`" ; then
echo "Rajouter la comande $ligne avant \\\\begin{document}"
exit 1
fi
echo "%!" > $filepro
# On ne compile le .tex que si necessaire. Il y a
# plusieurs possibilites pour voir la date de modification
# des fichiers :
# 1) utiliser newer fourni avec certaines distributions de TeX
# (je n'ai pas reussi a le faire marcher).
# 2) test (si l'option -nt est supportee)
# 3) creer un makefile.
# J'ai choisi cette derniere solution
echo "$filedvi: $filetex\n\tlatex $filetex\n\
$fileps: $filedvi\n\tdvips -o $fileps $filedvi\n" > .tmp$$
make -f .tmp$$ $fileps
rm -f .tmp$$
awk '
# Liste des preambules qu on veut utiliser
BEGIN {header["tex.pro"]=1;header["texps.pro"]=1}
/%%BeginProcSet:/ { if ( header[$2] == 1 ) {getline
while ( $1 != "%%EndProcSet" ) {print;getline}}}
/%%EndProlog/ {exit 0}
' $fileps |
# On supprime la creation des dictionnaires.
sed -e 's%/TeXDict [[:digit:]]* dict \([[:alpha:]]*\)%%' \
-e 's%/SDict [[:digit:]]* dict \([[:alpha:]]*\)%%' \
>> $filepro
# Ce sont les commandes qui font l affichage.
# En remplacant les commandes de finclude.pro par celles-ci,
# ca a l air de marcher
cat << EOF >> $filepro
/fstore{TeXDict begin /VResolution 120 def /Resolution 120
def end
dup dict exch{dup 4 2 roll put}repeat def}bind def
/fshow{gsave 72 TeXDict /Resolution get div -72 TeXDict
/VResolution get div scale 1
5 div dup scale get cvx exec show grestore}bind def
EOF
# Et la, ce sont les commandes de fontes
awk '
/TeXDict begin ([[:digit:]]* ){5}/ {i++}
/TeXDict begin ([[:digit:]]* ){5}/,/end/ {if (i==1) print}
/%%EndProlog/ {exit 0}
' $fileps >> $filepro
echo "Fichier $filepro genere"
exit 0
%%%% fin macro %%%%