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 %%%%