**Faire fonctionner le package `pdftricks` avec `pdflatex` sous `Windows` (Distribution `MiKteK 2.9`)**
#Table des matières
- [1 - Appeler le package pdftricks avec la bonne option [miktek]](#1)
- [2 - Pdflatex doit utiliser l'option -shell-escape](#2)
- [3 - Rendre ps2eps disponible pour pdftricks](#3)
- [4. - Installer un interpéteur Perl](#4)
- [5. - Vérifier que vous avez la bonne version de GhostScript](#5)
- [6. - Vérifier et rendre disponible le programme bbox.exe](#6)
- [7. - Editer le package pdftricks](#7)
- [8. - Exemple complet minimal (ECM) avec le package pstricks `pst-labo`](#8)
Le package pdftricks permet de compiler du code latex contenant des commandes pstricks (postscript), avec le compilateur `pdflatex` sans avoir à faire la séquence de compilation `latex->dvips->pstopdf`. C'est utile par exemple si on veut dans un même fichier utiliser des packages `pstricks` et des packages `tikz`.
Pstrick est plus ancien mais il existe une foultitude de packages très utiles et très stables et il ne fonctionne pas de base avec pdflatex. Certain package tikz plus récents ne fonctionnent qu'avec pdflatex et non pas avec latex. Pstricks et tikz permettent de faire des schémas, des dessins, des figures vectoriels.
`Le package pdftricks est mal implémenté sous Windows avec la distribution MiKTeK 2.9`. Il y a deux raisons à cela. D'abord il y a une erreur dans le package dans le traitement du cas windows (pas pour le cas unix) et ensuite `MiKTeK 2.9` ne possède pas le script perl `ps2eps` que pdftricks utilise, ni utilise (et il n'a pas non plus d'interpréteur perl. perl pour l'exécuter). Comme `ps2eps` utilise à son tour un exécutable `bbox.exe` et `Ghoscript`, il faut faire aussi attention à ces deux là. Ce post explique comment rétablir l'implémentation.
<h1 id="1">1. Appeler le package pdftricks avec la bonne option [miktek]</h1>
\usepackage[miktex]{pdftricks}
Il faut appeler le package pdftricks avec `l'option [miktek]` pour que ce soit une `commande windows` (`echo`) et non pas `unix` (`touch`) qui soit utilisée `pour créer le fichier test` qui permet de vérifier que le shell-escape est disponible.
En effet ce test est réalisé en *tentant* de créer un fichier test par un shell-escape (write18). Puis on teste l'existence effective de ce fichier : s'il n'existe pas c'est que le shell-escape n'a pas fonctionné, et donc n'est pas autorisé.
\ifmiktex%
\immediate\write18{echo rem >"\tmpfile"}%%%%%% LDL-2
\else
\immediate\write18{touch \tmpfile} %%%%%% LDL-1
\fi
<h1 id="2">2. Pdflatex doit utiliser l'option -shell-escape </h1>
Si on veut compiler avec `pdflatex` (et non pas par la chaine `latex->dvips->ps2eps`) il faut utiliser l'option de compilation shell-escape. `On peut indiquer cette même option de 4 façons différentes` :
-shell-escape
-enable-write18
--shell-escape
--enable-write18
On fait un appel système (`shell-escape`) par une commande tex `\write18{commande système}`, shell-escape et enable-write18 sont donc synonymes et peuvent être utilisés indifféremment.
Mettre un simple (-) ou double (--) dash est possible pour toutes les options de compilation de plusieurs lettres. En principe le double dash (--) est pour les options de plus de 1 lettre et le simple dash (-) est pour celles de 1 lettre. Mais quand une option à plusieurs lettres ne risque pas d'être confondue avec une série d'options à une seule lettre successives, on peut les indiquer avec un seul dash aussi.
pdflatex -synctex=1 -interaction=nonstopmode --shell-escape %.tex
<h1 id="3">3. Rendre ps2eps disponible pour pdftricks</h1>
le programmee `ps2eps` est utilisé par le package `pdftricks` lors des ses appels au shell, pour convertir les fichier postscripts (.ps) en fichier postcript encapsulé (.eps) qui seront incorporés ensuite au pdf final.
Comme `ps2eps n'est pas présent dans MikTeK 2.9` il faut le rendre disponible pour pdftricks. Pour ce faire il faut le télécharger dans un dossier qui se trouve dans le PATH. On peut le mettre dans n'importe que dossier à condition de rajouter le chemin vers ce répertoire dans la variable d'environnement PATH de windows.
Pour modifier le **PATH** de windows sous **windows 10**:
Windows+x ->Système->Paramètres associés : Informations système->**Paramètres système avancés** ->Propriétés système->**Variables d'environnement**
![alt text][2]![alt text][1]
<h1 id="4">4. Installer un interpéteur Perl</h1>
Comme ps2eps est en fait un `script perl` et qu'apparemment MiKTeK 2.9 n'a pas (ou plus ?) d'interpréteur perl, il faut en installer un par exemple en allant sur ([Perl.org][3]) qui propose `Strawberry Perl` ou `ActiveState Perl`. L'installation de l'interpréteur fait l'association entre l'extension `.pl` (pour "perl") et l'interpréteur.
En conséquence quand le package fait un appel au système pour lancer le script perl (c'est à dire un shell-escape par une commande `\write18`), il faut qu'il utilise `ps2eps.pl` au lieu de `ps2eps` et il faut éditer le package pour modifier`\immediate\write18{ps2eps.pl -f \PDFTfigname.ps}` en `\immediate\write18{ps2eps.pl -f \PDFTfigname.ps}`
<h1 id="5">5. Verifier que vous avez la bonne version de GhostScript</h1>
Le script `ps2eps` faisant des appels à `GhostScript` par `gswin32c`, il faut que ce programme soit aussi dans le PATH de windows et il faut également que vous ayez installé `la version 32 bit de GhostScript`. Si vous avez la version 64 bit, il faut éditer le script ps2eps et modifier les appels à GhostScript en conséquence.
<h1 id="6">6. Vérifier et rendre disponible le programme bbox.exe</h1>
Un dernier problème peut survenir : `ps2eps` utilise pour des `raisons de rapidité` un programme `bbox` écrit en C et le téléchargement fournit un exécutable 32 bit pour ce fichier (`bbox.exe`). Il faut que ce binaire, tout comme le script soit dans le PATH et s'il ne s'exécute pas sur votre plateforme, il faudra prendre un compilateur C et en produire un fonctionnel à partir de la source (bbox.c) fournie également par le téléchargement (je n'ai personnellement pas eu ce problème)
<h1 id="7">7. Editer le package pdftricks</h1>
Editer le package pdftricks pour corriger l'erreur au moment de la création du fichier test du shell-escape (il manque la commande `écho`)
\ifPDFTshell
% we must set it to false if \write18 doesn't work.
% Hack given by Thierry Bouche (Thanks !)
\def\tmpfile{/tmp/w18-test-\the\year\the\month\the\day\the\time}
\ifmiktex%
% MODIFICATION DU PACKAGE pdftricks.sty ICI
%\immediate\write18{rem >"\tmpfile"}%%%%%% LDL-2
\immediate\write18{echo rem >"\tmpfile"}%%%%%% LDL-2
%FIN DE LA MODIFICATION DU PACKAGE pdftricks.sty
\else
\immediate\write18{touch \tmpfile} %%%%%% LDL-1
\fi
\ifmiktex
\IfFileExists{\tmpfile.}{\PDFTshelltrue}{\PDFTshellfalse} %%%%%% LDL-4
\else
\IfFileExists{\tmpfile}{\PDFTshelltrue}{\PDFTshellfalse} %%%%%% LDL-3
\fi
\fi
et plus loin pour l'appel de gs2eps par `ps2eps.pl` au lieu de `ps2eps`
\IfFileExists{\PDFTfigname.tex}{%
\immediate\write18{latex -interaction=batchmode \PDFTfigname}
\PDFTWarningNoLine{pdftricks}
{******************************************\MessageBreak
\PDFTfigname.tex converted to \PDFTfigname.dvi\MessageBreak
******************************************}
}{}
\IfFileExists{\PDFTfigname.dvi}{%
\immediate\write18{dvips -o \PDFTfigname.ps \PDFTfigname}
\PDFTWarningNoLine{pdftricks}
{******************************************\MessageBreak
\PDFTfigname.ps generated\MessageBreak
******************************************}
}{}
\IfFileExists{\PDFTfigname.ps}{%
% MODIFICATION DU PACKAGE pdftricks.sty ICI
% \immediate\write18{ps2eps -f \PDFTfigname.ps}
\immediate\write18{ps2eps.pl -f \PDFTfigname.ps}
%FIN DE LA MODIFICATION DU PACKAGE pdftricks.sty
\PDFTWarningNoLine{pdftricks}
{******************************************\MessageBreak
\PDFTfigname.eps generated\MessageBreak
******************************************}
}{}
<h1 id="8">8. Exemple complet minimal (ECM) avec le package pstricks `pst-labo`</h1>
Pour compiler le fichier tex avec pdflatex :
`pdflatex -synctex=1 -interaction=nonstopmode -shell-escape %.tex`
On peut mettre `--shell-escape`, `--enable-write18` ou `-enable-write18` à la place de `-shell-escape`, c'est comme on veut, le résultat est le même.
Ca autorise le compilateur à appeler le shell (le système), pour utiliser les commandes systèmes en cours de compilation. Pour se faire le fichier tex contient une commande tex :
`\write18{commande système à utiliser en cours de compilation}`
\documentclass[a4paper,10pt]{article}
%\documentclass[convert,varwidth]{standalone}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[miktex]{pdftricks}
\begin{psinputs}
\usepackage{pst-labo}
\end{psinputs}
\begin{document}
\begin{pdfpic}
\psset{unit=0.4cm}
\pstDistillation(-3,-10)(7,6)
\quad
\pstDistillation[AspectMelange=Diffusion,CouleurDistillat=red](-3,-10)(7,6)
\end{pdfpic}
\end{document}
![alt text][4]
[1]: http://texnique.fr:80/osqa/upfiles/Variables_environnement.png
[2]: http://texnique.fr:80/osqa/upfiles/Variables_environnement1.png
[3]: https://www.perl.org/get.html
[4]: http://texnique.fr:80/osqa/upfiles/distillation2.tex.png