%FSTYLE{/syracuse/fabrique/styles/fabrique.css} %AUTEUR{Jean-Michel Sarlat} %MAIL{jsarlat@planete.net} %DATE{4 novembre 2002} %TITRE{Insertion d'un fond de page} %P{Si un peu de programmation §gPostScript§ ne vous rebute pas, il existe plusieurs méthodes §irelativement simples§ pour insérer un fond à toutes les pages d'un document produit par §g(La)TeX§. Cela comprend l'insertion d'une image au format EPS, l'inscription de mentions spéciales ou des décorations écrites directement en PostScript.§§ À priori, toutes les méthodes présentées ici conviennent lorsque la composition suit le chemin :} <[
                (La)TeX                   DVIPS  
monfichier.tex ---------> monfichier.dvi -------> monfichier.ps
]> %P{L'insertion n'est effective qu'au moment de l'interprétation du fichier final en PostScript. } %S{Les possibilités offertes par DVIPS} %P{Lorsque DVIPS construit les pages d'un document en PostScript, il commence leur description par %C{§vn1 n2 bop ...§} } %P{Où %L{ - §vn1§ est le numéro de page tel que TeX l'a calculé (en fonction de vos choix éventuels de pagination), - §vn2§ est le numéro de page réel (en commençant à O), - §vbop§ (§ibegin of page§) est une commande définie par DVIPS qui appelle au début de son exécution une autre commande, §vbop-hook§, si elle est connue du système. } } %P{C'est cette dernière macro, laissée à notre disposition, que l'on peut définir pour insérer un fond de page ou pour exécuter tout ensemble de commandes PostScript préalable à la construction de la page. Les deux nombres §vn1§ et §vn2§ présents sur la pile doivent y rester, il suffit d'en faire une copie pour les exploiter.§§ Pour la mise en œuvre, le mieux est d'écrire un fichier contenant tout le §imatériel§ PostScript (on lui donnera, conformément à ce qui se fait déjà, l'extension §v.pro§) et de commander son chargement en tapant le plus tôt possible dans le document (La)TeX la séquence %C{§v\special{header=mesmacros.pro}§.} } %P{Il suffira maintenant de définir la commande §vbop-hook§ au moment souhaité dans le document (La)TeX en spécifiant} %C{§v\special{!userdict begin \bop_hook {mamacro} def end}§.} } %P{Cette définition (exécution de §vmamacro§) s'appliquera à toutes les pages tant qu'une nouvelle définition ne viendra pas l'écraser. } TAG:1 %SS{Insertion d'une image} %P{Le plus simple, pour commencer, est d'insérer une image au format EPS (§vfond.eps§ dans mon exemple). } FICHIER:fond.pro: /monfond { /masauvegarde save def /showpage {} def [ .5 dup scale 1075 115 translate (fond.eps) run cleartomark masauvegarde restore } def § M:ps2html: ps="fond.pro" html="fond.html" FICHIER:test01.tex: \documentclass[12pt]{article} \usepackage{t1enc} \usepackage[frenchb]{babel} \usepackage[a4paper,margin=2.25cm,nohead]{geometry} \parindent0pt \begin{document} \special{header=fond.pro} \special{!userdict begin /bop-hook {monfond} def end} \input{euclide.tex} \end{document} § FICHIER:euclide.tex:*: FICHIER:fond.eps:*: M:texhtmlpng: format="-L" fichier="test01" %P{§gCommentaires§ : %L{ - Le fichier EPS est inséré par le biais de la commande §vrun§, cela ne fonctionnera pas si vous expédiez le fichier PS vers une imprimante PostScript. Dans ce cas une des solutions est de copier le contenu du fichier EPS en lieu et place de la ligne §v(fond.eps) run§. - Le positionnement dans la page se fait, comme ici, en déplaçant l'origine et en modifiant les unités avant l'insertion. } } TAG:2 %SS{Pagination} %P{Si l'on souhaite prendre en charge l'aspect que prendra l'inscription des numéros de page, il suffit de la désactiver au niveau du fichier (La)TeX et de coder tout cela en PostScript ! } FICHIER:pagination.pro: 4 dict /Pagination exch def /getPage { 2 copy Pagination begin 1 add /b exch def /a exch def end } def /mapagination { getPage gsave Pagination begin /Times-Italic findfont 24 scalefont setfont .5 0 .3 setrgbcolor 15 730 moveto b 3 string cvs show 15 727 moveto 30 727 lineto stroke end grestore } def § M:ps2html: ps="pagination.pro" html="pagination.html" FICHIER:test02.tex: \documentclass[12pt]{article} \usepackage{t1enc} \usepackage[frenchb]{babel} \usepackage[a4paper,margin=2.25cm,nohead,nofoot]{geometry} \parindent0pt \pagestyle{empty} % pas d'indication de pages \begin{document} \special{header=pagination.pro} \special{!userdict begin /bop-hook {mapagination} def end} \input{euclide.tex} \end{document} § M:texhtmlpng: format="-L" fichier="test02" TAG:3 %SS{Image et pagination} %P{Il est bien sûr possible de coupler les deux : une image de fond et une pagination adaptée.} FICHIER:test03.tex: \documentclass[12pt]{article} \usepackage{t1enc} \usepackage{ae} \usepackage[frenchb]{babel} \usepackage[a4paper,margin=2.25cm,nohead,nofoot]{geometry} \parindent0pt \pagestyle{empty} % pas d'indication de pages \begin{document} \special{header=fond.pro} \special{header=pagination.pro} \special{!userdict begin /bop-hook {monfond mapagination} def end} \input{euclide.tex} \end{document} § M:texhtmlpngpdf: format="-L" optD="-Pamz -Pcmz -ta4" fichier="test03" TAG:4 %SS{Surimpression} %P{Jusqu'à maintenant les éléments ajoutés étaient recouverts par la page provenant du fichier DVI, ils étaient apposés avant celle-ci. Pour une surimpression, il faut agir à la fin de la construction de la page et, naturellement, c'est prévu par DVIPS à travers la commande §veop§ qui appelle §veop-hook§ si ... elle est connue du système. } FICHIER:surcharge.pro: /masurcharge { gsave /Helvetica-Bold findfont 64 scalefont setfont .6 1 .2 setrgbcolor 842 596 atan rotate 300 0 moveto (DEPRECATED) show grestore } def § M:ps2html: ps="surcharge.pro" html="surcharge.html" FICHIER:test04.tex: \documentclass[12pt]{article} \usepackage{t1enc} \usepackage{ae} \usepackage[frenchb]{babel} \usepackage[a4paper,margin=2.25cm,nohead,nofoot]{geometry} \parindent0pt \pagestyle{empty} % pas d'indication de pages \begin{document} \special{header=fond.pro} \special{header=pagination.pro} \special{header=surcharge.pro} \special{!userdict begin /bop-hook {monfond mapagination} def /eop-hook {masurcharge} def end} \input{euclide.tex} \end{document} § M:texhtmlpng: format="-L" fichier="test04" %SS{Pour finir} %P{ Il existe deux autres procédures permettant d'avoir une §iemprise§ sur le document : §vstart-hook§ et §vend-hook§, elles permettent d'agir avant la première page et après la dernière page. Cela sera pour une autre fois ! } %S{Redéfinition de showpage} %P{ Sans intervenir sur le fichier (La)TeX et sans utiliser les possibilités de DVIPS on peut arriver aux mêmes résultats que ceux présentés précédemment en adaptant la définition de la commande clé de PostScript : §vshowpage§. C'est celle qui est invoquée pour signifier la fin de la construction d'une page et le début d'une autre. } %SS{Le fichier pilote} %P{Pour rendre cette nouvelle définition opérante sur tout le document, elle est inscrite dans la VM (§iVirtual Memory§) globale, le code correspondant constitue un fichier §ipilote§ qu'il suffira de §icoller§ en tête du fichier PostScript qui va, de ce fait, être interprété autrement !} FICHIER:showpage.ps %! %%BoundingBox: 0 0 596 842 true setglobal % passage en VM globale globaldict begin % ouverture du dictionnaire "globaldict" /sysshowpage { % récupération de la vraie bonne procédure "showpage" systemdict /showpage get exec } def /flagpage false store % un drapeau pour l'initialisation /numeropage 1 store % une clé pour identifier le numéro de page /showpage { % la nouvelle définition flagpage { {surcharge} cvx exec % exécution de la procédure de surimpression sysshowpage % exécution du vrai "showpage" /numeropage numeropage 1 add store % incrémentation du numéro de page } if /flagpage true store {fond} cvx exec % exécution de la procédure de fond } def /surcharge { gsave /Helvetica-Bold findfont 64 scalefont setfont .6 1 .2 setrgbcolor 842 596 atan rotate 300 0 moveto (DEPRECATED) show grestore } def /fond { -1 -1 moveto -1 843 lineto 597 843 lineto 597 -1 lineto closepath gsave .8 setgray fill grestore newpath gsave /Times-Italic findfont 24 scalefont setfont .5 0 .3 setrgbcolor 15 730 moveto numeropage 3 string cvs show 15 727 moveto 30 727 lineto stroke grestore /masauvegarde save def /showpage {} def [ .5 dup scale 1075 115 translate (fond.eps) run cleartomark masauvegarde restore } def end % fin d'écriture dans le dictionnaire "globaldict" false setglobal %% L'idée de cette redéfinition de showpage est empruntée à Don Lancaster %% (http://www.tinaja.com) showpage %% Cette première exécution de showpage va seulement levé le drapeau "flagpage" %% et charger le fond sur la première page. A la première exécution de showpage %% dans le fichier qui va suivre, la surcharge sera apposée, la page éjectée et %% le fond placé sur la page à suivre. Et ainsi de suite .... Après le dernier %% showpage, il restera un dernier fond, visible par certains interpréteurs %% (ghostscript par exemple). § TAG:5 M:ps2html: ps="showpage.ps" html="showpage.html" FICHIER:test05.tex: \documentclass[12pt]{article} \usepackage{t1enc} \usepackage[frenchb]{babel} \usepackage[a4paper,margin=2.25cm,nohead,nofoot]{geometry} \parindent0pt \pagestyle{empty} % pas d'indication de pages \begin{document} \input{euclide.tex} \end{document} § %SS{Le test} %P{Le fichier (La)TeX est maintenant dépouillé de toute commande §v\special{...}§, le fichier PS produit par DVIPS est quelconque...} M:texhtmlpng: fichier="test05" format="-L" %P{Il suffit maintenant d'effectuer la fusion <[
showpage.ps + test05.ps > test05bis.ps
]> pour obtenir un fichier qui, après interprétation, donnera des pages ayant une toute autre apparence !} TAG:6 SH:log:cat showpage.ps test05.ps > test05bis.ps SH:log:mkdir test05bis SH:log:convert -quality 65 -colors 32 test05bis.ps png:test05bis/image TAG:7 FICHIER:adapte.sh for i in 0 1 2 ; do j=$((i + 1)) mv test05bis/image.$i test05bis/image00${j}.png done cp test05/index.html test05bis/index.html § SH:sh adapte.sh <[

]> %%EOF