La doc de `twoup` m'a fait retrouver `psnup`, grâce auquel j'ai facilement retrouvé `pstops`.
Tout d'abord j'ai, pour produire un fichier PostScript identique (au langage près) au fichier .pdf de 104 pages, exécuté la commande suivante :
$ pdf2ps fichier-a5.pdf ficher-a5.ps
Puis j'ai fait subir les pires outrages au fichier nouvellement créé :
$ pstops "2:0L@1(21cm,0)+1L@1(21cm,14.85cm)" fichier-a5.ps fichier-a4.ps
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17]
[18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32]
[33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47]
[48] [49] [50] [51] [52] Wrote 52 pages, 693744 bytes
Ça génère bien 52 pages A4 à partir de 104 pages au format A5.
Le paramètre important est ici le « 1 » qui suit l'arobase dans la séquence `2:0L@1(21cm,0)+1L@1(21cm,14.85cm)` : il indique que l'échelle ne change pas — 1 *1* pour 1.
*1*.
Oui, ladite séquence est complexe. Mais la documentation d'icelle existe, est fort claire, est accessible en ligne, par exemple [ici](https://www.commandlinux.com/man-page/man1/pstops.1.html) ainsi qu'accessible via la commande linux `man pstops` (que la page internet indiquée ci-dessus ne fait que reproduire — les pages de `man`, c'est du contenu gratuit pour certains sites en mal de trucs à raconter).
La séquence est de la forme `[modulo:]specs` où `modulo` est le *nombre de pages logiques* traitées pour obtenir *une page physique*.
`specs` est *dans mon cas* de la forme `specs+specs` : vous aurez remarqué le signe `+` au milieu de la séquence `2:0L@1(21cm,0)+1L@1(21cm,14.85cm)`. Il est logique qu'il y ait *deux* spécifications puisque `modulo` vient de spécifier que je traite *deux* pages ; la commande `pstops` les appelle `0` et `1` à chaque passage : elle se met en œuvre pour les deux premières pages, termine son travail... et fait son ménage : elle remet ses propres compteurs à zéro.
zéro. Si j'avais fait précéder ces chiffres d'un signe moins (`-`), la commande aurait inversé *l'ordre* des pages logiques traitées.
Chaque numéro de page est suivi d'un `L` (pour *left* en anglais) : cela signifie que cette page sera pivotée vers la gauche.
Chaque `L` est suivi d'une arobase suivie du chiffre 1 : cela précise l'échelle, ici *un* pour *un*. Si j'avais voulu caser, mettons, huit pages A5 *logiques* dans une page A4 *physique*, ça ne rentrerait pas : je pourrais donc réduire celles-ci (et les réorganiser dans la page — mais ça c'est une autre histoire, que la commande *pstops* permet aussi, mais ce n'est pas mon présent propos), je pourrais donc réduire celles-ci en écrivant `@0.25` : essayez !
Restent de la séquence `2:0L@1(21cm,0)+1L@1(21cm,14.85cm)` les parenthèses : elles indiquent tout simplement où mettre le coin *inférieur gauche* de mes *pages logiques* dans ma *page physique*.
En effet, la commande `pstops` considère que le point *origine* d'une page — logique *ou* physique — est son coin inférieur gauche, un peu comme si l'on posait le petit côté de la page sur l'axe des abscisses d'un repère orthonormé à deux dimensions, en prenant bien soin que celle-ci soit plaquée contre celui des ordonnées : son coin inférieur gauche aurait alors `(0, 0)` comme coordonnées. Sauf que là, il faut bien mettre le point `(0, 0)` de ma première page *logique* à 21 centimètres du point origine de la page *physique* ; et pour que ma deuxième page *logique* ne soit pas placée *sur* la première, elle est décalée en hauteur, à 14,85 cm sur l'axe des ordonnées. D'où les deux paramètres de positionnement : `(21cm,0)` et `(21cm,14.85cm)`. Tout s'explique.
En résumé :
- la séquence est de la forme `[modulo:]specs` où `modulo` est le *nombre de pages logiques* traitées pour obtenir *une page physique* ;
- `specs` est de la forme `pageno[L][R][U][H][V][@scale][(xoff,yoff)]`.
`[-]pageno[L][R][U][H][V][@scale][(xoff,yoff)]`.
Les crochets y représentent le fait qu'est *optionnel* le paramètre qui y est enserré.
C'est un certain Angus J. C. Duggan qui a rédigé ça entre 1991 et 1995. Ben merci Andrus : des années plus tard, elle *roxe* toujours, ta commande !
**Quiz :**
que se passe-t-il si j'exécute sur un fichier de plusieurs pages A4 les séquences suivantes :
$ pstops "4:-3L@.7(21cm,0)+0L@.7(21cm,14.85cm)" fichier-origine-A4.ps fichier-destination-A4-1sur2.ps
$ pstops "4:1L@.7(21cm,0)+-2L@.7(21cm,14.85cm)" fichier-origine-A4.ps fichier-destination-A4-2sur2.ps
Réponse dans la page de *man* !