%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