Une option de style pour adapter les styles standard de document L^{A}TEX au papier de format A4^{∗}^{†}

Nico Poppelier TEXnique Washingtondreef 153 3564 KD Utrecht

      Poppelier@elsevier.nl

Johannes Braams TEXniek Kooienswater 62 2715 AJ Zoetermeer

                               JLBraams@cistron.nl

Imprimé le 31 octobre 2001

Résumé Cet article décrit une nouvelle option de style qui peut être utilisée avec les styles de document diffusés avec les distributions L^{A}TEX. Elle modifie la mise en page afin de la rendre conforme au format de papier communément utilisé en Europe, le A4 portrait.

1 Introduction

Ce fichier est basé sur les options de style de document A4.sty et A4wide.sty, qui peuvent être trouvés dans l’archive Rochester de style. L’option de style originale A4.sty duquel nous sommes partis a été écrit par John Pavel, et date de mai 1987. Cette option change seulement la taille verticale du texte en augmentant le nombre de lignes sur une page. L’option de style A4wide.sty a été écrite par Jean-François Lamy, et date de juillet 1986. Cette option augmente seulement la largeur du texte.

2 Buts et choix de design

Comme beaucoup de gens avant nous, nous trouvions que la mise en page dans les styles de document L^{A}TEX standard trop tournée vers les tailles américaines de papier, plus larges que le papier A4, mais aussi notablement moins hautes.

Notre but était d’obtenir une mise en page convenable pour le format A4 et les textes lisibles produits. Il y a un certain nombre de paramètres de mise en page qui influencent la lisibilité d’un texte. Un paramètre d’une importance majeure est le nombre de mots (ou de caractères) sur une ligne. Le nombre maximum de mots par ligne est de 10 à 12 pour une lisibilité optimale, une règle qui peut être trouvée dans la littérature typographique (nous avons utilisé [1]). D’où un nombre de caractères par ligne variant entre soixante et soixante-dix.

∗Ce fichier a pour numéro de version ?– dernière révision ?.

†traduit en Français par S. Le Callonnec le 31 janvier 2000. Titre original : « A style option to adapt the standard L^{A}TEX document styles to A4 paper »

Un autre paramètre important est la quantité d’espace blanc entourant le texte. Ici, il nous faut distinguer les textes imprimés sur le seul recto des textes imprimés recto-verso (dos à dos). Dans le premier cas, les marges sur les pages paires et impaires devraient être identiques ; dans le second, il convient de s’assurer que les textes des deux côtés se chevauchent. De plus, un document imprimé peut être relié d’une façon ou d’une autre ; il doit donc y avoir suffisamment d’espace dans les marges intérieures^{1} du texte afin de permettre ceci.

Il y a encore une chose à prendre en compte lors de la préparation d’une mise en page. L^{A}TEX offre en effet la possibilité d’utiliser des notes en marge et si quelqu’un désire les utiliser, celles-ci doivent bien sûr s’adapter sur le papier.

Nous avons donc les objectifs suivants :

1. Choisir la largeur du texte de façon à ce qu’il y ait de soixante à soixante-dix caractères sur une ligne ;

2. Veiller à ce que dans les documents imprimés recto-verso, les textes qui terminent sur les deux côtés de la feuille se chevauchent ;

3. Laisser assez d’espace dans les marges intérieures pour permettre la reliure du document ;

4. Laisser assez d’espace dans les marges extérieures pour les notes de marge si elles sont utilisées.

3 Mise à jour pour L^{A}TEX 2ε

Avec les nouvelles classes de document, ce package n’est peut-être plus aussi utile, car le papier A4 est maintenant géré grâce à l’option a4paper. Ce package ajoute toutefois une fonctionnalité qui n’est pas disponible dans les classes de document standard. Avec L^{A}TEX 2ε, vous pouvez maintenant utiliser ce package avec la commande :

     \usepackage[widemargins]{a4}

L’option widemargins exécute la commande \WideMargins.

1Pour les impressions recto-verso, la marge intérieure est la marge de gauche sur les pages impaires et la marge de droite pour les pages paires ; pour les impressions recto, c’est toujours la marge de gauche.

4 L’implémentation

4.1 Le point de départ

Notre intention était ainsi de modifier certaines des décisions de design des styles de document standard. Sachant que nous n’étions pas les premiers à nous pencher sur le problème, nous avons commencé par regarder ce qui était déjà disponible. Nous avons abouti aux deux options mentionnées plus haut, qui ne sont pas disponibles publiquement. Il doit exister sans aucun doute beaucoup plus de fichiers de ce genre, dont certains ne sont sûrement que des modifications de ces deux fichiers.

Nous avons étudié la mise en page produite par ces deux options et n’avons pas été satisfaits du résultat. Les deux options originales a4 et A4wide modifient seulement un aspect de la mise en page. La première chose à faire était de mettre ces deux fichiers ensemble. Le résultat de la mise en page était encore insatisfaisant car les lignes du texte pour les options 10 points et 11 points contenaient en moyenne quatre-vingts caractères ou plus.

4.2 Quoi d’autre ?

\textwidth Comme le résultat nous donnait des lignes contenant trop de caractères, nous \marginparwidth avons diminué \textwidth pour obtenir des lignes contenant environ soizante à

soixante-dix caractères pour les trois options de taille. Mais il fallait continuer le travail. En effet, utiliser notre nouveau A4.sty associé à l’option twosided se révélait avoir un inconvénient : quand le document était imprimé en recto-verso, les textes sur les deux côtés d’une feuille de papier ne se chevauchaient que partiellement, ce qui n’est pas du plus bel effet. Nous avons résolu ce problème en modifiant la largeur des marges pour l’impression recto-verso. Au même moment, nous avons modifié \marginparwidth afin que si quelqu’un utilise les notes marginales, celles-ci s’ajustent parfaitement sur le papier au lieu de sortir du papier, ce qui évidemment les auraient rendues illisibles.

\WideMargins Les décisions décrites ci-dessus permettent pour les notes de marge d’être imprimées le long du texte normal. Cependant, si quelqu’un utilise énormément les notes de marge, la mise en page résultante n’est pas très satisfaisante car si la largeur entière réservée aux notes marginales est utilisée, elles prennent trop d’espace dans les marges extérieures. Pour ce cas-là, nous avons défini la macro \WideMargins. Cette macro modifie les paramètres de mise en page de telle sorte que la largeur réservée aux notes marginales passe à 1,5 pouces. Pour parvenir à cela, la largeur du corps principal du texte est diminuée. Cette macro est destinée à n’être utilisée que dans le préambule du document.

4.3 Les modules docstrip

Les modules suivants ont été utilisés pour diriger docstrip dans la production des fichiers externes :

driver  produit un fichier pilote pour la documentation
package produit un fichier package

4.4 Produire la documentation

Un court pilote est fourni et peut-être extrait, si nécessaire, par le programme docstrip fournit avec L^{A}TEX 2ε.

1 ⟨∗driver⟩

 2 \NeedsTeXFormat{LaTeX2e}

3 ⟨/driver⟩

 4  %
 5 \documentclass{ltxdoc}

6 ⟨/driver⟩

 7 %

8 ⟨∗driver⟩ %

 9 \DisableCrossrefs

10

11 \CodelineIndex

12

13 \MakeShortVerb{\|}
14 \newcommand\Lopt[1]{\textsf{#1}}
15 \newcommand\file[1]{\texttt{#1}}
16 \begin{document}

17

18 \DocInput{f-a4.dtx}

19

20 \end{document}

21 ⟨/driver⟩

4.5 Le code

Déclarer l’option widemargins.

22 ⟨∗package⟩

23 \ifx\documentclass\undefined
24 \else
25 \DeclareOption{widemargins}{\WideMargins}
26 \fi
\topmargin D’abord, nous redéfinissons les \textheight et \topmargin. \topmargin est la

distance entre le point de référence sur la page et le haut de la page de texte. Dans la plupart des cas, de l’espace blanc supplémentaire n’est pas nécessaire car un pouce d’espace en haut de la page suffit.

27 \topmargin 0pt

\textheight Le paramètre dimensionnel \textheight donne la hauteur totale du texte, y compris les notes de pieds de page et figures, et à l’exception des entêtes et pieds de page. Cette hauteur est donnée en un nombre entier de fois \baselineskip, ce qui donne un nombre entier de lignes sur une page.

Nous devons inclure les définitions des paramètres dimensionnels appropriés pour chacun des cas 10 points, 11 points et 12 points. Nous faisons ceci à l’aide d’une instruction « case » :

28 \ifcase \@ptsize
29  \textheight 53\baselineskip

qui modifie la hauteur du texte pour les textes produits avec une taille de dix points :

30 \or
31  \textheight 46\baselineskip

la même chose pour onze points :

32 \or
33  \textheight 42\baselineskip

et pour douze points. Enfin, nous fermons l’instruction \ifcase :

34 \fi

La seule chose qu’il reste à faire est d’ajouter \topskip à \textheight. La valeur de \topskip semble toujours avoir la valeur de 10 pt.

35 \advance\textheight by \topskip

\textwidth \oddsidemargin \evensidemargin Ceci est la partie « verticale » du travail. Maintenant, nous avons encore du travail à faire pour obtenir des choses correctes horizontalement. Une fois encore, il nous faut faire une distinction entre les différentes tailles de caractères car soixante caractères de onze points prennent plus de place que soixante caractères de dix points. Mais il y a plus à prendre en compte : si les documents sont imprimés rectoverso, les textes des deux côtés du papier doivent se chevaucher complètement. Ceci peut être obtenu en assignant des valeurs appropriées à \oddsidemargin et\evensidemargin, les paramètres qui définissent les marges de gauche sur les pages impaires et paires, respectivement.

Nous commençons d’abord par une instruction pour distinguer les cas pour chaque taille de caractères.

36 \ifcase \@ptsize

Puis nous spécifions la largeur du texte.

37  \textwidth      5.00in

Nous spécifions également la largeur des notes marginales. Elles doivent avoir une largeur raisonnable pour être d’une quelconque utilité, et devraient être identiques que ce soit pour une impression recto seul ou pour une impression recto-verso.

38  \marginparwidth 1.00in

Ici, nous avons besoin d’une instruction if pout tester si l’option twosided a été spécifiée.

39 \if@twoside

Si oui, les valeurs appropriées sont attribuées aux paramètres de marge

40  \oddsidemargin  0.55in
41  \evensidemargin 0.75in
42 \else

Si l’option twosided n’est pas utilisée, les deux paramètres de marge doivent avoir la même valeur, pour que les textes sur les pages consécutives aient la même place sur le papier.

43  \oddsidemargin  0.55in
44  \evensidemargin 0.55in

À présent, nous refermons l’instruction if.

45 \fi

Nous en avons terminé avec les modifications pour les caractères de 10 pt. Nous devons à présent faire quelque chose de similaire avec le 11 pt.

46 \or
47  \textwidth      5.20in
48  \marginparwidth 1.00in
49 \if@twoside
50  \oddsidemargin  0.45in
51  \evensidemargin 0.65in
52 \else
53  \oddsidemargin  0.45in
54  \evensidemargin 0.45in
55 \fi

Une fois de plus, mais cette fois pour le 12 pt.

56 \or
57  \textwidth      5.70in
58  \marginparwidth 0.80in
59 \if@twoside
60  \oddsidemargin  0.20in
61  \evensidemargin 0.40in
62 \else
63  \oddsidemargin  0.20in
64  \evensidemargin 0.20in
65 \fi

Enfin, nous refermons l’instruction « case ».

66 \fi

\WideMargins Cette macro est assez délicate : il faut qu’elle détermine quelle taille de caractères est utilisée, si le document est imprimé en recto-verso, et si \reversemarginpar agit. \reversemarginpar fait apparaître les notes marginales dans la marge du côté opposé au placement normal.

67 \def\WideMargins{%

Du fait que pour les différentes tailles de caractères, les changements des paramètres sont similaires, la macro \WideMargins utilise une macro interne,

\@widemargins.

\ExtraWidth Afin de garder la longueur supplémentaire requise en largeur pour les notes marginales, une nouvelle dimension est définie.

68 \newdimen\ExtraWidth

D’abord, déterminons la taille des caractères, puis appelons \@widemargins pour modifier la largeur des marges avec la quantité donnée par \ExtraWidth.

69 \ifcase \@ptsize

Pour les textes en 10 et 11 points, la largeur des notes de marge est déjà de 1 pouce ; nous l’augmentons donc d’un demi-pouce. Nous ôtons un demi-pouce de la largeur du texte et modifions les marges de manière appropriée.

70  \ExtraWidth = 0.5in
71  \@widemargins
72 \or
73  \ExtraWidth = 0.5in
74  \@widemargins
75 \or

Pour des textes en 12 points, les notes marginales ont une largeur de seulement 0,8 pouce ; il nous faut donc leur ajouter maintenant 0,7 pouce pour qu’elles passent à une largeur de 1,5 pouce.

76  \ExtraWidth = 0.7in
77  \@widemargins

Cette macro ne doit être appelée qu’une fois, dans le préambule du document, c’est pourquoi elle devient équivalente à \relax dès que sa tâche est terminée.

78 \fi\let\WideMargins\relax\let\@widemargins\relax}
\@preamblecmds Nous ajoutons \WideMargins à \@preamblecmds, qui est une liste des commandes

qui ne doivent être utilisées que dans le préambule d’un document.

79 {\def\do{\noexpand\do\noexpand}
80 \xdef\@preamblecmds{\@preamblecmds \do\WideMargins}

81 }

\@widemargins Cette macro modifie les paramètres des marges. Pour cela, elle utilise la variable dimensionnelle \ExtraWidth, définie par \WideMargins.

\ExtraWidth est d’abord retirée à \textwidth et ajoutée à \marginparwidth.
82 \def\@widemargins{%
83  \global\advance\textwidth by -\ExtraWidth
84  \global\advance\marginparwidth by \ExtraWidth

Ensuite, nous modifions les marges, mais la valeur du test \if@twoside doit être prise en compte. Du fait que nous ayons un autre test (\if@reversemargin), nous ajoutons un autre niveau de macros pour modifier les paramètres de marge

85  \if@twoside
86  \tw@sidedwidemargins
87  \else
88  \@nesidedwidemargins
89  \fi}

\tw@sidedwidemargins Normalement, les notes marginales sont imprimées dans les marges extérieures, donc nous devons augmenter \evensidemargin pour préserver le balancement du texte des deux côtés de la page. Mais si \reversemarginpar est activé, il nous faut augmenter la valeur de \oddsidemargin et diminuer celle de \evensidemargin en conséquence.

90 \def\tw@sidedwidemargins{%
91  \if@reversemargin

Remarquez que pour les documents imprimés recto-verso, \evensidemargin est plus large que \oddsidemargin ; cette différence en largeur est transférée à l’autre marge.

92  \@tempdima=\evensidemargin
93  \advance\@tempdima by -\oddsidemargin
94  \advance\oddsidemargin by \ExtraWidth
95  \advance\oddsidemargin by \@tempdima
96  \advance\evensidemargin by -\@tempdima
97  \else

Si les notes marginales vont sur le côté normal de la feuille, seule \evensidemargin doit être augmentée.

98  \advance\evensidemargin by \ExtraWidth
99  \fi}

\@nesidedwidemargins Pour les documents imprimés d’un seul côté, les deux marges doivent avoir la même largeur. Le placement par défaut des notes marginales est dans la marge de droite, donc si \reversemarginpar n’est pas actif, les paramètres de marge n’ont pas besoin d’être modifiés. Si cette commande est effective, les longueurs \oddsidemargin et \evensidemargin nécessitent toutes deux d’être augmentées.

100 \def\@nesidedwidemargins{%
101  \if@reversemargin
102  \advance\oddsidemargin by \ExtraWidth
103  \advance\evensidemargin by \ExtraWidth
104  \fi}

La commande \ProcessOptions ne peut être exécutée qu’après la définition

de \WideMargins. Différer l’exécution de \WideMargins avec \AtBeginDocument

ne marche pas, le changement de \textwidth venant alors trop tard à cause du

temps mis par \@begindocumenthook pour être exécuté par \begin{document}.
105 \ifx\documentclass\undefined
106 \else
107 \ProcessOptions
108 \fi

109 ⟨/package⟩

5 Conclusion

Nous avons présenté une nouvelle approche pour adapter aux dimensions du papier au format A4 la mise en page des styles de document appartenant aux distributions standards de L^{A}TEX. La largeur des notes de marge a dû être prise en compte et un moyen d’obtenir des notes marginales plus larges aux dépens de lignes courtes dans le corps principal du texte a été fourni.

Références

[1] K.F. Treebus. Tekstwijzer, een gids voor het grafisch verwerken van tekst. SDU Uitgeverij (’s-Gravenhage, 1988). Un livre hollandais sur la mise en page et la typographie.

Historique des changements

1.0

Général : Changement des marges

pour l’impression recto . . . . . . 1 1.1

Général : Ajout des macros

\WideMargins . . . . . . . . . . . . . 1 1.2

Général : Ajustement consolidé de

\marginparwidth . . . . . . . . . . 1

1.2a

Général : Remplacement de

\typeout par \wlog . . . . . . . . 1

1.2b

Général : Mise à jour pour L^{A}TEX 2ε 1 Retiré quelques restes de ltugboat . . . . . . . . . . . . . . . . . . . . 1 1.2c

Général : Ajout de \ProcessOptions

. . . . . . . . . . . . . . . . . . . . . . . . 1 Déplacement de l’exécution de

\ProcessOptions à la fin du fi-

chier . . . . . . . . . . . . . . . . . . . 1 Package a4 au lieu du package A4 . . . . . . . . . . . . . . . . . . . . . 1 Passage du \wlog au cas de L^{A}TEX2.09 . . . . . . . . . . . . . . . . 1

v1.2d

Général : Déplacement de la partie identification au début du fichier . . . . . . . . . . . . . . . . . . . 1