(Attention, râlerie !)
Tout le monde utilise le format PDF. Sur le principe,
c'est une bonne idée : un format standardisé de documents sous forme
vectorielle, c'est exactement ce dont on a besoin pour échanger des
documents pré-formatés et prêts à être imprimés. Sauf qu'en fait,
comme souvent dans le monde de l'informatique, il y a un truc qui est
censé être un standard, et il y a, en fait, mille et une façons de
l'interpréter, mille et une façons dont un document peut être rendu,
et mille et une petites crottes de ragondin qui viennent tout
compliquer. J'imprime mes PDF typiquement avec les
programmes evince
, xpdf
ou okular
, je suppose que, Unix étant Unix, les documents
sont convertis douze fois en PostScript et de nouveau
en PDF à travers
les entrailles incompréhensibles de
GhostScript, de CUPS, du système d'impression centralisé
mis en place à Télécom ParisPloum, et enfin du photocopieur
multifonction qui sert d'imprimante dans mon couloir (et qui accepte
certainement les PDF directement, mais ce serait trop
simple si on pouvait juste les lui envoyer !).
Par exemple, dès que j'imprime une page contenant de la
transparence, comme le format PDF supporte la
transparence mais pas le format PostScript (et je ne
comprends pas pourquoi on n'a pas juste décidé en fait, si, les
mécanismes de transparence de PDF sont rétroactivement
déclarés valables en PostScript
, ce qui aurait tout simplifié),
quelque part dans ces entrailles incompréhensibles, un programme
décide que hum, je ne peux pas fabriquer un PostScript avec de la
transparence, ce n'est pas possible !, rasterisons ça en image bitmap
à la place
, et la page sort à l'impression complètement différente
du reste du document, et beaucoup plus moche. (J'aimerais bien
trouver comment lui dire bordel, produis un PostScript contenant de
la transparence, ou passe par le format PDF tout du long
puisque l'imprimante le supporte, ou à la limite, démerde-toi pour que
la rasterisation produise un résultat parfaitement indiscernable à
l'œil nu si elle est fait à ton niveau ou plus bas dans la chaîne,
mais en tout cas, arrange-toi pour que les pages ayant de la
transparence dans le PDF ne s'impriment pas différemment
des autres !
; mais ce n'est pas tellement ça l'objet de ma
râlerie aujourd'hui.)
Parfois mes documents s'impriment à l'envers ou sont agrafés au mauvais endroit ou autre bug bizarre : pendant longtemps, tous les documents PDF que je récupérais de l'arXiv étaient imprimés avec la première page à l'envers (et juste la première page), certainement à cause du numéro que l'arXiv appose sur le côté de la première page, mais je ne comprends pas le rapport exact de cause à effet ; à un autre moment, tous les PDF que j'imprimais recto-verso n'étaient recto-verso qu'à partir de la page 2, la page 1 s'imprimant toujours seule sur une page (et du coup, la parité des pages était cassée). Bref, toutes sortes de bugs incompréhensibles, que j'ai tendance à mettre sur le dos du format PDF.
Mais parmi ces bugs, il y en a un que je rencontre particulièrement
souvent. Il semble apparaître sur des PDF issus de
vieilles versions de TeX, ou de vieilles sources, ou quelque chose de
ce goût. J'en ai un exemple
avec cet article
(cliquez sur PDF dans la
colonne download
à droite). Selon l'outil que
j'utilise pour lire ce PDF, soit c'est très lent, soit
c'est très moche, soit il me crache des bordées d'injures.
Notamment, xpdf
, quand je lis un tel PDF,
affiche des quantités énormes de lignes Syntax Warning: Bad
bounding box in Type 3 glyph, ce qui donne une petite idée de
ce qui se passe (les polices de Type 3 sont les polices
PostScript/PDF les plus générales, celles qui peuvent
contenir n'importe quelles commandes PostScript, et je suppose
qu'elles sont générées par pdfTeX ou je ne sais lequel des mille et un
mécanismes de conversion d'un fichier TeX en PDF — parce
que ce serait Trop Facile s'il y en avait un seul — lorsque la police
n'existe pas au format vectoriel compatible PDF et qu'il
faut faire appel à Metafont pour générer des polices bitmap ; et
une bounding box incorrecte doit signifier que la
police déclare des métriques qui sont incompatibles avec ce qu'elle
contient réellement ; mais ce que tout ça ne m'explique pas, c'est
comment on s'est retrouvé à produire des polices Type 3 ayant
une bounding box incorrecte ni, a
fortiori, comment réparer ce problème).
Et un des symptômes de ce phénomène de fichiers PDF
bizarrement cassés, c'est que parfois, quand on les manipule, tous
les signes moins disparaissent. Par exemple, si je prends
le PDF que j'ai donné ci-dessus comme exemple, et que je
le passe par pdftocairo -pdf
(qui est censé transformer
un PDF en un PDF absolument identique, mais
parfois ça aide à nettoyer des problèmes périphériques au
format PDF), à la page 2, vers le milieu de la 4e ligne
du dernier paragraphe, où on est censée lire the
first i−1 induction steps
, le texte devient the
first i 1 induction steps
(le signe moins disparaît
complètement, quoi).
J'aimerais bien comprendre comment une merde de ce genre est
possible. Je devine que le problème est lié au fait que
la bounding box du signe moins est très peu
haute, peut-être même de hauteur nulle (ce qui serait évidemment un
bug en soi : aucun caractère visible ne peut avoir une boîte de taille
nulle), mais ça ne m'explique pas comment ce problème est apparu pour
commencer. Si le format PDF était bien foutu, ça devrait
être possible de dire avec clarté soit que le fichier PDF
distribué par l'arXiv est cassé (i.e., le programme qui l'a produit
est cassé), soit que pdftocairo
l'est, mais en tout cas
que l'un d'entre eux doit être réparé. Mais je soupçonne que le
format n'est pas assez bien défini pour qu'on puisse dire qui est
coupable (et c'est peut-être « les deux »).
Je donne ici l'exemple de pdftocairo
, on va me dire,
je n'ai qu'à ne pas l'utiliser. Certes, mais il y a toutes sortes
d'autres contextes où le même problème se produit. J'ai déjà entendu
des histoires de matheux qui ont envoyé des articles à publier et
quand le journal est sorti, tous les signes moins manquaient (sur le
papier). Ce qui, s'agissant d'un article de maths, est un peu
gênant ; et un peu mystérieux parce que ce n'était sans doute pas
la première fois que le journal rencontrait un article produit par
TeX. Le point commun entre tous les contextes « les signes moins
disparaissent » est obscur (voir par
exemple ce
vieux fil de discussion comp.text.tex
, qui n'a
visiblement aucun rapport avec pdftocairo
). On trouve un
bug de ce genre (le même ?) rapporté contre evince
dans ce
bug-report, qui est
censé avoir
été corrigé dans Cairo, mais soit la correction n'a pas atteint la
version 0.48.0 de pdftocairo
que j'utilise, soit c'est
encore autre chose (de toute façon, je doute que ce soit le même bug
que celui signalé dans le fil comp.text.tex
vieux de
17 ans, donc des variantes du même phénomène doivent réapparaître
périodiquement).
Mise à jour
() : En compilant
un cairo
récent (version 1.15.12
) et
un pdftocairo
récent (poppler-0.67.0
), le
problème du signe moins qui disparaît ne se pose plus. (Comme je le
dis en commentaire, c'est bien ma veine de tomber sur un bug vieux de
vingt ans(?) et de découvrir qu'il est corrigé dans la
version juste après celle que j'ai sur mon PC…)
Ça ne m'empêche pas de penser que ce PDF est foireux (ou
alors que les polices bitmap sont vraiment très mal gérées par tous
les programmes que j'ai), ne serait-ce que compte tenu de la lenteur
de l'affichage et de la laideur du résultat à l'écran : c'était
peut-être un bug de pdftocairo
de ne pas reproduire les
caractères ayant une bounding box nulle, mais
c'est aussi un bug du document si des caractères non vides
ont une bounding box nulle.
Et surtout, j'aimerais bien savoir comment réparer
ces PDF tout cassés : comment les transformer en des
fichiers qui s'affichent à l'écran, avec tous les programmes que je
suis susceptibles d'utiliser, de façon jolie et semblable à ce qui
sortira effectivement de l'imprimante. (Dans certains cas,
j'utilise pdftocairo
à cet effet, mais comme je viens
d'expliquer, là, ça ne marche pas.) Si c'est
la bounding box qui pose problème, est-ce qu'il
n'y a pas un outil pour recalculer la bounding
box de tous les caractères du PDF, ou pour
l'augmenter de 1 ou 2 points ? (ou, si ça ne suffit pas, la rendre
égale à la page tout entière, d'ailleurs). Si j'en juge par
l'ancienneté de l'article de l'arXiv vers lequel j'ai fait un lien, ce
problème existe depuis au moins 20 ans, c'est impressionnant qu'il
continue à poser problème maintenant…
(Merci d'avoir fait semblant d'écouter ma râlerie et merci d'avance de vos témoignages de soutien et de compassion.)