Notes de bas de page en mode multi-colonne^{∗}

Frank Mittelbach Electronic Data Systems (Deutschland) GmbH Eisenstraße 56 N15 D-6090 Rüsselsheim

Traduction française par Jean-Pierre Drucbert^{†}

31 octobre 2001

1 Préface à la version 1.1

Cette nouvelle version est globalement inchangée par rapport à la précédente. J’ai modifié les macros pour qu’elles fonctionnent avec L^{A}TEX 2ε et utilisé quelques-unes de ses facilités. Par exemple, la commande \preparefootins est maintenant appelée automatiquement au \begin{document}, permettant ainsi à l’utilisateur d’ajuster la longueur \textheight dans le préambule.

Il n’est pas étonnant que j’ai été obligé de modifier certaines macros parce qu’elles utilisaient des routines d’affichage de L^{A}TEX de très bas niveau. Heureusement, cela n’est pas nécessaire pour la plupart des packages quand on veut les mettre à jour pour utiliser la syntaxe de L^{A}TEX 2ε.

J’ai aussi mis à jour la documentation pour la rendre conforme à la terminologie de L^{A}TEX 2ε; par exemple, ceci est un « package » puisque les classes de document n’auront pas à se soucier de lui. Cependant, il est fort probable que j’ai oublié des corrections.

2 Introduction

Le positionnement des notes dans une mise en page sur plusieurs colonnes a toujours été un souci pour moi. L’approche prise par L^{A}TEX (c’est-à-dire placer les notes séparément en dessous de chaque colonne) peut être parfaite s’il n’y a à peu près aucune note. Mais le résultat peut sembler maladroit si les deux colonnes contiennent des notes, en particulier si elles occupent un espace différent.

Dans le package multicol [5], j’utilise des notes en bas de page sur toute la largeur de la page, mais là encore le résultat n’est pas très agréable à l’œil car des notes courtes provoquent des vides blancs indésirables. Bien sûr, l’objectif principal de ce package était d’avoir un algorithme d’équilibrage des colonnes permettant de changer le nombre de colonnes sur la même page. Avec cette possibilité, la place naturelle des notes semblait être le bas de la page^{1} mais en regardant le résultat il semble préférable d’éviter complètement les notes dans une telle mise en page.

Une autre possibilité est de transformer les notes de bas de page en notes finales, c’est-à-dire de les imprimer à la fin de chaque chapitre ou à la fin de l’ensemble du document. Mais je suppose que chaque personne qui a un jour lu un livre ainsi réalisé^{2} sera de mon avis : il est pénible de chercher les notes en fin d’ouvrage et de revenir au texte, en un va-et-vient incessant, si bien que le lecteur est tenté d’ignorer

∗Le package L^{A}TEX ftnright.sty qui est décrit ici a le numéro de version ? en date du ?.

†Dernière mise à jour le 29/01/2000

1. Vous ne pouvez pas utilisez des notes par colonne en bas de page, puisque le nombre de colonnes peut changer dans la page.

2. En particulier les livres écrits par des historiens ou des philosophes.

complètement les notes finales.

Quand j’ai écrit l’article sur « Les extensions futures de TEX » [6], j’étais de nouveau peu satisfait de l’aspect des notes, et puisque cet article devait montrer certains aspects de la typographie de haute qualité, j’ai décidé de m’attaquer au problème des notes en bas de page en modifiant la routine de sortie de L^{A}TEX dans ce but. La mise en page utilisée était inspirée du l’almanach de la Gutenberg Gesellschaft Mainz [2]. Plus tard, j’ai vu qu’elle était aussi recommandée par Jan White [9]. Pour la mise en page des notes, j’ai aussi consulté les ouvrages de Jan Tschichold [8] et Manfred Simoneit [7], que je recommande à quiconque lisant l’allemand.

2.0.1 Nouvelle mise en page

Le résultat de ce travail est présenté ici et le lecteur peut juger par lui-même de sa réussite ou de son échec^{3}. L’idée principale de cette mise en page est de rassembler les notes de toutes les colonnes d’une page et de les placer toutes ensemble en bas de la colonne de droite. En permettant suffisamment d’espace entre les notes et le texte et, de plus, en composant les notes dans des caractères plus petits^{4}, j’ai décidé qu’il était possible de supprimer le trait habituel de séparation entre le texte et les notes qui est d’ordinaire utilisé par la plupart des publications réalisées avec TEX^{5}. De plus, j’ai décidé que les numéros de notes^{6} seront sur la ligne de base et non plus surélevés comme des exposants^{7}.

Finalement ceci semble donner une bonne mise en page et, ce qui est assez surprenant, les modifications nécessaires sur la routine de sortie de L^{A}TEX furent néanmoins étonnamment simples.

2.0.2 Utilisation

Ce package peut (théoriquement) être utilisé avec tout autre package de L^{A}TEX qui ne modifie pas les trois éléments internes qu’elle modifie déjà^{8}. Dans la plupart des cas, il est préférable de charger ce package en dernier dans le préambule pour s’assurer que les paramètres ne sont pas modifiés par d’autres packages.

Il est dommage que le L^{A}TEX actuel ne permette pas de faire ces changements sans modifier les routines internes de L^{A}TEX. Pour le futur L^{A}TEX3, nous ajouterons certainement la possibilité de faire de tels changements plus facilement.

3 Le générateur de documentation

La première partie du code contient le fichier TEX générant la documentation, c’est-à-dire le document que vous êtes en train de lire. Il est extrait de ce fichier par le programme docstrip. Si vous ne voulez faire aucun changement dans cette documentation, vous pouvez lancer L^{A}TEX 2ε directement sur le fichier .dtx pour obtenir la documentation.

1 ⟨∗driver⟩

                                                    2 \documentclass[twocolumn]{article}

3

                                                    4 \usepackage{ftnright}
                                                    5 \usepackage{doc}

3. Notez que ce package ne fait que modifier l’emplacement des notes. Comme cette documentation utilise le package doc [1], qui affiche des nombres en police minuscule pour visualiser les numéros de lignes du code source, le rendu général n’est pas parfait. Ce package fait maintenant partie intégrante de L^{A}TEX 2ε.

4. La mise en page pour TUGboat utilise la même taille de caractères pour les notes et le texte, ce qui donne, à mon avis, trop d’importance aux notes.

5. Il est possible de rétablir ce trait, en redéfinissant la commande \footnoterule [3, p. 156], mais il faut noter que cette commande ne doit occuper aucun espace vertical, il faut donc avoir recours à un espacement négatif pour compenser l’épaisseur du trait.

6. Les petits numéros ou symboles, par exemple le « 6 » au début de cette note.

7. Bien sûr, ceci n’est fait que pour la marque qui précède le texte de la note et non pour celle servant d’appel de note dans le texte principal, où un numéro ou un symbole surélevé en petits caractères permet de garder le fil du texte, sans interruption.

                                                           8. Ce sont les macros \@startcolumn, \@makecol et

\@outputdblcol comme nous le verrons ci-dessous. Bien sûr, ce package n’a d’effet qu’avec une mise en page sur deux colonnes (comme ltugboat) due à la classe du document, à une option de classe twocolumn, ou après une commande

                                                          \twocolumn.

6 ⟨/driver⟩

7 ⟨∗driver⟩

8 \AtBeginDocument{\MakeShortVerb{\|}}

9

10 \newcommand{\TUB}{{\sl TUGboat\/}}
11 \renewcommand\DescribeMacro[1]{\fbox
12  {\PrintDescribeMacro{#1}}}
13 \renewcommand\DescribeEnv[1]{\fbox
14  {\PrintDescribeEnv{#1}}}
15 \renewcommand\PrintMacroName[1]{}

16

17 \setlength{\parindent}{1em}
18 \setlength{\parskip}
19  {2pt plus1pt minus1pt}
20 \setlength{\headsep}{20pt}
21 \setlength{\columnsep}{1.5pc}
22 \renewcommand{\bottomfraction}{.4}

23

24 \flushbottom
25 \CodelineIndex
26 \RecordChanges      % produce history
27 \EnableCrossrefs

28

29 \setcounter{IndexColumns}{2}
30 \IndexPrologue{\section{Index}
31 Les numéros représentent les ligne
32 du code source où l'entrée apparait,
33 en soulignement lorsqu'il s'agit de
34 sa définition.}

35

36 \begin{document}
37 \DocInput{f-ftnright.dtx}
38 \end{document}

39 ⟨/driver⟩

4 The Implementation

As usual, we start by identifying the current version of this package file in the transcript file.^{9} This actually happens at the very top of this file so it is commented out here.

\ProvidesPackage{ftnright}[\filedate\space
LaTeX2e package \fileversion]

To implement the layout described, above we have to distinguish between the left and the right column on a page. For this purpose L^{A}TEX maintains the switch \if@firstcolumn. When assembling material for the left (i.e., the first) column, footnotes should take up no space, since they are held over for the second column. In the second column these footnotes are combined with the ones found there and placed a suitable distance from the main text at the bottom of this column.

This means that we have to change certain parameters for the insertion \footins when we construct the second column. The right place to do this is in the L^{A}TEX macro \@outputdblcol which we are going to change later on. What settings for the insertion parameters are appropriate? For setting the

first column \count\footins and \skip\footins

should both be zero since footnotes are held over while for the second column \count\footins should be 1000 and the \skip\footins has to be set to the desired separation between main text and footnotes.^{10}

We will allow one column of footnotes (i.e., the right column) at most, so that \dimen\footins has to equal \textheight. In principle, it would be possible to allow for even more footnotes, but this would complicate matters enormously.^{11}

Since a document usually starts with a left column, we have to set \count and \skip\footins on top-

9. Nico Poppelier suggested omitting the \typeout statements in the production version of the files to avoid showing all that unnecessary information to the user. While I accept his criticism as valid, I decided that this information should at least be placed into the transcript file to make it easier to detect problems arising from the use of older versions. This happens now automatically as the command \ProvidesPackage will only write to the transcript file.

10. A value of 1000 means that there is a one-to-one relationship between the real size of the footnote and the size finally occupied by the footnote on the current page.

11. It is not possible to make \dimen\footins larger than \textheight directly, because this would result in a full left column (with text) and more than one column of footnotes. Instead, one has to make footnotes visible to the page generation algorithm again at the moment when a full column of footnotes is assembled, but we still have some space left in the first column. It is a nice enhancement, and, I suppose, it is of some value for preparing publications in certain disciplines, so here is the challenge …

level to zero. For this purpose, we define a macro \preparefootins which will first save the current value of \skip\footins in a safe place. This saved value will be used later for the second column. In this way, it is possible for the user or a designer of a document class to adjust this parameter without fiddling with the code of this package file.

40 ⟨∗package⟩

41 \def\preparefootins{%
42 \global\rcol@footinsskip\skip\footins
43 \global\skip\footins\z@
44 \global\count\footins\z@

We will also assign \textheight to \dimen \footins to allow the user to change this parameter in the preamble.

45 \global\dimen\footins\textheight}

It is necessary to make the assignments above \global because we are going to use this macro in the output routine which has an implicit grouping level to keep the changes made by it local.

Of course, we have to allocate the skip register that we used above:

46 \newskip\rcol@footinsskip

Now we have all the necessary tools available to tackle \@outputdblcol. We have to remember that

when \if@firstcolumn equals \iftrue, we are cur-

rently starting to build the second column, i.e., that the first column is already assembled. Therefore, the macro will start with the following code:

47 \def\@outputdblcol{\if@firstcolumn
48 \global\@firstcolumnfalse

After changing the switch, we save the first column (which was placed by preceeding macros in

\@outputbox) in the box register \@leftcolumn.

Since we are inside the output routine, all those assignments have to be \global to take any effect.

49 \global\setbox\@leftcolumn\box\@outputbox

Then, we make the footnotes visible to the page generation algorithm by setting \count\footins to 1000 (\@m is an abbreviation for this number) and \skip\footins to its saved value (i.e.,

\rcol@footinsskip).

                                                    50 \global\count\footins\@m
                                                    51 \global\skip\footins\rcol@footinsskip

We also have to reinsert all footnotes left over from the first column to make sure that they are reconsidered by the page generation algorithm of TEX using the new values for \count and \skip\footins. But this will be done later in the macro \@startcolumn. If we have just finished the right column, i.e.,

                                              when \if@firstcolumn equals \iffalse, we will

reset the \footins parameters as explained above using the utitlity macro \preparefootins.

                                                    52 \else \preparefootins

Then, we compose both columns in \@outputbox, combine them with all page-wide floats for this page (\@combinedblfloats), attach header and footer, and ship out the result (\@outputpage). Finally we look to see whether it is possible to generate following pages consisting only of page-wide floats.^{12}

                                                    53 \global\@firstcolumntrue
                                                    54 \setbox\@outputbox\vbox{\hbox to\textwidth
                                                    55  {\hbox to\columnwidth
                                                    56  {\box\@leftcolumn\hss}%
                                                    57  \hfil\vrule\@width\columnseprule\hfil
                                                    58  \hbox to\columnwidth
                                                    59  {\box\@outputbox\hss}}}%
                                                    60 \@combinedblfloats\@outputpage
                                                    61 \begingroup
                                                    62 \@dblfloatplacement\@startdblcolumn
                                                    63 \@whilesw\if@fcolmade\fi
                                                    64  {\@outputpage\@startdblcolumn}%
                                                    65 \endgroup
                                                    66 \fi}

There is a fundamental flaw in L^{A}TEX’s output routine for float columns and float pages: split footnotes, i.e., footnotes which are only partly typeset on the preceding page are not resolved. They are held over until L^{A}TEX starts a page (or column) containing text besides floats again. For our current layout, this would mean, that if L^{A}TEX decided to make the right column of a page a float column, footnotes from the left column would appear on a

12. This part is copied directly from the original L^{A}TEX macro. Details about the used macros, their interfaces and meanings can be found in the L^{A}TEX 2ε source code [4].

later page. A real cure for this problem would be to rewrite two-thirds of L^{A}TEX’s output routine, so I am leaving this open for the interested reader.

But the problem shows up even if only one float is contributed to the right column since L^{A}TEX assumes that the whole column is usable, whereas some of it might actually be already devoted to footnotes from the left column. So we have to change the output routine at least in the part that contributes floats to the next column. The macro involved is called \@startcolumn. The first thing we do is to check and see whether any deferred floats exists.

67 \def\@startcolumn{%
68 \ifx\@deferlist\@empty

If not, we set the switch \if@fcolmade to false which says that we did not succeed in making a float column. Then, we set \@colroom to \@colht. The register \@colht holds the amount of space that is available for floats, text, and footnotes in one column, i.e., it equals \textheight minus the space devoted to page-wide floats. \@colroom is a similar register which holds the value \@colht minus space for column floats that are already contributed to the current column. Of course, both values should be equal when we start a new column.

69 \global\@fcolmadefalse

Puzzle:

Given a simple TEX document containing only straight text, is it possible for the editor, after deleting one sentence, to end up with a document producing an extra page? We assume that the deleted text contains no TEX macros and that the document was prepared with a standard macro package like the one used for TUGboat production.

The answer will be given in the next issue.

70 \global\@colroom\@colht
71 \else

If there are floats waiting for a change to be processed, the situation is more difficult. In this case, we have to reduce both \@colht and \@colroom by the amount of space that will be needed for the footnotes from the left column. So we must check whether such footnotes are present. As we have not reinserted them in \@outputdblcol, we can check

the \footins box.
72 \ifvoid\footins\else

If there are some, we measure the space that will be occupied by them. This measurement is not really exact. If we have a full column of footnotes, it will be too high, but this does matter since we need it only for an upper bound on the free space available for floats.

73  \ftn@amount\ht\footins
74  \advance\ftn@amount\dp\footins
75  \advance\ftn@amount\skip\footins
76 \fi

We then reduce the \@colht by this amount and again assign \@colroom the value of \@colht. If no footnotes are present, we substract zero, so there is no harm in doing this operation all the time.

77 \global\advance\@colht-\ftn@amount
78 \global\@colroom\@colht

Now, we call another internal L^{A}TEX macro that will try to contribute floats to the next column. It will use the register \@colht when trying to build up a float column, which is the reason for reducing this register. If it succeeds, it will set the switch

\if@fcolmade to true, otherwise, to false. If no

float column is possible, it will try to place some or all of the deferred floats to the top or the bottom of the next column, thereby, using and reducing the value of the register \@colroom.

79 \@xstartcol

Afterwards, we have to restore the correct values for \@colht and \@colroom again, but this time, they may differ, so that we have to \advance both registers separately by \ftn@amount.

80 \global\advance\@colht\ftn@amount

81 \global\advance\@colroom\ftn@amount
82 \fi

Now, after doing the things depending on the status of the \@deferlist, we have to incorporate the left over footnotes in the new column. First we check whether a float column was produced by

\@xstartcol or not.
83 \if@fcolmade

If so, we do something awful. To make use of the \@makecol macro, which attaches footnotes to \box 255 and places the result in the box register

\@outputbox, we have to assign \@outputbox (i.e.,

the result of \@xstartcol) to \box 255.^{13}

84 \setbox\@cclv\box\@outputbox
85 \@makecol
86 \else

If no float column was produced, we reinsert the held over footnotes so that they can be reconsidered by the page generation algorithm of TEX. But it is necessary to ensure that this operation is done only when footnotes are actually present.^{14}

87 \ifvoid\footins\else
88  \insert\footins{\unvbox\footins}\fi
89 \fi}

Of course, we also have to allocate the dimen register. It will be automatically initialized to zero.

90 \newdimen\ftn@amount

The macro \@xtsartcol was removed in L^{A}TEX 2ε but we introduce it here again for the moment.

91 \def\@xstartcol{%
92 \@tryfcolumn \@deferlist
93 \if@fcolmade
94 \else
95  \begingroup
96  \let \@tempb \@deferlist
97  \global \let \@deferlist \@empty
98  \let \@elt \@scolelt
99  \@tempb
100  \endgroup
101 \fi

102 }

The other internal macro that we have to change is \@makecol, a macro that is called whenever one column of material is assembled and column floats and footnotes have to be added. Again, we have to distinguish between actions for the first and the second column.

                                                   103 \def\@makecol{\if@firstcolumn

For the first column, we leave the footnotes in their box and simply save the contents of box 255 in the

                                              \box register \@outputbox.
                                                   104 \setbox\@outputbox\box\@cclv

But if the user errously forgot to specify a twocolumn layout, we will always typeset the first column, so that the footnotes are never printed. Therefore we better check for this special case and output the footnotes on a separate page in an emergency.^{15}

                                                   105 \if@twocolumn \else
                                                   106  \ifvoid\footins \else
                                                   107  \@latexerr{ftnright package
                                                   108  used in one-column mode}%
                                                   109 {The ftnright package was designed to
                                                   110  work with LaTeX's standard^^Jtwocolumn
                                                   111  option. It does *not* work with the
                                                   112  multicol package.^^JSo please specify
                                                   113  `twocolum' in the
                                                   114  \noexpand\documentclass command.}%
                                                   115  \shipout\box\footins \fi\fi
                                                   116 \else

When we construct the second column, we must first check whether footnotes are actually present. If not, we perform the same actions as before.

                                                   117 \ifvoid\footins
                                                   118  \setbox\@outputbox\box\@cclv
                                                   119 \else

13. In German, we call this “from the back through the chest into the eyes”.

14. Otherwise, we might get an undesired extra vertical space coming from \skip\footins, even if there are no footnotes on the page.

15. Otherwise, the footnotes are held over for ever, preventing TEX from finishing the document successfully. Instead, TEX will produce infinity many empty pages at the end of the document, trying in vain to output the held over footnotes. This problem was found by Rainer Schöpf when we prepared the paper for the Cork conference.

But, if footnotes are present, it may be possible that the whole column consists of footnotes, i.e., \box 255 is empty. In this case, there is no use in placing any glue (\skip\footins) in front,^{16} so we have to check for this possibility.

120  \setbox\@outputbox\vbox
121  {\ifvoid\@cclv \else
122  \unvbox\@cclv
123  \vskip\skip\footins\fi

But in any case, we place the \footnoterule in front of the footnotes even if this macro is not used by this package.^{17} This ends the if-statement testing whether footnotes are present or not. It also ends the code which differs depending on the column number.

124  \color@begingroup
125  \normalcolor
126  \footnoterule\unvbox\footins
127  \color@endgroup}\fi
128 \fi

Now the column floats are added at the top and the bottom, and the \@outputbox is adjusted to the full column height so that the glue inside will stretch in certain situations.^{18} Again, this code is copied verbatim from the original source, so I won’t dwell on details.^{19}^{20}

129 \xdef\@freelist{\@freelist\@midlist}%
130 \global \let \@midlist \@empty
131 \@combinefloats
132 \ifvbox\@kludgeins
133  \@makespecialcolbox
134 \else
135 \setbox\@outputbox\vbox to\@colht
136  {\boxmaxdepth\maxdepth
137  \@texttop
138  \@tempdima\dp\@outputbox
139  \unvbox\@outputbox
140  \vskip-\@tempdima
141  \@textbottom}%
142 \fi
143 \global\maxdepth\@maxdepth}

Now we can tackle the remaining small changes to the standard layout. I decided to use a smaller size for footnotes but with a slightly larger leading than usual. This means that we have to redefine the \footnotesize macro which depends on options like 11pt etc. Fortunately, there is a simple way to find out the main size of the document: the macro \@ptsize contains 0, 1, or 2 standing for 10, 11, or 12 points document text size.^{21}

144 \ifcase \@ptsize
145 \renewcommand\footnotesize{%
146 \@setfontsize\footnotesize\@viiipt{9.9}%
147 \abovedisplayskip 6\p@\@plus2\p@\@minus4\p@
148 \abovedisplayshortskip \z@ \@plus\p@
149 \belowdisplayshortskip
150  3\p@\@plus\p@\@minus2\p@
151 \def\@listi{\leftmargin\leftmargini
152  \topsep 3\p@ \@plus\p@ \@minus\p@
153  \parsep 2\p@ \@plus\p@ \@minus\p@
154  \itemsep \parsep}%
155 \belowdisplayskip \abovedisplayskip

16. In fact, it would be a mistake since this glue was not taken into account when the footnotes where assembled, so it would produce an overfull box.

17. This decision is certainly open to criticism, since there is nothing to separate. On the other hand, a rule or some other ornament in front of the footnotes is part of the design which should be used concistently throughout a document. As a last argument in favor of the rule, consider the situation where L^{A}TEX decided to place only floats and footnotes into the right hand column. In this case a separator again seems adequate. In this situation one can even argue that it is necessary to

put in the \skip\footins.

18. It is an interesting question as to whether the current layout works well with bottom floats or not. Actually, I would prefer to place the footnotes below the bottom floats instead of above, as it is done here. At least when the floats are part of the document and not puzzles thrown in. But I was too lazy to implement it because I seldom use floats. If somebody implements this layout (some parts of this macro have to be changed) I would be interested in seeing the code and some sample results.

19. I only changed \dimen128 into \@tempdima which is, besides being faster and shorter, only a cosmetic change. The use of this hardwired dimen register seems to indicate that this part of L^{A}TEX was written very early and left unchanged since then: an interesting fact for software archeologists.

20. For the L^{A}TEX 2ε upgrade I had to add the support for the \enlargethispage command—let’s hope I did it in the correct way.

21. In the new release I used the definitions from the class option files size1?.clo and modified them slightly. In the previous release there was no correction for the list parameters etc., thus giving you incorrect spacing if somebody used display lists in footnotes.

157 \or
158 \renewcommand\footnotesize{%
159 \@setfontsize\footnotesize\@ixpt{11.1}%
160 \abovedisplayskip 8\p@\@plus2\p@\@minus4\p@
161 \abovedisplayshortskip \z@ \@plus\p@
162 \belowdisplayshortskip
163  4\p@ \@plus2\p@ \@minus2\p@
164 \def\@listi{\leftmargin\leftmargini
165  \topsep 4\p@ \@plus2\p@\@minus2\p@
166  \parsep 2\p@ \@plus\p@ \@minus\p@
167  \itemsep \parsep}%
168 \belowdisplayskip \abovedisplayskip

169 }

170 \or
171 \renewcommand\footnotesize{%
172 \@setfontsize\footnotesize\@xpt{12.3}%
173 \abovedisplayskip10\p@\@plus2\p@\@minus5\p@
174 \abovedisplayshortskip \z@ \@plus3\p@
175 \belowdisplayshortskip
176  6\p@ \@plus3\p@ \@minus3\p@
177 \def\@listi{\leftmargin\leftmargini
178  \topsep 6\p@ \@plus2\p@ \@minus2\p@
179  \parsep 3\p@ \@plus2\p@ \@minus\p@
180  \itemsep \parsep}%
181 \belowdisplayskip \abovedisplayskip

182 }

183 \fi

Setting footnotes in smaller type and separating them with sufficiant space from the main text allow us to omit the \footnoterule normally used.

184 \let\footnoterule\@empty

Individual footnotes are separated from each other by a more or less baseline skip of the text size. This can be specified with the following code:

185 \AtBeginDocument
186 {\global\footnotesep\ht\strutbox}

The use of the L^{A}TEX 2ε hook \AtBeginDocument is a big help since it allows us to defer everything that might depend on user setting inside the preamble to the \begin{document} environment start.

And finally, a small but nice change, to the mark at the beginning of the footnote text. We will place it at the baseline instead of raising it as a superscript. Additionally, it will get a dot as punctuation.

                                                    187 \long\def\@makefntext#1{\parindent 1em
                                                    188 \noindent\hbox to 2em{}%
                                                    189 \llap{$\@thefnmark.\;\;$}#1}

5 Initialisation

We defined the macro \preparefootins above, but we also have to use it to prepare typesetting the first column. As a default for the separation of footnotes and text on the second column, we use the following:

                                                    190 \setlength{\skip\footins}
                                                    191  {10pt plus 5pt minus 3pt}
                                                    192 \AtBeginDocument{\preparefootins}

193 ⟨/package⟩

Of course, this value can be changed by the user as described in the introduction.

References

[1] M. Goossens, F. Mittelbach et A. Samarin. The L^{A}TEX Companion. Addison-Wesley, Reading, Massachusetts, 1994.

[2] Hans-Joachim Koppitz, editor. Gutenberg Jahrbuch. Gutenberg-Gesellschaft, Mainz.

[3] Leslie Lamport. L^{A}TEX: A Document Preparation System. Addison-Wesley, Reading, Massachusetts, 1986.

[4] L^{A}TEX3 project. L^{A}TEX 2εdistribution, 1994. Souces for L^{A}TEX 2ε the successor to L^{A}TEX 2.09.

[5] Frank Mittelbach An environment for multi-column output. TUGboat, 10(3):407–415, November 1989.

[6] Frank Mittelbach E-TEX: Guidelines to future TEX extensions. In Lincoln K. Durst, editor, TUGboat, 11(3): 1990 TUG Annual Meeting Proceedings, pages 337–345, September 1990.

[7] Manfred Siemoneit. Typographisches Gestalten. Polygraph Verlag, Frankfurt am Main, second edition, 1989.

[8] Jan Tschichold. Ausgewählte Aufsätze über Fragen der Gestalt des Buches. Birkhäuser Verlag, Basel, 1987. Second printing.

[9] Jan White. Graphic Design for the Electronic Age. Watson Guptill, Xerox Press, New York, 1988.

6 Index

Les numéros représentent les ligne du code source où l’entrée apparait, en soulignement lorsqu’il s’agit de sa définition.

Symbols

\/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 \; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 \@cclv . . . . . . . . . . . . . . . . . . 84, 104, 118, 121, 122 \@colht . . . . . . . . . . . . . . . . . . . 70, 77, 78, 80, 135 \@colroom . . . . . . . . . . . . . . . . . . . . . . . . 70, 78, 81 \@elt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 \@fcolmadefalse . . . . . . . . . . . . . . . . . . . . . . . . 69 \@firstcolumnfalse . . . . . . . . . . . . . . . . . . . . . . 48 \@firstcolumntrue . . . . . . . . . . . . . . . . . . . . . . 53 \@kludgeins . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 \@latexerr . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 \@leftcolumn . . . . . . . . . . . . . . . . . . . . . . . . 49, 56 \@listi . . . . . . . . . . . . . . . . . . . . . . . 151, 164, 177 \@m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 \@makecol . . . . . . . . . . . . . . . . . . . . . . . . . 85, \underline{103} \@makefntext . . . . . . . . . . . . . . . . . . . . . . . . . . \underline{187} \@makespecialcolbox . . . . . . . . . . . . . . . . . . . . 133 \@maxdepth . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 \@minus . . . . . . . . . . . . . . . . . . . . . . . 147, 150,

152, 153, 160, 163, 165, 166, 173, 176, 178, 179 \@outputbox 49, 54, 59, 84, 104, 118, 120, 135, 138, 139 \@outputdblcol . . . . . . . . . . . . . . . . . . . . . . . . . \underline{47} \@outputpage . . . . . . . . . . . . . . . . . . . . . . . . 60, 64 \@plus . . . . . . . . . . . . . . 147, 148, 150, 152, 153,

160, 161, 163, 165, 166, 173, 174, 176, 178, 179 \@scolelt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 \@setfontsize . . . . . . . . . . . . . . . . . . 146, 159, 172 \@startcolumn . . . . . . . . . . . . . . . . . . . . . . . . . . \underline{67} \@startdblcolumn . . . . . . . . . . . . . . . . . . . . 62, 64 \@tempb . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96, 99 \@thefnmark . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 \@tryfcolumn . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 \@xstartcol . . . . . . . . . . . . . . . . . . . . . . . . . 79, \underline{91} \| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

A

\abovedisplayshortskip . . . . . . . . . . 148, 161, 174

\abovedisplayskip … 147, 155, 160, 168, 173, 181 \AtBeginDocument . . . . . . . . . . . . . . . . . 8, 185, 192

B

\begin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

\belowdisplayshortskip . . . . . . . . . . 149, 162, 175

\belowdisplayskip . . . . . . . . . . . . . . 155, 168, 181 \bottomfraction . . . . . . . . . . . . . . . . . . . . . . . . 22 \boxmaxdepth . . . . . . . . . . . . . . . . . . . . . . . . . . 136

C \CodelineIndex . . . . . . . . . . . . . . . . . . . . . . . . . 25 \color@begingroup . . . . . . . . . . . . . . . . . . . . . 124 \color@endgroup . . . . . . . . . . . . . . . . . . . . . . . 127 \columnsep . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 \columnseprule . . . . . . . . . . . . . . . . . . . . . . . . . 57 \columnwidth . . . . . . . . . . . . . . . . . . . . . . . . 55, 58

D \DescribeEnv . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 \DescribeMacro . . . . . . . . . . . . . . . . . . . . . . . . . 11 \DocInput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 \documentclass . . . . . . . . . . . . . . . . . . . . . . 2, 114

E \EnableCrossrefs . . . . . . . . . . . . . . . . . . . . . . . 27 \end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

F \fbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11, 13 \flushbottom . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 \footins . . . . . . . . . . . . . . . . . . . . . . . . 42–45,

50, 51, 72–75, 87, 88, 106, 115, 117, 123, 126, 190 \footnoterule . . . . . . . . . . . . . . . . . . . . . . 126, \underline{184} \footnotesep . . . . . . . . . . . . . . . . . . . . . . . . . . \underline{185} \footnotesize . . . . . . . . . . . . . . . . . . . . . . . . . \underline{144} \ftn@amount . . . . . . . . . . . . . . . 73–75, 77, 80, 81, \underline{90}

H \headsep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

I \if@fcolmade . . . . . . . . . . . . . . . . . . . . . . 63, 83, 93 \if@firstcolumn . . . . . . . . . . . . . . . . . . . . 47, 103 \if@twocolumn . . . . . . . . . . . . . . . . . . . . . . . . . 105 \ifvbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 \ifvoid . . . . . . . . . . . . . . . . . . 72, 87, 106, 117, 121 \IndexPrologue . . . . . . . . . . . . . . . . . . . . . . . . . 30 \insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 \itemsep . . . . . . . . . . . . . . . . . . . . . . 154, 167, 180

L \leftmargin . . . . . . . . . . . . . . . . . . . . 151, 164, 177 \leftmargini . . . . . . . . . . . . . . . . . . . 151, 164, 177

M

\MakeShortVerb . . . . . . . . . . . . . . . . . . . . . . . . . . 8 \maxdepth . . . . . . . . . . . . . . . . . . . . . . . . . 136, 143

N

\newcommand . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 \newdimen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 \newskip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 \noexpand . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 \normalcolor . . . . . . . . . . . . . . . . . . . . . . . . . . 125

P

\p@ . . . . . . . . . . . . . . . . 147, 148, 150, 152, 153,

160, 161, 163, 165, 166, 173, 174, 176, 178, 179 \parindent . . . . . . . . . . . . . . . . . . . . . . . . 17, 187 \parsep . . . . . . . . . . . . 153, 154, 166, 167, 179, 180 \parskip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 \preparefootins . . . . . . . . . . . . . . . . . . \underline{40}, 52, 192 \PrintDescribeEnv . . . . . . . . . . . . . . . . . . . . . . 14 \PrintDescribeMacro . . . . . . . . . . . . . . . . . . . . . 12 \PrintMacroName . . . . . . . . . . . . . . . . . . . . . . . . 15

R \rcol@footinsskip . . . . . . . . . . . . . . . . . 42, 46, 51 \RecordChanges . . . . . . . . . . . . . . . . . . . . . . . . . 26 \renewcommand . . . . . . . 11, 13, 15, 22, 145, 158, 171

S \saved@footinsskip . . . . . . . . . . . . . . . . . . . . . . \underline{40} \section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 \setcounter . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 \setlength . . . . . . . . . . . . . . . . 17, 18, 20, 21, 190 \shipout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 \sl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 \strutbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186

T \textheight . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 \textwidth . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 \topsep . . . . . . . . . . . . . . . . . . . . . . . 152, 165, 178 \TUB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

U \usepackage . . . . . . . . . . . . . . . . . . . . . . . . . . . 4, 5

Change History

v1.0b

\@startcolumn: Macro added to correct float

problems . . . . . . . . . . . . . . . . . . . . . . . . . 4 v1.0c

\@makecol: Introduced crude recovery if twocol-

umn false. . . . . . . . . . . . . . . . . . . . . . . . . 6 \@makefntext: Added dot as recommended by

Tschichold. . . . . . . . . . . . . . . . . . . . . . . . . 8 v1.0d

\@makecol: Better help message . . . . . . . . . . . . 6 General: Ajout du générateur de documentation

dans le source . . . . . . . . . . . . . . . . . . . . . . 2 v1.0e

General: Ajout de l’historique des changements . 2 v1.1a

\@makecol: Upgrades for LaTeX2e . . . . . . . . . . 7 \@xstartcol: Macro reintroduced . . . . . . . . . . . 6 General: Mis à jour pour LaTeX2e . . . . . . . . . . 1 \footnotesep: Upgrades for LaTeX2e . . . . . . . . 8 \footnotesize: Upgrades for LaTeX2e . . . . . . . 7

v1.1b

General: Driver mis en avant . . . . . . . . . . . . . . 1 v1.1c

General: Utilise article.cls pour la documenta-

tion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 v1.1d

\@makecol: Added the color@group macros and \normalcolor to make this colorsafe . . . . . 7