]> AND Private Git Repository - canny.git/blob - lineno.sty
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
reprise texte coutu
[canny.git] / lineno.sty
1                                 \iffalse; awk '/S[H]ELL1/' lineno.sty|sh;exit; 
2                                      ... see bottom for .tex documentation ... 
3
4 Macro file lineno.sty for LaTeX: attach line numbers, refer to them. 
5                                                                            \fi 
6 \def\fileversion{v4.41} \def\filedate{2005/11/02}                     %VERSION
7
8 %%% Copyright 1995--2003 Stephan I. B"ottcher <boettcher@physik.uni-kiel.de>; 
9 %%% Copyright 2002--2005 Uwe L"uck, http://www.contact-ednotes.sty.de.vu 
10 %%%                      for version 4 and code from former Ednotes bundle 
11 %%%                      --author-maintained. 
12 %%% 
13 %%% This file can be redistributed and/or modified under 
14 %%% the terms of the LaTeX Project Public License; either 
15 %%% version 1.3a of the License, or any later version.
16 %%% The latest version of this license is in
17 %%%     http://www.latex-project.org/lppl.txt
18 %%% We did our best to help you, but there is NO WARRANTY. 
19
20 %%% $Id: lineno.sty,v 3.14.2.2 2004/09/13 19:30:39 stephan Exp $ %% was v4.00.
21 %                                                      \title{\texttt{\itshape 
22 %%                                       %% (UL 2004/10/09:) Italic TT is evil
23 %%                                       %% ... or nice front page layout!? 
24 %%
25 %         lineno.sty \ \fileversion\ \filedate 
26 %                                                               \unskip}\\\ \\
27 %          A \LaTeX\ package  to attach 
28 % \\        line numbers to paragraphs
29 %                                                            \unskip}\author{% 
30 %              Stephan I. B\"ottcher 
31 %  \\          Uwe L\"uck 
32 %                                                              \unskip}\date{% 
33 %            boettcher@physik.uni-kiel.de 
34 %  \\        http://contact-ednotes.sty.de.vu 
35 %% \\        stephan@nevis.columbia.edu
36 %% \\        Stephan.Boettcher@cern.ch                     
37 %                                                                          \\}
38 %
39 %                                      \documentclass[a4paper,12pt]{article}%D
40 %                                                        \usepackage{lineno}%D 
41 %%                                                              %% (New v4.00)
42 %                                                     \catcode`\_\active\let_~ 
43 %%                                               %% Beware math!? (/New v4.00) 
44 %                                                                \def~{\verb~} 
45 %                                                               \let\lessthan< 
46 %                                                           \catcode`\<\active
47 %                                   \def<#1>{$\langle${\itshape#1}\/$\rangle$}
48 %                                                           \catcode`\|\active
49 %%                                        (New v4.1: \tt star; in box anyway.) 
50 %                                                  \def|#1{\ttfamily\string#1}
51 %%                                               \def|#1{{\ttfamily\string#1}}
52 %%                                                                 (/New v4.1) 
53 %                                                        \newenvironment{code}
54 %                                                     {\par\runninglinenumbers
55 %                                                       \modulolinenumbers[1]%
56 %                                                           \linenumbersep.3em
57 %                                                                \footnotesize
58 %                                                          \def\linenumberfont
59 %                                                  {\normalfont\tiny\itshape}}
60 %                                                                           {} 
61 %%                                                              %% (New v4.00)
62 %                                           {\makeatletter \gdef\scs#1{\texttt
63 %                                                {\protect\@backslashchar#1}}}
64 %                                                  \def\old{\par\footnotesize}
65 %%                                                             %% (/New v4.00)
66 %%                                                               %% (New v4.1) 
67 %                                                          {\catcode`\/\active
68 %                                     \gdef\path{\begingroup\catcode`\/\active
69 %                                                          \let/\slash\dopath}
70 %                                 \gdef\dopath#1{\slash\unpenalty#1\endgroup}}
71 %%                                                              %% (/New v4.1)
72 %
73 %                                                           \begin{document}%D
74 %%                                                         \DocInput{lineno}%D
75 %                                                         \pagewiselinenumbers
76 %                                                                   \maketitle 
77 %                                                         \pagestyle{headings}
78 %                                                             \tableofcontents
79 %                                                                      \sloppy
80
81 %%                                      %% New v4.00: `...section{%' + \unskip 
82 %                                                                   \section{%
83 %                    Introductions 
84 %%                                                           %% New v4.00: `s'
85 %                                                                     \unskip}
86
87 % (New v4.00)           Parts of former first section 
88 % have been rendered separate subsections for package 
89 % version_v4.00.                         (/New v4.00) 
90
91 %                                                                \subsection{% 
92 %               Introduction to versions $\textrm{v}\lessthan4$
93 %                                                                     \unskip} 
94
95 % This package provides line numbers on paragraphs.
96 % After \TeX\ has broken a paragraph into lines there will
97 % be line numbers attached to them, with the possibility to
98 % make references  through the \LaTeX\ ~\ref~, ~\pageref~
99 % cross reference mechanism.  This includes four issues:
100 %                                                              \begin{itemize}
101 % \item   attach a line number on each line,
102 % \item   create references to a line number,
103 % \item   control line numbering mode,
104 % \item   count the lines and print the numbers.
105 %                                                                \end{itemize}
106 % The first two points are implemented through patches to
107 % the output routine.  The third by redefining ~\par~, ~\@par~
108 % and ~\@@par~.  The counting is easy, as long as you want
109 % the line numbers run through the text.  If they shall
110 % start over at the top of each page, the aux-file as well
111 % as \TeX s memory have to carry a load for each counted line.
112 %
113 % I wrote this package for my wife Petra, who needs it for
114 % transcriptions of interviews.  This allows her to
115 % precisely refer to passages in the text.  It works well
116 % together with ~\marginpar~s, but not too well with displaymath.
117 % ~\footnote~s are a problem, especially when they
118 % are split, but we may get there. 
119 % (New v4.00 UL) Version v4.00 overcomes the problem, I believe. 
120 % (/UL /New v4.00)
121 %
122 % lineno.sty works
123 % surprisingly well with other packages, for
124 % example, ~wrapfig.sty~.  So please try if it
125 % works with whatever you need, and if it does,
126 % please tell me, and if it does not, tell me as
127 % well, so I can try to fix it.
128 %
129 %                                                                \subsection{%
130 %               Introduction to versions v4.00ff. (UL) 
131 %                                                                     \unskip}
132
133 % ~lineno.sty~ has been maintained by Stephan until version_v3.14.
134 % From version_v4.00 onwards, maintenance is shifting towards 
135 % Uwe L\"uck (UL), who is the author of v4\dots code and of v4\dots 
136 % changes in documentation. This came about as follows. 
137
138 % Since late 2002, Christian Tapp and Uwe L\"uck have employed 
139 % ~lineno.sty~ for their ~ednotes.sty~, a package supporting 
140 % critical editions---cf.
141 %                                                                  \[\mbox{\tt 
142 %     http://ednotes.sty.de.vu 
143 %                                                                   \unskip}\]
144 % ---while you find ~ednotes.sty~ and surrounding files in 
145 % CTAN folder \path{macros/latex/contrib/ednotes}.
146
147 % Soon, some weaknesses of ~lineno.sty~ showed up, mainly since 
148 % Christian's critical editions (using ~ednotes.sty~) needed lots 
149 % of ~\linelabel~s and footnotes. (These weaknesses are due to 
150 % weaknesses of \LaTeX's ~\marginpar~ mechanism that Stephan 
151 % used for ~\linelabel~.) So we changed some ~lineno.sty~ 
152 % definitions in some extra files, which moreover offered new 
153 % features. We sent these files to Stephan, hoping he would take 
154 % the changes into ~lineno.sty~. However, he was too short of time. 
155
156 % Writing a TUGboat article on Ednotes in 2004, we hoped to 
157 % reduce the number of files in the Ednotes bundle and so asked 
158 % Stephan again. Now he generously offered maintenance to me, so 
159 % I could execute the changes on my own. 
160
161 % The improvements are as follows: 
162 %                                                         \begin{itemize}\item 
163 % [(i)]   Footnotes placement approaches intentions better 
164 % (footnotes formerly liked to pile up at late pages). 
165 %                                                                        \item 
166 % [(ii)]  The number of ~\linelabel~s in one paragraph is no longer 
167 % limited to 18. 
168 %                                                                        \item 
169 % [(iii)] ~\pagebreak~, ~\nopagebreak~, ~\vspace~, and the star 
170 % and optional versions of ~\\~ work as one would expect 
171 % (section_\ref{s:MVadj}).                                   %% Added for v4.1
172 %                                                                        \item 
173 % [(iv)]  A command is offered which chooses the first line number 
174 % to be printed in the margin 
175 % (subsection_\ref{ss:Mod}).                                 %% Added for v4.1
176 %                                                                        \item 
177 % [(v)]   (New v4.1) \LaTeX\ tabular environments (optionally) 
178 % get line numbers as well, and you can refer to them in the 
179 % usual automatic way. (It may be considered a shortcoming that, 
180 % precisely, \emph{rows} are numbered, not lines.---See 
181 % subsection_\ref{ss:Tab}.) 
182 %                                                                        \item 
183 % [(vi)]  We are moving towards referring to math items 
184 % (subsection_\ref{ss:MathRef} and the hooks in 
185 % subsection_\ref{ss:LL}). 
186 % (/New v4.1) 
187 %                                                                 \end{itemize}
188 % (Thanks to Stephan for making this possible!)
189
190 %% Unpublish: 
191 %% You may trace the earlier developments of these changes by 
192 %% requesting our files ~linenox0.sty~, ~linenox1.sty~, and 
193 %% ~lnopatch.sty~. Most of our changes have been in ~linenox0.sty~. 
194 %% Our ~linenox1.sty~ has extended ~linenox0.sty~ for one single 
195 %% purpose in a not very stable way. 
196 %%% (See ~\linenumberpar~ below). 
197 %% ~lnopatch.sty~ has done the first line number thing referred 
198 %% to in case_(iv) up to now. 
199 %% (New v4.1) 
200 %% Case_(v) earlier was provided by our ~edtab02.sty~---now 
201 %% called ~edtable.sty~. 
202 %% (/New v4.1) 
203
204 % Ednotes moreover profits from Stephan's offer with regard 
205 % to the documentation of our code which yielded these 
206 % improvements formerly. This documentation now becomes 
207 % printable, being part of the ~lineno.sty~ documentation. 
208
209 % Of course, Stephan's previous ~lineno.sty~ versions were a great 
210 % and ingenious work and exhibit greatest \TeX pertise. I never 
211 % could have done this. I learnt a lot in studying the code when 
212 % Christian pointed out strange output results and error 
213 % messages, and there are still large portions of ~lineno.sty~ 
214 % which I don't understand (consider only pagewise numbering of 
215 % lines). Fortunately, Stephan has offered future help if 
216 % needed.---My code for attaching line numbers to \emph{tabular 
217 % environments} (as mentioned above, now still in 
218 % ~edtable.sty~) %%                                                      %% TODO
219 % developed from macros which Stephan and Christian experimented 
220 % with in December 2002. Stephan built the basics. 
221 % (However, I then became too proud to follow his advice only to 
222 % use and modify ~longtable.sty~.)
223
224 % There are some issues concerning use of counters on which I 
225 % don't agree with Stephan and where I would like to change the 
226 % code if ~lineno.sty~ is ``mine'' as Stephan offered. However, 
227 % Stephan is afraid of compatibility problems from which, in 
228 % particular, his wife could suffer in the near future. So he 
229 % demanded that I change as little as possible for my first 
230 % version. Instead of executing changes that I plan I just offer 
231 % my opinions at the single occasions. I hope to get in touch 
232 % this way with users who consider subtle features vital which I 
233 % consider strange. 
234
235 % On the other hand, the sections on improvements of the 
236 % implementation have been blown up very much and may be tiring 
237 % and litte understandable for mere \emph{users}. These users 
238 % may profit from the present presentation just by jumping to 
239 % sections_\ref{s:Opts} and_\ref{s:UserCmds}. There is a user's 
240 % guide ulineno.tex which may be even more helpful, but it has 
241 % not been updated for a while.                                        %% TODO
242
243 %                                                                \subsection{%
244 %               Availability 
245 %                                                                     \unskip}
246
247 % In case you have found the present file otherwise than from 
248 % CTAN: A recent version and documentation of this package 
249 % should be available from CTAN folder 
250 % \path{macros/latex/contrib/lineno}.
251 % Or mail to one of the addresses at top of file. 
252
253 %                                                                \subsection{% 
254 %               Introductory code
255 %                                                                     \unskip}
256
257 % This style option is written for \LaTeXe, November 1994 or later,
258 % since we need the ~\protected@write~ macro. 
259
260 % (New v4.00)               And we use ~\newcommand*~ for 
261 % controlling length of user macro arguments, which has been 
262 % available since December 1994. 
263 %% 
264
265 \NeedsTeXFormat{LaTeX2e}[1994/12/01] 
266 %%                                                                [1994/11/04] 
267 \ProvidesPackage{lineno} 
268   [\filedate\space line numbers on paragraphs \fileversion] 
269 % (/New v4.00) 
270 %% 
271 %% History of versions: 
272 %% v1.00 1995/03/31  SIB: first release for Petra's interview transcriptions
273 %% v1.01 1995/10/28  SIB: added ~pagewise~ mode
274 %% v1.02 1995/11/15  SIB: added ~modulo~ option  
275 %% v1.03 1995/12/05  SIB: pagewise: try to reduce the hash-size requirements
276 %% v2.00 1995/12/06  SIB:   .. it works, new user interface
277 %% v2.01 1996/09/17  SIB: put into CVS
278 %% v2.02 1997/03/17  SIB: add: \@reinserts, for footnotes
279 %% v2.04 1998/03/09  SIB: add: linenomath environment
280 %% v2.05 1998/04/26  SIB: add: prevgraf test
281 %% v2.06 1999/03/02  SIB: LPPL added
282 %% v3.00 1999/06/11  SiB: include the extension in the main file
283 %% v3.01 1999/08/28  SiB: \@reinserts -> \holdinginserts
284 %% v3.02 2000/03/10  SiB: \@LN@output
285 %% v3.03 2000/07/01  SiB: \@LN@ExtraLabelItems, hyperref
286 %% v3.04 2000/12/17  SiB: longtable compatibility.
287 %% v3.05 2001/01/02  SiB: [fleqn] detection. 
288 %% v3.05a 2001/01/04 SiB: [fleqn] detection reverted for eqnarray. 
289 %% v3.06 2001/01/17  SiB: [twocolumn] mode support.
290 %% v3.07 2001/07/30  SiB: [hyperref] option obsoleted.
291 %% v3.08 2001/08/02  SiB: linenomath wrapping for \[ \]
292 %% v3.08a 2001/08/04 SiB: linenomath wrapping for \[ \] fixed
293 %% v3.08b 2002/01/27 SiB: enquotation typo fix
294 %% v3.09 2003/01/14  SIB: hyperref detection fix
295 %% v3.10 2003/04/15  FMi: \MakeLineNo fix for deep boxes
296 %% v3.10a 2003/11/12  Uwe Lück: \lineref typo fix
297 %% v4.00 2004/09/02  UL:  included linenox0, linenox1, lnopatch code with 
298 %%                        documentation, usually indicated by `New v4.00'; 
299 %%                        discussions of old code, indicated by `UL'; 
300 %%                        LPPL v.1 ->  LPPL v1.3, `program' -> `file'; 
301 %%                        first lines with \filedate and \fileversion, 
302 %%                        according nawk lines; `November 1994 or later', 
303 %%                        some earlier documentation typos (including a few 
304 %%                        bad minus signs), { -> {% and } -> \unskip} at 
305 %%                        line ends (so, e.g., alignment in TOC works); \scs. 
306 %%       2004/09/03  UL:  removed everything which indicated that the 
307 %%                        present file were named `lineno4.sty'. 
308 %% v4.1  2004/09/19  UL:  Inserted Stephan's identification line, removed 
309 %%                        some TODOs and remarks from v4.00. 
310 %%       2004/10/04  UL:  Added acknowledgement for Daniel Doherty; 
311 %%                        `(New v4.00)' with [|\firstlinenumber]; changed 
312 %%                        TODOs; Refining -> Redefining (\vadjust). 
313 %%       2004/10/05  UL:  ednmath0 -> mathrefs; \catcode`\~ -> \active;
314 %%                        \path; refined section on options `mathrefs'; 
315 %%                        changes in introduction. 
316 %%       2004/10/06  UL:  Changed/removed TODOs, e.g., for edtable.sty. 
317 %%       2004/10/11  UL:  Reminders: linenox0/1/lnopatch.sty obsolete; 
318 %%                        \tt star in list of commands.
319 %%       2004/10/12  UL:  Corrected blank lines in lineno.tex. 
320 %%       2004/10/19  UL:  Fixed minor typos; remark on \if@LN@edtable. 
321 %% v4.1a 2004/11/07  UL:  LPPL v1.3a. 
322 %% v4.1b 2004/11/13  UL:  Comment on \outputpenalty values. 
323 %% v4.1c 2005/01/10  UL:  Contact via http. 
324 %% v4.11 2005/02/20  UL:  Error message with \linelabel when not numbering. 
325 %%       2005/03/07  UL:  Removed \linelabel from ss:Tab heading, consider 
326 %%                        marginal line numbers as well, revised ss:Tab. 
327 %%                        Added a few lines on missing explanations to 
328 %%                        s:UserCmds. Corrected some code alignments. 
329 %%       2005/03/08  UL:  Require recent edtable.sty. 
330 %%
331
332 %% v4.2  2005/03/21  UL:  "Physical page" counter works with \include. 
333 %%       2005/04/17  UL:  Raised options section above extensions section 
334 %%                        (v4.00 disabled `displaymath' option); 
335 %%                        third arg for \@ifundefined{mathindent}; 
336 %%                        "bunch of options"; 
337 %%       2005/04/24  UL:  compatibility with tamefloats; vplref.sty. 
338 %%       2005/04/25  UL:  \number -> \the; wondered -> $$; subsec. appbas; 
339 %%                        CrtlLN sec -> subsec.; \newcommand* wherever ...; 
340 %%                        doc. on `other output routines' and `addpageno' 
341 %%                        (this changed from `varioref'). 
342 %%       2005/04/27  UL:  =1\relax -> =\@ne, 0\relax ..., \hb@xt@, 
343 %%                        \ifx\@@par\@@@par -> \ifLineNumbers, typos, 
344 %%                        \pagestyle{headings}, LaTeX -> \LaTeX. 
345 %% v4.21 2005/04/28  UL:  linenomath section: removed wrong \else's, 
346 %%                        \holding...: \thr@@, \@LN@outer@holdins, \global. 
347 %% v4.22 2005/05/01  UL:  \unvbox\@outputbox; \@LN@col without #1, 
348 %%       2005/05/08  UL:  global/local \internall..., \resetl... global, 
349 %%                        shortened discussions of this and of \newcounter. 
350 %%       2005/05/09  UL:  corr.: doc. typo, version history, bad lines; 
351 %%                        percent; \chardef for modulo, 
352 %%                        \value{firstlinenumber}. 
353 %% v4.3  2005/05/10  UL:  \@backslashchar -> \char`\\ in \scs. 
354 %%       2005/05/11  UL:  \linenumbers sets ...outer@holdins; tidied up 
355 %%                        documentation regarding earlier versions. 
356 %%       2005/05/12  UL:  `linenomath' without spurious number above; 
357 %%                        `displaymath' default; edmac homepage -> 
358 %%                        ednotes.sty.de.vu, \endlinenomath without 
359 %%                        numbers: no change of \holdinginserts; 
360 %%                        \linelabel doesn't go to .aux or mark, 
361 %%                        hyperref detected; undone 2005/05/10 (bad mark). 
362 %%       2005/05/13  UL:  Reworked hyperref detection (new subsec.). 
363 %%       2005/05/15  UL:  More typo fixes, corrected terrible confusions in 
364 %%                        the discussion (v4.22/v4.3) of \new/\stepcounter; 
365 %%                        new subsec. in `Line number ...'; another 
366 %%                        implementation of `hyperref' detection. 
367 %%       2005/05/16  UL:  Final minor changes. 
368 %% v4.31b    /06/14  UL:  Extended explanation of \firstlinenumbers 
369 %%                        and package options; \@LN@ifgreat@critical; 
370 %%                        \modulolinenumbers*. Sent to Ednotes.news only.
371 %% v4.31 2005/06/15  UL:  \modulolinenumbers* with \firstlinenumber{1}; 
372 %%                        " -> ``/''; more doc. on \firstlinenumber .
373 %%       2005/06/20  UL:  Typo fix. 
374 %%       2005/10/01  UL:  Warning about \mod...* with pagewise mode. 
375 %% v4.31a    /10/02  UL:  Minor changes of appearance of doc., e.g., 
376 %%                        \[ for $$. 
377 %% v4.32b    /10/15  UL:  Support for \addvspace; removed comments that
378 %%                        had been invisible already for some time; 
379 %%                        made clear with which environments the 
380 %%                        linenomath environment is not needed. 
381 %% v4.32ab   /10/15  UL:  Observe \if@nobreak with support for \addvspace. 
382 %% v4.32 2005/10/17  UL:  Just made it official and sent it to CTAN. 
383 %% v4.33b    /10/23  UL:  \if@nobreak\nobreak\fi -> \nobreak . 
384 %% v4.33ab   /10/24  UL:  \LineNoLaTeXOutput without \@tempswafalse; 
385 %%                        undid v4.22: \[unv]box\@outputbox (space is OK, 
386 %%                        \unvbox pushes short columns down); \@LN@kern@z@ . 
387 %% v4.4b 2005/10/24  UL:  Another tidying-up of the discussion of 
388 %%                        \stepcounter{linenumber}; \@LN@screenoff@pen 
389 %%                        replaces \@LN@kern@z@, \@LN@depthbox . 
390 %% v4.4  2005/10/27  UL:  Just made official for CTAN. 
391 %% v4.4a 2005/10/29  UL:  Undid change of discussion of 
392 %%                        \stepcounter{linenumber} (confusion again). 
393 %% v4.41 2005/11/02  UL:  Raised \CheckCommand*. 
394 %% 
395 %% Acknowledgements:
396 %% v3.06:  Donald Arseneau, pointed to mparhack.sty.
397 %% v3.07+: Frank Mittelbach, points out inconsistencies in the
398 %%         user interface.
399 %% v3.10:  Frank Mittelbach \MakeLineNo fix for deep boxes
400 %% v4.00:  Daniel Doherty points out clash of \pagewise... with resetting 
401 %%         page number. 
402 %% v4.21:  Much testing work by Erik Luijten. 
403 %% v4.3:   `displaymath' default by Erik Luijten's suggestion. 
404 %% v4.31:  \modulolinenumbers* is an idea of Hillel Chayim Yisraeli's. 
405 %% v4.32:  Support for \addvspace due to Saravanan M.'s observation. 
406 %% v4.33:  Different support for \addvspace due to bug reports by 
407 %%         Saravanan M.'s and David Josef Dev. 
408 %% v4.4:   David Josef Dev points out that \kern\z@ after a paragraph 
409 %%         tends to place its final baseline wrongly. 
410 %
411 %
412 %                                                                   \section{%
413 %               Put the line numbers to the lines
414 %                                                                     \unskip}
415
416 % (New v4.00)                    This section contained the most 
417 % basic package code previously. For various purposes of 
418 % version_4\dots, much of these basics have been to be modified. 
419 % Much of my (UL's) reasoning on these modifications has been to 
420 % be reported. Sorry, the present section has been blown up 
421 % awfully thus and contains ramifications that may be difficult 
422 % to trace. We add some ~\subsection~ commands in order to cope 
423 % with the new situation. (/New v4.00) 
424
425 %                                                                \subsection{% 
426 %               Basic code of \texttt{lineno.sty} \scs{output}
427 %                                                    \unskip}\label{ss:output} 
428
429 % The line numbers have to be attached by the output
430 % routine.  We simply set the ~\interlinepenalty~ to $-100000$.
431 % The output routine will be called after each line in the
432 % paragraph,  except the last,  where we trigger by ~\par~.
433 % The ~\linenopenalty~ is small enough to compensate a bunch of
434 % penalties (e.g., with ~\samepage~).
435 %
436 % (New v3.04)            Longtable uses 
437 % ~\penalty~$-30000$.  The lineno penalty range was 
438 % shrunk to $-188000 \dots -32000$.  (/New v3.04)
439 % (New v4.00) New values are listed below (11111f.). (/New v4.00) 
440
441 \newcount\linenopenalty\linenopenalty=-100000
442
443 %% TODO v4.4+: 
444 % (UL)                              Hm. It is never needed below 
445 % that this is a counter. ~\def\linenopenalty{-100000\relax}~ 
446 % would do. (I guess this consumes more memory, but it 
447 % is more important to save counters than to save memory.) 
448 % I was frightened by ~-\linenopenalty~ below, but indeed 
449 % \TeX\ interprets the string ~--100000~ as 100000. 
450 % Has any user or extension package writer ever called 
451 % ~\linenopenalty=xxx~, or could I really change this?---The 
452 % counter is somewhat faster than the macro. Together with the 
453 % compatibility question this seems to support keeping the 
454 % counter. (???) 
455 %% Note that Stephan chose ~\mathchardef~ below, 
456 %% so his choice above seems to have been deliberate. 
457 %% <- no point, \mathchardef token is fast. 
458 % (/UL) 
459
460 \mathchardef\linenopenaltypar=32000
461
462 % So let's make a hook to ~\output~,  the direct way. The \LaTeX\ 
463 % macro ~\@reinserts~ puts the footnotes back on the page.
464 %
465 % (New v3.01)                ~\@reinserts~ badly
466 % screws up split footnotes.  The bottom part is
467 % still on the recent contributions list, and the
468 % top part will be put back there after the bottom
469 % part. Thus, since lineno.sty does not play well
470 % with ~\inserts~ anyway, we can safely experiment
471 % with ~\holdinginserts~, without making things
472 % much worse.    
473 %
474 % Or that's what I thought, but:  Just activating
475 % ~\holdinginserts~ while doing the ~\par~ will
476 % not do the trick:  The ~\output~ routine may be
477 % called for a real page break before all line
478 % numbers are done, and how can we get control
479 % over ~\holdinginserts~ at that point?
480 %
481 % Let's try this:  When the ~\output~ routine is
482 % run with ~\holdinginserts=3~ for a real page
483 % break, then we reset ~\holdinginserts~ and
484 % restart ~\output~.
485 %
486 % Then, again, how do we keep the remaining
487 % ~\inserts~ while doing further line numbers? 
488 %
489 % If we find ~\holdinginserts~=$-3$ we activate it again 
490 % after doing ~\output~.             (/New v3.01)
491 %
492 % (New v3.02)                    To work with
493 % multicol.sty, the original output routine is now
494 % called indirectly, instead of being replaced.
495 % When multicol.sty changes ~\output~, it is a
496 % toks register, not the real thing. (/New v3.02)
497
498 % (New v4.00)               Two further complications are added. 
499 %%
500 %% TODO v4.3+: Or three, ~\@nobreakfalse~ after ~\MakeLineNo~ 
501 %% for getting rid of ~\@LN@nopagebreak~. 
502 %                                                         \begin{itemize}\item
503 % [(i)]  Problems with footnotes formerly resulted from 
504 % \LaTeX's ~\@reinserts~ in ~\@specialoutput~ which Stephan's 
505 % ~\linelabel~ called via the ~\marginpar~ mechanism. 
506 %                                                                        \item
507 % [(ii)] \LaTeX\ commands using ~\vadjust~ formerly didn't work 
508 % as one would have hoped. The problem is as follows: 
509 % Printing the line number results from 
510 % a box that the output routine inserts at the place of the 
511 % ~\interlinepenalty~. ~\vadjust~ items appear \emph{above} the 
512 % ~\interlinepenalty~ (\TeX book p._105). So ~\pagebreak~, e.g., 
513 % formerly sent the line number to the next page, while the 
514 % penalty from ~\nopagebreak~ could not tie the following line, 
515 % since it was screened off by the line number box.---Our trick 
516 % is putting the ~\vadjust~ items into a list macro from which 
517 % the output routine transfers them into the vertical list, 
518 % below the line number box. 
519 %                                                                \end{itemize}
520 % In this case_(ii), like in case_(i), footnotes would suffer 
521 % if ~\holdinginserts~ were non-positive. Indeed, in both 
522 % cases_(i) and_(ii) we tackle the footnote problem by extending 
523 % that part of Stephan's output routine that is active when 
524 % ~\holdinginserts~ is positive. This extension writes the line 
525 % number ~\newlabel~ to the .aux file (which was formerly done 
526 % under $~\holdinginserts~=-3$) and handles the ~\vadjust~ 
527 % items.---To trigger ~\output~ and its ~\linelabel~ or, resp., 
528 % ~\vadjust~ part, the list of signal penalties started 
529 % immediately before is increased here (first for ~\linelabel~, 
530 % second for postponed ~\vadjust~ items): 
531
532 \mathchardef\@Mllbcodepen=11111 
533 \mathchardef\@Mppvacodepen=11112 
534
535 % (/New v4.00) (New v4.2) David Kastrup urges to use a private 
536 % name instead of ~\the\output~ (LaTeX-L-list). Otherwise an 
537 % ~\output~ routine loaded later and using ~\newtoks\output~ 
538 % again may get lost entirely. So we change use of ~\@LN@output~, 
539 % using it for the former purpose. Reference to what appeared 
540 % with the name of ~\output~ here lasts for a few lines and then 
541 % is given away. 
542
543 \let\@tempa\output
544 \newtoks\output
545 \let\@LN@output\output
546 \output=\expandafter{\the\@tempa}
547
548 % Now we add two cases to Stephan's output routine. (New v4.00)
549
550 \@tempa={%
551 % (/New 4.2)
552             \LineNoTest
553             \if@tempswa
554 %% 
555 %% (UL) Learnt that even in def.s blank line means ~\par~. 
556 %% to leave visual space in present file with having a
557 %% blank line neither in present nor in .tex file, 
558 %% use double comment mark (`%%'). (/UL) 
559 %% 
560 % (New v4.00)
561 % We insert recognition of waiting ~\linelabel~ items--- 
562 %% 
563               \ifnum\outputpenalty=-\@Mllbcodepen 
564                 \WriteLineNo 
565 %%
566 % ---and of waiting ~\vadjust~ items: 
567 %% 
568               \else 
569                 \ifnum\outputpenalty=-\@Mppvacodepen 
570                   \PassVadjustList 
571                 \else 
572 %% 
573 %% Now we give control back to Stephan. 
574 % (/New v4.00) (New v4.2) Outsource ``Standard'' output 
575 % ---which occurs so rarely---to subsection_\ref{ss:LLO}: 
576 %% 
577                   \LineNoLaTeXOutput 
578 % (/New v4.2) (New v4.00) 
579 % Two new ~\fi~s for the ~\linelabel~ and ~\vadjust~ tests--- 
580 %% 
581                 \fi 
582               \fi 
583 %%
584 % ---and the remaining is 
585 %%%next three lines are 
586 % Stephan's code again: 
587 % (/New v4.00) 
588 %%
589             \else  
590               \MakeLineNo
591             \fi
592             }
593  
594 % (New v4.00)                                  Our new macros 
595 % ~\WriteLineNo~ and ~\PassVadjustList~ will be dealt with in 
596 % sections_\ref{s:LNref} and_\ref{ss:PVadj}. (/New v4.00) 
597
598 %                                                                \subsection{%
599 %               \scs{LineNoTest}
600 %                                                                     \unskip} 
601
602 % The float mechanism inserts ~\interlinepenalty~s during
603 % ~\output~.  So carefully reset it before going on.  Else
604 % we get doubled line numbers on every float placed in
605 % horizontal mode, e.g, from ~\linelabel~.  
606 %
607 % Sorry, neither a ~\linelabel~ nor a ~\marginpar~ should
608 % insert a penalty, else the following linenumber
609 % could go to the next page. Nor should any other
610 % float.  So let us suppress the ~\interlinepenalty~ 
611 % altogether with the ~\@nobreak~ switch.
612 %
613 % Since (ltspace.dtx, v1.2p)[1996/07/26], the ~\@nobreaktrue~ does
614 % it's job globally.  We need to do it locally here.
615
616 \def\LineNoTest{%
617   \let\@@par\@@@par
618   \ifnum\interlinepenalty<-\linenopenaltypar
619      \advance\interlinepenalty-\linenopenalty
620      \@LN@nobreaktrue
621      \fi
622   \@tempswatrue
623   \ifnum\outputpenalty>-\linenopenaltypar\else
624      \ifnum\outputpenalty>-188000\relax
625        \@tempswafalse
626        \fi
627      \fi
628   }
629
630 \def\@LN@nobreaktrue{\let\if@nobreak\iftrue} % renamed v4.33
631
632 % (UL)                                      I thought here were 
633 % another case of the save stack problem explained in \TeX book, 
634 % p._301, namely through both local and global changing 
635 % ~\if@nobreak~. However, ~\@LN@nobreak~ is called during 
636 % ~\@LN@output~ only, while ~\@nobreaktrue~ is called by \LaTeX's 
637 % ~\@startsection~ only. The latter never happens during 
638 % ~\@LN@output~. So there is no local value of ~\if@nobreak~ on 
639 % save stack when ~\@nobreaktrue~ acts, since ~\the\@LN@output~ 
640 % (where ~\@LN@output~ is a new name for the original ~\output~) 
641 % is executed within a group (\TeX book p._21).
642 %%
643 %%           2004/09/19 Removed nonsense here according to Stephan 2004/09/04.
644 %% 
645 % (/UL) 
646 %
647 %                                                                \subsection{%
648 %               Other output routines (v4.2)
649 %                                                       \unskip}\label{ss:LLO} 
650
651 % I had thought of dealing with bad interference of footnotes 
652 % (and ~\enlargethispage~) with (real) ~\marginpar~s and floats 
653 % \emph{here}. Yet this is done in 
654 %                                                                           \[
655 %     ~http://~\mbox{[CTAN]}
656 %           ~/macros/latex/contrib/tamefloats/tameflts.sty~
657 %                                                                           \]
658 % now, and I prefer striving for compatibility with the latter. 
659 % (See there for expanding on the problem.)
660 % This requires returning the special absolute value of 
661 % ~\holdinginserts~ that ~lineno.sty~ finds at the end of a newly 
662 % typeset paragraph---now done in subsection_\ref{ss:calls}
663 % (~\linenumberpar~). 
664 % The former ~\LineNoHoldInsertsTest~ has been filled into here. 
665 %% ---`3' is replaced by ~\thr@@~ for a while. ~\thr@@~ is 
666 %% useful practice since plain \TeX, but Stephan may have been 
667 %% wise in suspecting that \LaTeX\ once could forsake ~\thr@@~. 
668 %% The same holds for ~\@M=10000~. 
669 % Note: when the following code is invoked, we have 
670 % ~\if@tempswa~_ =_~\iftrue~. 
671 % WARNING: I am still not sure whether the present code is good 
672 % for cooperating with other packages that use ~\holdinginserts~. 
673
674 \def\LineNoLaTeXOutput{% 
675   \ifnum \holdinginserts=\thr@@   % v4.33 without \@tempswafalse
676     \global\holdinginserts-\thr@@ 
677     \unvbox\@cclv 
678     \ifnum \outputpenalty=\@M \else \penalty\outputpenalty \fi 
679   \else
680     \if@twocolumn \let\@makecol\@LN@makecol \fi
681     \the\@LN@output % finally following David Kastrup's advice. 
682     \ifnum \holdinginserts=-\thr@@ 
683       \global\holdinginserts\thr@@ \fi 
684   \fi
685 }
686
687 % \textit{More on dealing with output routines from other 
688 %         packages:} 
689 % Since ~lineno.sty~'s output routine is called at least once 
690 % for each output line, I think it should be in \TeX's 
691 % original ~\output~, while output routines dealing with 
692 % building pages and with floats etc.\ should be filled into 
693 % registers addressed by ~\output~ after ~\newtoks\output~. 
694 % Therefore                                                  \begin{enumerate}
695 %                                                                        \item 
696 %   ~tameflts.sty~ should be loaded \emph{after} ~lineno.sty~; 
697 %                                                                        \item 
698 %   if a class changes ~\output~ (APS journal class revtex4, 
699 %   e.g.), ~lineno.sty~ should be loaded by ~\RequirePackage~ 
700 %   [here presumably following some options in 
701 %   brackets]~{lineno}~ \emph{preceding} ~\documentclass~. 
702 %                                                                        \item 
703 %   If you actually maintain such a class, please consider 
704 %   loading ~lineno.sty~ on some draft option. The bunch of 
705 %   lineno's package options may be a problem, but perhaps the 
706 %   purpose of your class is offering only very few of lineno's 
707 %   options anyway, maybe just one. 
708 %                                                              \end{enumerate} 
709 % The latter may also be needed with classes that don't follow 
710 % David Kastrup's rule on changing ~\output~. 
711
712 %                                                                \subsection{%
713 %               \scs{MakeLineNo}: Actually attach line number 
714 %                                                       \unskip}\label{ss:MLN} 
715
716 % We have to return all the page to the current page, and
717 % add a box with the line number, without adding
718 % breakpoints, glue or space.  The depth of our line number
719 % should be equal to the previous depth of the page, in
720 % case the page breaks here,  and the box has to be moved up
721 % by that depth.  
722 %
723 % The ~\interlinepenalty~ comes after the ~\vadjust~ from a
724 % ~\linelabel~,  so we increment the line number \emph{after}
725 % printing it. The macro ~\makeLineNumber~ produces the
726 % text of the line number, see section \ref{appearance}.
727
728 % (UL)                        I needed a while to understand 
729 % the sentence on incrementing. Correctly: writing the 
730 % ~\newlabel~ to the .aux file is triggered by the signal 
731 % penalty that ~\end@float~ inserts via ~\vadjust~. 
732 % However, this could be changed by our new ~\PostponeVadjust~. 
733 % After ~\c@linenumber~ has been introduced as a \LaTeX\ 
734 % counter, it might be preferable that it behaved like standard 
735 % \LaTeX\ counters which are incremented shortly before printing. 
736 % But this may be of little practical relevance in this case, 
737 % as ~\c@linenumber~ is driven in a very non-standard 
738 % way.---However still, this behaviour of ~\c@linenumber~ 
739 % generates a problem with our ~edtable.sty~. 
740 %% \unskip---Before, 
741 %% I thought that Stephan had reported his reasoning incorrectly 
742 %% and rather did this because of his ~\resetlinenumber~ which 
743 %% initializes ~\c@linenumber~ to 1 instead of 0---the latter is 
744 %% usual with \LaTeX\ counters. Cf._additional comment at 
745 %% ~\resetlinenumber~. 
746 % (/UL). 
747 %
748 % Finally we put in the natural ~\interlinepenalty~, except
749 % after the last line. 
750 %
751 % (New v3.10) Frank Mittelbach points out that box255 may be 
752 % less deep than the last box inside, so he proposes to 
753 % measure the page depth with ~\boxmaxdepth=\maxdimen~.
754 % (/New v3.10)
755
756 % (UL, New v4.00)               We also resume the matter of 
757 % ~\vadjust~ items that was started in section_\ref{ss:output}. 
758
759 % \TeX\ puts only nonzero interline 
760 % penalties into the vertical list (\TeX book p._105), while 
761 % ~lineno.sty~ formerly replaced the signal interline penalty by 
762 % something closing with an explicit penalty of the value that 
763 % the interline penalty would have without ~lineno.sty~. 
764 % This is usually 0. Now, explicit vertical penalties can be 
765 % very nasty with respect to ~\nopagebreak~, e.g., a low (even 
766 % positive) ~\widowpenalty~ may force a widow where you 
767 % explicitly tried to forbid it by ~\nopagebreak~ 
768 % (see explanation soon below). 
769 % The ~\nopagebreak~ we create here would never work if all 
770 % those zero penalties were present.---On 
771 % the other hand, we cannot just omit Stephan's zero penalties, 
772 % because \TeX\ puts a penalty of 10000 after what ~lineno.sty~ 
773 % inserts (\TeX book p._125). This penalty must be overridden 
774 % to allow page breaks between ordinary lines. To revive 
775 % ~\nopagebreak~, we therefore replace those zero (or low) 
776 % penalties by penalties that the user demanded by 
777 % ~\nopagebreak~.---This mechanism is not perfect and does not 
778 % exactly restore the original \LaTeX\ working of ~\pagebreak~ 
779 % and ~\nopagebreak~. Viz., if there are several vertical 
780 % penalties after a line which were produced by closely sitting 
781 % ~\[no]pagebreak~s, without ~lineno.sty~ the lowest penalty would 
782 % be effective (cf._\TeX book exercise_14.10). Our mechanism, by 
783 % contrast, chooses the \emph{last} user-set penalty of the line 
784 % as the effective one. It would not be very difficult to come 
785 % more close to the original mechanism, but until someone urges 
786 % us we will cling to the present simple way. You may consider an 
787 % advantage of the difference between our mechanism and the 
788 % original one that the user here can actually override low 
789 % penalties by ~\nopagebreak~, which may be what a lay \LaTeX\ 
790 % user would expect. 
791 %% ---Zero glue would do instead of zero 
792 %% penalty! This could make things easier. Maybe next time. 
793 %% <- v4.4: No, problem with column depth. 
794 % (/UL, /New v4.00) 
795
796 \def\MakeLineNo{%
797    \@LN@maybe@normalLineNumber                        % v4.31 
798    \boxmaxdepth\maxdimen\setbox\z@\vbox{\unvbox\@cclv}%
799    \@tempdima\dp\z@ \unvbox\z@
800    \sbox\@tempboxa{\hb@xt@\z@{\makeLineNumber}}%
801 %% 
802 % (New v4.00) Previously, 
803 %                                                  \begin{old}\begin{verbatim}
804 % %    \stepcounter{linenumber}%
805 % \end{verbatim}
806 %                                                                    \end{old}
807 %%                                         %% TODO: Still first `\begin{old}'?
808 % followed. (Of course, there was no 
809 % comment mark; I put it there to make 
810 % reading the actual code easy.) 
811
812 % (New v4.22: improved) Why not just 
813 %   \[~\global\advance\c@linenumber\@ne~?\]
814 % ~\stepcounter~ additionally resets ``subordinate'' 
815 % counters, but which could these (usefully) be? 
816 % Again, may be column counters with ~edtable.sty~!? 
817
818 % But then, our ~edtable.sty~ and its ~longtable~ option 
819 % should use it as well. So use a shorthand supporting 
820 % uniformity. You can even use it as a hook for choosing 
821 % ~\global\advance\c@linenumber\@ne~ instead of our choice. 
822 % (/New v4.22) 
823 %% 
824    \stepLineNumber
825 %% 
826 %  (New v4.4)   Now 
827 %% 
828    \ht\@tempboxa\z@ \@LN@depthbox 
829 %% 
830 % appends the box containing the line number without changing 
831 % ~\prevdepth~---see end of section. 
832 % Now is the time for inserting the $\dots$ (/New v4.4) 
833 %% The line number has now been placed (it may be invisible 
834 %% depending on the modulo feature), so 
835 %% we can insert the 
836 % ~\vadjust~ items. We cannot do this much later, because 
837 % their right place is above the artificial interline 
838 % penalty which Stephan's code will soon insert 
839 % (cf._\TeX book p._105). The next command is just ~\relax~ 
840 % if no ~\vadjust~ items have been accumulated for the 
841 % current line. Otherwise it is a list macro inserting 
842 % the ~\vadjust~ items and finally resetting itself. 
843 % (This is made in section_\ref{ss:PVadj} below.)
844 % If the final item is a penalty, it is stored so it can 
845 % compete with other things about page breaking. 
846 %% 
847    \@LN@do@vadjusts 
848    \count@\lastpenalty 
849 %% 
850 % At this place, 
851 %                                                  \begin{old}\begin{verbatim}
852 % %    \ifnum\outputpenalty=-\linenopenaltypar\else
853 % \end{verbatim}
854 %                                                                    \end{old}
855 % originally followed. We need something \emph{before} the 
856 % ~\else~: 
857 %% 
858    \ifnum\outputpenalty=-\linenopenaltypar 
859      \ifnum\count@=\z@ \else 
860 %% 
861 % So final ~\pagebreak[0]~ or ~\nopagebreak[0]~ has no 
862 % effect---but this will make a difference after headings only, 
863 % where nobody should place such a thing anyway. 
864 %% 
865        \xdef\@LN@parpgbrk{% 
866          \penalty\the\count@
867          \global\let\noexpand\@LN@parpgbrk
868                       \noexpand\@LN@screenoff@pen}% v4.4 
869 %% 
870 % That penalty will replace former ~\kern\z@~ in 
871 % ~\linenumberpar~, see subsection_\ref{ss:calls}.---A
872 % few days earlier, I tried to send just a penalty value. 
873 % However, the ~\kern\z@~ in ~\linenumberpar~ is crucial, 
874 % as I then found out. See below.---The final penalty is 
875 % repeated, but this does no harm. (It would not be very 
876 % difficult to avoid the repeating, but it may even be 
877 % less efficient.) It may be repeated due to the previous 
878 % ~\xdef~, but it may be repeated as well below in the 
879 % present macro where artificial interline penalty is to 
880 % be overridden.
881 %% 
882      \fi
883    \else
884 %% 
885 % (/New v4.00) 
886 %%                                        Corrected code alignment with v4.11. 
887      \@tempcnta\outputpenalty
888      \advance\@tempcnta -\linenopenalty
889 %% 
890 % (New v4.00) 
891 %                                                  \begin{old}\begin{verbatim}
892 % %        \penalty\@tempcnta
893 % \end{verbatim}
894 %                                                                    \end{old}
895 % followed previously. To give ~\nopagebreak~ a chance, 
896 % we do 
897 %%                                        Corrected code alignment with v4.11. 
898      \penalty \ifnum\count@<\@tempcnta \@tempcnta \else \count@ \fi 
899 %% 
900 % instead.---In ~linenox0.sty~, the ~\else~ thing once was omitted. 
901 % Sergei Mariev's complaint (thanks!) showed that it is vital 
902 % (see comment before ~\MakeLineNo~). 
903 % The remaining ~\fi~ from previous package version closes the 
904 % ~\ifnum\outputpenalty~\dots 
905 % (/New v4.00) 
906 %% 
907    \fi
908    }
909
910 % (New v4.00) 
911
912 \newcommand\stepLineNumber{\stepcounter{linenumber}} 
913
914 % For reason, see use above. (/New v4.00) 
915 %%                                   %% TODO v4.4+: ~\newcommand~ more often!? 
916
917 % (New v4.4)   The depth preserving trick is drawn here from 
918 % ~\MakeLineNo~ because it will be used again in 
919 % section_\ref{ss:calls}.
920
921 \def\@LN@depthbox{% 
922   \dp\@tempboxa=\@tempdima
923   \nointerlineskip \kern-\@tempdima \box\@tempboxa} 
924
925 % (/New v4.4) 
926
927 %                                                                   \section{%
928 %               Control line numbering 
929 %                                                                     \unskip}
930 %                                                                \subsection{%
931 %                  Inserting \scs{output} calls           %% own subsec. v4.4. 
932 %                                                     \unskip}\label{ss:calls}
933 % The line numbering is controlled via ~\par~.  \LaTeX\
934 % saved the \TeX-primitive ~\par~ in ~\@@par~.  We push it
935 % one level further out, and redefine ~\@@par~ to insert
936 % the ~\interlinepenalty~ needed to trigger the
937 % line numbering. And we need to allow pagebreaks after a
938 % paragraph. 
939
940 % New (2.05beta): the prevgraf test.  A paragraph that ends with a
941 % displayed equation, a ~\noindent\par~ or ~wrapfig.sty~ produce empty
942 % paragraphs. These should not get a spurious line number via
943 % ~\linenopenaltypar~. 
944
945 \let\@@@par\@@par
946 \newcount\linenoprevgraf
947
948 % (UL)                          And needs ~\linenoprevgraf~ 
949 % to be a counter? Perhaps there may be a paragraph having 
950 % thousands of lines, so ~\mathchardef~ doesn't suffice (really??). 
951 %%
952 %%                      %% TODO: limitations of lines per paragraph elsewhere? 
953 %%                      %% Signal penalties, e.g.!? ~\deadcycles~!? 
954 %%
955 % A macro ending on ~\relax~ might suffice, but would be 
956 % somewhat slow. I think I will use ~\mathchardef~ next time. 
957 % Or has any user used ~\linenoprevgraf~? (/UL) 
958
959 %% v4.33: changed code alignment for better understanding. 
960 \def\linenumberpar{% 
961   \ifvmode \@@@par \else 
962     \ifinner \@@@par \else
963       \xdef\@LN@outer@holdins{\the\holdinginserts}% v4.2 
964       \advance \interlinepenalty \linenopenalty
965       \linenoprevgraf \prevgraf
966       \global \holdinginserts \thr@@ 
967       \@@@par
968       \ifnum\prevgraf>\linenoprevgraf
969         \penalty-\linenopenaltypar
970       \fi
971 %% 
972 % (New v4.00) 
973 %                                                  \begin{old}\begin{verbatim}
974 % %          \kern\z@ 
975 % \end{verbatim}
976 %                                                                    \end{old}
977 % was here previously. What for? 
978 % According to \TeX book p._125, Stephan's 
979 % interline penalty is changed into 10000. At the end of a 
980 % paragraph, the ~\parskip~ would follow that penalty of 10000, 
981 % so there could be a page break neither at the 
982 % ~\parskip~ nor at the ~\baselineskip~ (\TeX book p._110)---so 
983 % there could never be a page break between two paragraphs. 
984 % So something must screen off the 10000 penalty. 
985 % Indeed, the ~\kern~ is a place to break. 
986 % (Stephan once knew this: see `allow pagebreaks' above.)
987
988 % Formerly, I tried to replace ~\kern\z@~ by 
989 %                                                  \begin{old}\begin{verbatim}
990 % %         \penalty\@LN@parpgpen\relax 
991 % \end{verbatim}
992 %                                                                    \end{old}
993 % ---but this allows a page break after heading. So: 
994 %% 
995       \@LN@parpgbrk 
996 %% 
997 %% After heading, ~\kern\z@~ resulting from previous line 
998 %% (see below) is followed by ~\write~ or ~\penalty10000~, 
999 %% so causes no page break. 
1000
1001 % These and similar changes were formerly done by ~linenox1.sty~. 
1002 % (/New v4.00) 
1003
1004 % (New v4.4) 
1005 % A ~\belowdisplayskip~ may precede the previous when the paragraph 
1006 % ends on a display-math; or there may be a ~\topsep~ from a list, etc. 
1007 % ~\addvspace~ couldn't take account for it with ~\kern\z@~ 
1008 % here. v4.32 therefore moved the space down -- with at least two 
1009 % bad consequences. 
1010 % Moreover, David Josef Dev observes that ~\kern\z@~ may 
1011 % inappropriately yield column depth 0pt. 
1012 % For these reasons, we introduce ~\@LN@screenoff@pen~ below. 
1013 % (/New v4.4) 
1014 %% 
1015       \global\holdinginserts\@LN@outer@holdins % v4.2
1016       \advance\interlinepenalty -\linenopenalty
1017     \fi     % from \ifinner ... \else 
1018   \fi}      % from \ifvmode ... \else 
1019
1020 % (New v4.00, v4.4) Initialize ~\@LN@parpgbrk~, accounting 
1021 % for earlier space and for appropriate columndepth. 
1022 % We use former ~\MakeLineNo~'s depth-preverving trick 
1023 % ~\@LN@depthbox~ again: 
1024
1025 \def\@LN@screenoff@pen{% 
1026   \ifdim\lastskip=\z@ 
1027     \@tempdima\prevdepth \setbox\@tempboxa\null 
1028     \@LN@depthbox                           \fi}
1029
1030 \global\let\@LN@parpgbrk\@LN@screenoff@pen 
1031
1032 % (/New v4.4, v4.00) 
1033 %                                                                \subsection{%
1034 %                  Turning on/off                         %% own subsec. v4.4.
1035 %                                                     \unskip}\label{ss:OnOff}
1036 % The basic commands to enable and disable line numbers.
1037 % ~\@par~ and ~\par~ are only touched, when they are ~\let~ 
1038 % to ~\@@@par~/~\linenumberpar~.  The line number may be
1039 % reset to 1 with the star-form, or set by an optional
1040 % argument ~[~<number>~]~. 
1041
1042 % (New v4.00)        We add ~\ifLineNumbers~ etc.\ since 
1043 % a number of our new adjustments need to know whether 
1044 % linenumbering is active. This just provides a kind of 
1045 % shorthand for ~\ifx\@@par\linenumberpar~; moreover it is 
1046 % more stable: who knows what may happen to ~\@@par~?---A 
1047 % caveat: ~\ifLineNumbers~ may be wrong. E.g., it may be 
1048 % ~\iffalse~ where it acts, while a ~\linenumbers~ a few 
1049 % lines below---in the same paragraph---brings about that 
1050 % the line where the ~\ifLineNumbers~ appears gets a 
1051 % marginal number. 
1052 %%                                      Better implementation suggested below. 
1053 %% 
1054 % (New v4.3)        Just noticed: Such tricks have been 
1055 % disallowed with v4.11, see subsections_\ref{ss:LL} 
1056 % and_\ref{ss:OnOff}.---Moreover, the switching between
1057 % meanings of ~\linelabel~ for a possible error message 
1058 % as of v4.11 is removed. Speed is difficult to esteem 
1059 % and also depends on applications. Just use the most 
1060 % simple code you find.                      (/New v4.3) 
1061
1062 \newif\ifLineNumbers \LineNumbersfalse 
1063
1064 % (/New v4.00) 
1065
1066 \def\linenumbers{% 
1067      \LineNumberstrue                            % v4.00 
1068      \xdef\@LN@outer@holdins{\the\holdinginserts}% v4.3 
1069 %%
1070 % (New v4.3) The previous line is for ~{linenomath}~ 
1071 % in a first numbered paragraph.         (/New v4.3) 
1072 %% 
1073      \let\@@par\linenumberpar
1074  %      \let\linelabel\@LN@linelabel % v4.11, removed v4.3 
1075      \ifx\@par\@@@par\let\@par\linenumberpar\fi
1076      \ifx\par\@@@par\let\par\linenumberpar\fi
1077      \@LN@maybe@moduloresume         % v4.31 
1078      \@ifnextchar[{\resetlinenumber}%]
1079                  {\@ifstar{\resetlinenumber}{}}%
1080      }
1081
1082 \def\nolinenumbers{% 
1083   \LineNumbersfalse                              % v4.00
1084   \let\@@par\@@@par
1085  %   \let\linelabel\@LN@LLerror      % v4.11, removed v4.3 
1086   \ifx\@par\linenumberpar\let\@par\@@@par\fi
1087   \ifx\par\linenumberpar\let\par\@@@par\fi
1088   }
1089
1090 % (New v4.00)               Moreover, it is useful to switch to 
1091 % ~\nolinenumbers~ in ~\@arrayparboxrestore~. We postpone this 
1092 % to section_\ref{ss:ReDef} where we'll have an appending macro 
1093 % for doing this.                                  (/New v4.00) 
1094
1095 % What happens with a display math?  Since ~\par~ is not executed,
1096 % when breaking the lines before a display, they will not get
1097 % line numbers.  Sorry, but I do not dare to change
1098 % ~\interlinepenalty~ globally, nor do I want to redefine
1099 % the display math environments here.
1100 %   \begin{displaymath}
1101 %                       display \ math
1102 %   \end{displaymath}
1103 % See the subsection below, for a wrapper environment to make
1104 % it work.  But that requires to wrap each and every display
1105 % in your \LaTeX\ source %%.
1106 %% v4.3: 
1107 % (see option ~displaymath~ in subsections_\ref{ss:v3opts} 
1108 % and_\ref{ss:display} for some relief [UL]). 
1109 %
1110 % The next two commands are provided to turn on line
1111 % numbering in a specific mode. Please note the difference:
1112 % for pagewise numbering, ~\linenumbers~ comes first to
1113 % inhibit it from seeing optional arguments, since
1114 % re-/presetting the counter is useless. 
1115
1116 \def\pagewiselinenumbers{\linenumbers\setpagewiselinenumbers}
1117 \def\runninglinenumbers{\setrunninglinenumbers\linenumbers}
1118
1119 % Finally, it is a \LaTeX\ style, so we provide for the use
1120 % of environments, including the suppression of the
1121 % following paragraph's indentation.
1122
1123 %% TODO: v4.4+: 
1124 % (UL)                                I am drawing the following 
1125 % private thoughts of Stephan's to publicity so that others may 
1126 % think about them---or to remind myself of them in an efficient 
1127 % way.                                                     (/UL) 
1128 %% UL changed `%%%' to `% %' below. 
1129 %% TODO: add \par to \linenumbers, if called from an environment. %% v4.3 
1130 %% ToDO: add an \@endpe hack if \linenumbers are turned on
1131 %                                                  \begin{old}\begin{verbatim} 
1132 % % TO DO: add \par to \linenumbers, if called from an environment.
1133 % % To DO: add an \@endpe hack if \linenumbers are turned on
1134 % %        in horizontal mode. {\par\parskip\z@\noindent} or
1135 % %        something.
1136 % \end{verbatim}
1137 %                                                                    \end{old} 
1138 % (UL)     However, I rather think that ~\linenumbers~ and        %% v4.31 
1139 % ~\nolinenumbers~ should execute a ~\par~ already. (Then the 
1140 % ~\par~s in the following definitions should be removed.) (/UL) 
1141
1142 \@namedef{linenumbers*}{\par\linenumbers*}
1143 \@namedef{runninglinenumbers*}{\par\runninglinenumbers*}
1144
1145 \def\endlinenumbers{\par\@endpetrue}
1146 \let\endrunninglinenumbers\endlinenumbers
1147 \let\endpagewiselinenumbers\endlinenumbers
1148 \expandafter\let\csname endlinenumbers*\endcsname\endlinenumbers
1149 \expandafter\let\csname endrunninglinenumbers*\endcsname\endlinenumbers
1150 \let\endnolinenumbers\endlinenumbers
1151
1152 %
1153 %                                                                \subsection{%
1154 %                  Display math
1155 %                                                        \unskip}\label{ss:DM}
1156 %
1157 % Now we tackle the problem to get display math working.  
1158 % There are different options.
1159 %                                                      \begin{enumerate}\item[
1160 % 1.]  Precede every display math with a ~\par~.  
1161 %      Not too good.
1162 %                                                                       \item[
1163 % 2.]  Change ~\interlinepenalty~ and associates globally.  
1164 %      Unstable.
1165 %                                                                       \item[
1166 % 3.]  Wrap each display math with a ~{linenomath}~  
1167 %      environment. 
1168 %                                                              \end{enumerate}
1169 % We'll go for option 3.  See if it works:  
1170 % \begin{linenomath}
1171 %   \begin{equation}
1172 %      display \ math
1173 %   \end{equation}
1174 % \end{linenomath}
1175 % The star form ~{linenomath*}~ should also number the lines
1176 % of the display itself,
1177 % \begin{linenomath*}
1178 %   \begin{eqnarray}
1179 %     multi   && line \\
1180 %     display && math \\
1181 %     & 
1182 %     \begin{array}{c}
1183 %       with \\
1184 %       array
1185 %     \end{array}
1186 %     &
1187 %   \end{eqnarray}
1188 % \end{linenomath*}
1189 % including multline displays.
1190
1191 % First, here are two macros to turn
1192 % on linenumbering on paragraphs preceeding displays, with
1193 % numbering the lines of the display itself, or without.
1194 % The ~\ifx..~ tests if line numbering is turned on.  It
1195 % does not harm to add these wrappers in sections that are
1196 % not numbered.  Nor does it harm to wrap a display
1197 % twice, e.q, in case you have some ~{equation}~s wrapped
1198 % explicitely, and later you redefine ~\equation~ to do it
1199 % automatically. 
1200
1201 % (New v4.3)  To avoid the spurious line number above a 
1202 % display in vmode, I insert ~\ifhmode~.       (/New v4.3) 
1203
1204 \newcommand\linenomathNonumbers{%
1205   \ifLineNumbers 
1206 %%  \ifx\@@par\@@@par\else 
1207     \ifnum\interlinepenalty>-\linenopenaltypar
1208       \global\holdinginserts\thr@@ 
1209       \advance\interlinepenalty \linenopenalty
1210      \ifhmode                                   % v4.3 
1211       \advance\predisplaypenalty \linenopenalty
1212      \fi 
1213     \fi
1214   \fi
1215   \ignorespaces
1216   }
1217
1218 \newcommand\linenomathWithnumbers{%
1219   \ifLineNumbers 
1220 %%  \ifx\@@par\@@@par\else
1221     \ifnum\interlinepenalty>-\linenopenaltypar
1222       \global\holdinginserts\thr@@ 
1223       \advance\interlinepenalty \linenopenalty
1224      \ifhmode                                   % v4.3 
1225       \advance\predisplaypenalty \linenopenalty
1226      \fi 
1227       \advance\postdisplaypenalty \linenopenalty
1228       \advance\interdisplaylinepenalty \linenopenalty
1229     \fi
1230   \fi
1231   \ignorespaces
1232   }
1233
1234 % The ~{linenomath}~ environment has two forms, with and
1235 % without a star.  The following two macros define the
1236 % environment, where the stared/non-stared form does/doesn't number the
1237 % lines of the display or vice versa.
1238
1239 \newcommand\linenumberdisplaymath{%
1240   \def\linenomath{\linenomathWithnumbers}%
1241   \@namedef{linenomath*}{\linenomathNonumbers}%
1242   }
1243
1244 \newcommand\nolinenumberdisplaymath{%
1245   \def\linenomath{\linenomathNonumbers}%
1246   \@namedef{linenomath*}{\linenomathWithnumbers}%
1247   }
1248
1249 \def\endlinenomath{% 
1250   \ifLineNumbers                            % v4.3 
1251    \global\holdinginserts\@LN@outer@holdins % v4.21 
1252   \fi 
1253    \global % v4.21 support for LaTeX2e earlier than 1996/07/26. 
1254    \@ignoretrue
1255 }
1256 \expandafter\let\csname endlinenomath*\endcsname\endlinenomath
1257
1258 % The default is not to number the lines of a display.  But
1259 % the package option ~mathlines~ may be used to switch
1260 % that behavior.
1261
1262 \nolinenumberdisplaymath
1263
1264 %
1265 %                                                                   \section{%
1266 %               Line number references
1267 %                                                      \unskip}\label{s:LNref} 
1268 %                                                                \subsection{% 
1269 %                  Internals                              %% New subsec. v4.3. 
1270 %                                                                     \unskip}
1271 % The only way to get a label to a line number in a
1272 % paragraph is to ask the output routine to mark it.
1273 %
1274 % (New v4.00) The following two paragraphs don't hold any 
1275 % longer, see below. (/New v4.00) 
1276 %                                                  \begin{old}\begin{verbatim}
1277 % % We use the marginpar mechanism to hook to ~\output~ for a
1278 % % second time.  Marginpars are floats with number $-1$, we
1279 % % fake marginpars with No $-2$. Originally, every negative
1280 % % numbered float was considered to be a marginpar.
1281 % % 
1282 % % The float box number ~\@currbox~ is used to transfer the
1283 % % label name in a macro called ~\@LNL@~<box-number>.
1284 % \end{verbatim}
1285 %                                                                    \end{old}
1286 % A ~\newlabel~ is written to the aux-file.  The reference
1287 % is to ~\theLineNumber~, \emph{not} ~\thelinenumber~.
1288 % This allows to hook in, as done below for pagewise line
1289 % numbering. 
1290 %
1291 % (New v3.03) The ~\@LN@ExtraLabelItems~ are added for a hook
1292 % to keep packages like ~{hyperref}~ happy.      (/New v3.03)
1293
1294 % (New v4.00) 
1295 % We fire the ~\marginpar~ mechanism, so we leave \LaTeX's 
1296 % ~\@addmarginpar~ untouched. 
1297 %                                                  \begin{old}\begin{verbatim}
1298 % % \let\@LN@addmarginpar\@addmarginpar
1299 % % \def\@addmarginpar{%
1300 % %    \ifnum\count\@currbox>-2\relax
1301 % %      \expandafter\@LN@addmarginpar
1302 % %    \else
1303 % %      \@cons\@freelist\@currbox
1304 % %      \protected@write\@auxout{}{%
1305 % %          \string\newlabel
1306 % %             {\csname @LNL@\the\@currbox\endcsname}%
1307 % %             {{\theLineNumber}{\thepage}\@LN@ExtraLabelItems}}%
1308 % %    \fi}
1309 % \end{verbatim}
1310 %                                                                    \end{old}
1311 % OK, we keep Stephan's ~\@LN@ExtraLabelItems~: 
1312 % (/New v4.00) 
1313
1314 \let\@LN@ExtraLabelItems\@empty
1315
1316 % (New v4.00) 
1317 % We imitate the ~\marginpar~ mechanism without using the 
1318 % ~\@freelist~ boxes. ~\linelabel~ will indeed place a signal 
1319 % penalty (~\@Mllbcodepen~, new), and it will put a label into 
1320 % some list macro ~\@LN@labellist~. A new part of the output 
1321 % routine will take the labels from the list and will write 
1322 % ~\newlabel~s to the .aux file. 
1323
1324 % The following is a version of \LaTeX's ~\@xnext~.
1325
1326 \def\@LN@xnext#1\@lt#2\@@#3#4{\def#3{#1}\gdef#4{#2}}
1327
1328 % This takes an item ~#1~ from a list ~#4~ into ~#3~; 
1329 % to be used as ~\expandafter\@LN@xnext#4\@@#3#4~. 
1330 % Our lists use ~\@lt~ after each item for separating. 
1331 % Indeed, there will be another list macro which can 
1332 % appear as argument ~#4~, this will be used for moving 
1333 % ~\vadjust~ items (section_\ref{ss:PVadj}). 
1334 % The list for ~\linelabel~s is the following: 
1335
1336 \global\let\@LN@labellist\@empty 
1337
1338 % The next is the new part of the output routine writing the 
1339 % ~\newlabel~ to the .aux file. Since it is no real page output, 
1340 % the page is put back to top of the main vertical list. 
1341
1342 \def\WriteLineNo{% 
1343   \unvbox\@cclv 
1344   \expandafter \@LN@xnext \@LN@labellist \@@ 
1345                           \@LN@label \@LN@labellist 
1346   \protected@write\@auxout{}{\string\newlabel{\@LN@label}% 
1347          {{\theLineNumber}{\thepage}\@LN@ExtraLabelItems}}% 
1348 }
1349
1350 % (/New v4.00)
1351
1352 %                                                                \subsection{%
1353 %                  The \scs{linelabel} command
1354 %                                                        \unskip}\label{ss:LL}
1355 % To refer to a place in line ~\ref{~<foo>~}~ at page
1356 % ~\pageref{~<foo>~}~ you place a ~\linelabel{~<foo>~}~ at
1357 % that place.
1358 %
1359 %                   \linelabel{demo}
1360 %                   \marginpar{\tiny\raggedright
1361 %                       See if it works: This paragraph
1362 %                       starts on page \pageref{demo}, line
1363 %                       \ref{demo}.  
1364 %                   \unskip}%
1365 % (New v4.11) 
1366 %                                                  \begin{old}\begin{verbatim}
1367 % % If you use this command outside a ~\linenumbers~
1368 % % paragraph, you will get references to some bogus
1369 % % line numbers, sorry.  But we don't disable the command,
1370 % % because only the ~\par~ at the end of a paragraph  may
1371 % % decide whether to print line numbers on this paragraph
1372 % % or not.  A ~\linelabel~ may legally appear earlier than
1373 % % ~\linenumbers~.
1374 % \end{verbatim}
1375 %                                                                    \end{old} 
1376 % This trick is better not allowed---see subsections_\ref{ss:LL} 
1377 % and_\ref{ss:OnOff}.
1378 % (/New v4.11)
1379 %
1380 % ~\linelabel~ 
1381 %                                                  \begin{old}\begin{verbatim}
1382 % %, via a fake float number $-2$, %% new mechanism v4.00
1383 % \end{verbatim}
1384 %                                                                    \end{old}
1385 % puts a
1386 % ~\penalty~ into a ~\vadjust~, which triggers the
1387 % pagebuilder after putting the current line to the main
1388 % vertical list.  A ~\write~ is placed on the main vertical
1389 % list, which prints a reference to the current value of
1390 % ~\thelinenumber~ and ~\thepage~ at the time of the
1391 % ~\shipout~.
1392 %
1393 % A ~\linelabel~ is allowed only in outer horizontal mode.
1394 % In outer vertical mode we start a paragraph, and ignore
1395 % trailing spaces (by fooling ~\@esphack~).
1396
1397 % (New v4.00) We aim at relaxing the previous condition. 
1398 % We insert a hook ~\@LN@mathhook~ and a shorthand 
1399 % ~\@LN@postlabel~ to support the ~mathrefs~ option which 
1400 % allows ~\linelabel~ in math mode. 
1401 %
1402 % The next paragraph is no longer valid. 
1403 %                                                  \begin{old}\begin{verbatim}
1404 % % The argument of ~\linelabel~ is put into a macro with a
1405 % % name derived from the number of the allocated float box.
1406 % % Much of the rest is dummy float setup.
1407 % \end{verbatim}
1408 %                                                                    \end{old}
1409 % (/New v4.00) 
1410 %
1411 % (New v4.11) 
1412 %                                                  \begin{old}\begin{verbatim} 
1413 % % \def\linelabel#1{%
1414 % \end{verbatim}
1415 %                                                                    \end{old} 
1416 % I forgot ~\linenumbers~ today, costed me hours or so. 
1417
1418 \def\@LN@LLerror{\PackageError{lineno}{% 
1419   \string\linelabel\space without \string\linenumbers}{% 
1420   Just see documentation. (New feature v4.11)}\@gobble}
1421
1422 % (New v4.3)         Here some things have changed for v4.3. 
1423 % The previous ~#1~ has been replaced by ~\@gobble~. 
1424 % Ensuing, the ~\linelabel~ error message is re-implemented. 
1425 % I find it difficult to compare efficiency of slight 
1426 % alternatives---so choose an easy one. Explicit switching 
1427 % in ~\linenumbers~ and ~\nolinenumbers~ is an additional 
1428 % command that may better be avoided. 
1429
1430 \newcommand\linelabel{% 
1431   \ifLineNumbers \expandafter \@LN@linelabel 
1432   \else          \expandafter \@LN@LLerror   \fi}
1433 %%\let\linelabel\@LN@LLerror 
1434
1435 \gdef\@LN@linelabel#1{% 
1436 %% 
1437 % ~\gdef~ for hyperref ``symbolically''. (/New v4.11) 
1438 %% 
1439   \ifx\protect\@typeset@protect 
1440 %% 
1441 % $\gets$ And a ~\linelabel~ should never be replicated in a 
1442 % mark or a TOC entry.                           (/New v4.3) 
1443 %% 
1444    \ifvmode
1445        \ifinner \else 
1446           \leavevmode \@bsphack \@savsk\p@
1447        \fi
1448    \else
1449        \@bsphack
1450    \fi
1451    \ifhmode
1452      \ifinner
1453        \@parmoderr
1454      \else
1455 %% 
1456 % (New v4.00) 
1457 %% 
1458        \@LN@postlabel{#1}% 
1459 %                                                  \begin{old}\begin{verbatim}
1460 % %        \@floatpenalty -\@Mii
1461 % %        \@next\@currbox\@freelist
1462 % %            {\global\count\@currbox-2%
1463 % %             \expandafter\gdef\csname @LNL@\the\@currbox\endcsname{#1}}%
1464 % %            {\@floatpenalty\z@ \@fltovf \def\@currbox{\@tempboxa}}%
1465 % %        \begingroup
1466 % %            \setbox\@currbox \color@vbox \vbox \bgroup \end@float
1467 % %        \endgroup
1468 % %        \@ignorefalse \@esphack
1469 % \end{verbatim}
1470 %                                                                    \end{old} 
1471 % (/New v4.00) 
1472 %% 
1473        \@esphack 
1474 %% 
1475 % (New v4.00) 
1476 % The ~\@ignorefalse~ was appropriate before because the 
1477 % ~\@Esphack~ in ~\end@float~ set ~\@ignoretrue~. Cf._\LaTeX's 
1478 % ~\@xympar~. (/New v4.00) 
1479 %% 
1480      \fi
1481    \else
1482 %% 
1483 % (New v4.00) 
1484 %% 
1485      \@LN@mathhook{#1}%
1486 %                                                  \begin{old}\begin{verbatim}
1487 % %     \@parmoderr
1488 % \end{verbatim}
1489 %                                                                    \end{old} 
1490 % Instead of complaining, you may just do your job. 
1491 % (/New v4.00) 
1492 %% 
1493    \fi
1494   \fi 
1495    }
1496
1497 % (New v4.00)   The shorthand just does what happened 
1498 % with ~linenox0.sty~ before ~ednmath0.sty~ (New v4.1: 
1499 % now ~mathrefs~ option) appeared, and 
1500 % the hook is initialized to serve the same purpose. 
1501 % So errors come just where Stephan had built them in, 
1502 % and this is just the \LaTeX\ ~\marginpar~ behaviour. 
1503
1504 \def\@LN@postlabel#1{\g@addto@macro\@LN@labellist{#1\@lt}%
1505        \vadjust{\penalty-\@Mllbcodepen}} 
1506 \def\@LN@mathhook#1{\@parmoderr}
1507
1508 % (/New v4.00) 
1509
1510 %                                                        \modulolinenumbers[3] 
1511 %                                                          \firstlinenumber{1}
1512 %                                                                   \section{%
1513 %               The appearance of the line numbers
1514 %                                                   \unskip}\label{appearance}
1515 %                                                                \subsection{%
1516 %                  Basic code                             %% own subsec. v4.2. 
1517 %                                                                     \unskip}
1518
1519 % The line numbers are set as ~\tiny\sffamily\arabic{linenumber}~,
1520 % $10pt$ left of the text.  With options to place it
1521 % right of the text, or . . .
1522 %
1523 %      . . . here are the hooks:
1524
1525 \def\makeLineNumberLeft{% 
1526   \hss\linenumberfont\LineNumber\hskip\linenumbersep}
1527
1528 \def\makeLineNumberRight{% 
1529   \linenumberfont\hskip\linenumbersep\hskip\columnwidth
1530   \hb@xt@\linenumberwidth{\hss\LineNumber}\hss}
1531
1532 \def\linenumberfont{\normalfont\tiny\sffamily}
1533
1534 \newdimen\linenumbersep
1535 \newdimen\linenumberwidth
1536
1537 \linenumberwidth=10pt
1538 \linenumbersep=10pt
1539
1540 % Margin switching requires ~pagewise~ numbering mode, but
1541 % choosing the left or right margin for the numbers always
1542 % works. 
1543
1544 \def\switchlinenumbers{\@ifstar
1545     {\let\makeLineNumberOdd\makeLineNumberRight
1546      \let\makeLineNumberEven\makeLineNumberLeft}%
1547     {\let\makeLineNumberOdd\makeLineNumberLeft
1548      \let\makeLineNumberEven\makeLineNumberRight}%
1549     }
1550
1551 \def\setmakelinenumbers#1{\@ifstar
1552   {\let\makeLineNumberRunning#1%
1553    \let\makeLineNumberOdd#1%
1554    \let\makeLineNumberEven#1}%
1555   {\ifx\c@linenumber\c@runninglinenumber
1556       \let\makeLineNumberRunning#1%
1557    \else
1558       \let\makeLineNumberOdd#1%
1559       \let\makeLineNumberEven#1%
1560    \fi}%
1561   }
1562
1563 \def\leftlinenumbers{\setmakelinenumbers\makeLineNumberLeft}
1564 \def\rightlinenumbers{\setmakelinenumbers\makeLineNumberRight}
1565
1566 \leftlinenumbers*
1567
1568 % ~\LineNumber~ is a hook which is used for the modulo stuff.
1569 % It is the command to use for the line number, when you
1570 % customize ~\makeLineNumber~.  Use ~\thelinenumber~ to
1571 % change the outfit of the digits.
1572 %
1573 %
1574 % We will implement two modes of operation:
1575 %                                                              \begin{itemize}
1576 % \item  numbers ~running~ through (parts of) the text
1577 % \item  ~pagewise~ numbers starting over with one on top of
1578 %        each page.
1579 %                                                                \end{itemize}
1580 % Both modes have their own count register, but only one is
1581 % allocated as a \LaTeX\ counter, with the attached
1582 % facilities serving both.
1583
1584 \newcounter{linenumber}
1585 \newcount\c@pagewiselinenumber
1586 \let\c@runninglinenumber\c@linenumber
1587
1588 % Only the running mode counter may be reset, or preset,
1589 % for individual paragraphs.  The pagewise counter must
1590 % give a unique anonymous number for each line.
1591
1592 % (New v4.3)                  ~\newcounter{linenumber}~ 
1593 % was the only ~\newcounter~ in the whole package, and 
1594 % formerly I was near using ~\newcount~ instead. Yet 
1595 % ~\newcounter~ may be quite useful for ~\includeonly~. 
1596 % It also supports resetting ``subcounters'', but what 
1597 % could these be? Well, ~edtable~ might introduce a 
1598 % subcounter for columns. 
1599 % (Note that \LaTeX's setting commands would work with 
1600 % ~\newcount\c@linenumber~ already, apart from this. 
1601 % And perhaps sometimes ~\refstepcounter{linenumber}~ 
1602 % wouldn't work---cf._my discussion of ~\stepcounter~ in 
1603 % subsection_\ref{ss:MLN}, similarly ~\refstep...~ would 
1604 % be quite useless. 
1605 % Even the usual redefinitions of ~\thelinenumber~ would 
1606 % work. It is nice, on the other hand, that 
1607 % ~\thelinenumber~ is predefined here. \LaTeX's 
1608 % initialization of the value perhaps just serves making 
1609 % clear \LaTeX\ counters should always be changed 
1610 % globally.---Shortened and improved the discussion here.) 
1611 % (/New v4.3) 
1612
1613 % (New v4.22) 
1614 % ~\c@linenumber~ usually is---globally---incremented by 
1615 % ~\stepcounter~ (at present), so resetting it locally would 
1616 % raise the save stack problem of \TeX book p._301, moreover 
1617 % it would be is useless, there is no hope of keeping the 
1618 % values local (but see subsection_\ref{ss:ILN}). So I insert 
1619 % ~\global~:        (/New v4.22) 
1620
1621 \newcommand*\resetlinenumber[1][\@ne]{% 
1622   \global                             % v4.22
1623   \c@runninglinenumber#1\relax}
1624
1625 % (New v4.00) 
1626 %                                                  \begin{old}\begin{verbatim}
1627 % % \newcommand\resetlinenumber[1][1]{\c@runninglinenumber#1}
1628 % \end{verbatim}
1629 %                                                                    \end{old}
1630 % Added ~\relax~, being quite sure that this does no harm 
1631 % and is quite important, as with ~\setcounter~ etc. 
1632 % I consider this a bug fix (although perhaps no user has 
1633 % ever had a problem with this).    (/New v4.00) 
1634
1635 % (v4.22: I had made much fuss about resetting subordinate 
1636 % counters here---removed, somewhat postponed.)
1637
1638 %% TODO v4.4+: 
1639 %% \newcommand*\resetlinenumber[1][\@ne]{% 
1640 %%   \ifx\c@linenumber\c@runninglinenumber 
1641 %%     \global\c@linenumber#1\relax
1642 %%     \global\advance\c@linenumber\m@ne 
1643 %%     \stepLineNumber 
1644 %%   \else 
1645 %%     \PackageError{lineno}%% Shorthand!? 
1646 %%       {You can't reset line number in pagewise mode}% 
1647 %%       {This should suffice.}% 
1648 %%   \fi 
1649 %% } 
1650
1651 %                                                                \subsection{%
1652 %                  Running line numbers
1653 %                                                                     \unskip} 
1654
1655 % Running mode is easy,  ~\LineNumber~ and ~\theLineNumber~
1656 % produce ~\thelinenumber~, which defaults to
1657 % ~\arabic{linenumber}~, using the ~\c@runninglinenumber~
1658 % counter.  This is the default mode of operation.
1659
1660 \def\makeRunningLineNumber{\makeLineNumberRunning}
1661
1662 \def\setrunninglinenumbers{%
1663    \def\theLineNumber{\thelinenumber}%
1664    \let\c@linenumber\c@runninglinenumber
1665    \let\makeLineNumber\makeRunningLineNumber
1666    }
1667
1668 \setrunninglinenumbers\resetlinenumber
1669
1670 %
1671 %                                                                \subsection{%
1672 %                  Pagewise line numbers
1673 %                                                        \unskip}\label{ss:PW} 
1674
1675 % Difficult, if you think about it.  The number has to be
1676 % printed when there is no means to know on which page it
1677 % will end up,  except through the aux-file.  My solution  
1678 % is really expensive, but quite robust.  
1679 %
1680 % With version ~v2.00~ the hashsize requirements are
1681 % reduced, because we do not need one controlsequence for
1682 % each line any more.  But this costs some computation time
1683 % to find out on which page we are.
1684 %
1685 % ~\makeLineNumber~ gets a hook to log the line and page
1686 % number to the aux-file.  Another hook tries to find out
1687 % what the page offset is, and subtracts it from the counter
1688 % ~\c@linenumber~.  Additionally, the switch
1689 % ~\ifoddNumberedPage~ is set true for odd numbered pages,
1690 % false otherwise.
1691
1692 \def\setpagewiselinenumbers{%
1693    \let\theLineNumber\thePagewiseLineNumber
1694    \let\c@linenumber\c@pagewiselinenumber
1695    \let\makeLineNumber\makePagewiseLineNumber
1696    }
1697
1698 \def\makePagewiseLineNumber{\logtheLineNumber\getLineNumber
1699   \ifoddNumberedPage
1700      \makeLineNumberOdd
1701   \else
1702      \makeLineNumberEven
1703   \fi
1704   }
1705
1706 % Each numbered line gives a line to the aux file
1707 %                                                                \begin{verse}
1708 %     ~\@LN{~<line>~}{~<page>~}~
1709 %                                                                  \end{verse}
1710 % very similar to the ~\newlabel~ business, except that we need
1711 % an arabic representation of the page number, not what
1712 % there might else be in ~\thepage~.
1713
1714 \def\logtheLineNumber{\protected@write\@auxout{}{%
1715 %% 
1716 % (New v4.00) (UL)
1717 % As Daniel Doherty observed, the earlier line 
1718 %                                                  \begin{old}\begin{verbatim}
1719 % %    \string\@LN{\the\c@linenumber}{\noexpand\the\c@page}}}
1720 % \end{verbatim}
1721 %                                                                    \end{old}
1722 % here may lead into an infinite loop when the user resets 
1723 % the page number (think of ~\pagenumbering~, e.g.). 
1724 % Stephan and I brief\/ly discussed the matter and decided 
1725 % to introduce a ``physical''-page counter to which 
1726 % ~\logtheLineNumber~ refers. It was Stephan's idea to use 
1727 % ~\cl@page~ for reliably augmenting the ``physical''-page 
1728 % counter. However, this relies on the output routine once 
1729 % doing ~\stepcounter{page}~. Before Stephan's 
1730 % suggestion, I had thought of appending the stepping to 
1731 % \LaTeX's ~\@outputpage~.---So the macro definition ends 
1732 % as follows. 
1733 %% 
1734    \string\@LN{\the\c@linenumber}{% 
1735 %%
1736 % (New v4.2) 
1737 %%     \noexpand\number\n@LN@truepage}}} 
1738 %%
1739 % The `truepage' counter must start with ~\c@~ so it works 
1740 % with ~\include~, and the ~\@addtoreset~ below is needed 
1741 % for the same purpose. 
1742 %% 
1743      \noexpand\the\c@LN@truepage}}} 
1744
1745 %% \newcount\n@LN@truepage 
1746 %% \g@addto@macro\cl@page{\global\advance\n@LN@truepage\@ne}
1747 \newcount\c@LN@truepage 
1748 \g@addto@macro\cl@page{\global\advance\c@LN@truepage\@ne}
1749 \@addtoreset{LN@truepage}{@ckpt}
1750
1751 % (/New v4.2)                I had thought of offering more 
1752 % features of a \LaTeX\ counter. However, the user should 
1753 % better \emph{not} have access to this counter. ~\c@page~ 
1754 % should suffice as a pagewise master counter.---To be sure, 
1755 % along the present lines the user \emph{can} manipulate 
1756 % ~\c@LN@truepage~ by ~\stepcounter{page}~. E.g., she might 
1757 % do this in order to manually insert a photograph. Well, 
1758 % seems not to harm. 
1759
1760 % The above usage of ~\g@addto@macro~ and ~\cl@page~ may be 
1761 % not as stable as Stephan intended. His proposal used 
1762 % ~\xdef~ directly. But he used ~\cl@page~ as well, and who 
1763 % knows \dots{} And as to ~\g@addto@macro~, I have introduced 
1764 % it for list macros anyway. 
1765 % (/UL) (/New v4.00) 
1766
1767 % From the aux-file we get one macro ~\LN@P~<page> for each
1768 % page with line numbers on it.  This macro calls four other
1769 % macros with one argument each.  These macros are
1770 % dynamically defined to do tests and actions, to find out
1771 % on which page the current line number is located.
1772 %
1773 % We need sort of a pointer to the first page with line
1774 % numbers, initiallized to point to nothing:
1775
1776 \def\LastNumberedPage{first} 
1777 \def\LN@Pfirst{\nextLN\relax}
1778
1779 % The four dynamic macros are initiallized to reproduce
1780 % themselves in an ~\xdef~
1781
1782 \let\lastLN\relax  % compare to last line on this page
1783 \let\firstLN\relax % compare to first line on this page
1784 \let\pageLN\relax  % get the page number, compute the linenumber
1785 \let\nextLN\relax  % move to the next page
1786
1787 % During the end-document run through the aux-files, we
1788 % disable ~\@LN~.  I may put in a check here later, to give
1789 % a rerun recommendation.  
1790
1791 \AtEndDocument{\let\@LN\@gobbletwo}
1792
1793 % Now, this is the tricky part.  First of all, the whole
1794 % definition of ~\@LN~ is grouped, to avoid accumulation
1795 % on the save stack. Somehow ~\csname~<cs>~\endcsname~ pushes
1796 % an entry, which stays after an ~\xdef~ to that <cs>.
1797 %
1798 % If ~\LN@P~<page> is undefined, initialize it with the
1799 % current page and line number, with the
1800 % \emph{pointer-to-the-next-page} pointing to nothing.  And
1801 % the macro for the previous page will be redefined to point
1802 % to the current one. 
1803 %
1804 % If the macro for the current page already exists, just
1805 % redefine the \emph{last-line-number} entry.
1806 %
1807 % Finally, save the current page number, to get the pointer to the
1808 % following page later.
1809
1810 \def\@LN#1#2{{\expandafter\@@LN
1811                  \csname LN@P#2C\@LN@column\expandafter\endcsname
1812                  \csname LN@PO#2\endcsname
1813                  {#1}{#2}}}
1814
1815 \def\@@LN#1#2#3#4{\ifx#1\relax
1816     \ifx#2\relax\gdef#2{#3}\fi
1817     \expandafter\@@@LN\csname LN@P\LastNumberedPage\endcsname#1% 
1818     \xdef#1{\lastLN{#3}\firstLN{#3}% 
1819             \pageLN{#4}{\@LN@column}{#2}\nextLN\relax}%
1820   \else
1821     \def\lastLN##1{\noexpand\lastLN{#3}}%
1822     \xdef#1{#1}%
1823   \fi
1824   \xdef\LastNumberedPage{#4C\@LN@column}}
1825
1826 % The previous page macro gets its pointer to the
1827 % current one, replacing the ~\relax~ with the cs-token
1828 % ~\LN@P~<page>.  
1829
1830 \def\@@@LN#1#2{{\def\nextLN##1{\noexpand\nextLN\noexpand#2}%
1831                 \xdef#1{#1}}}
1832
1833 % Now, to print a line number, we need to find the page,
1834 % where it resides.  This will most probably be the page where
1835 % the last one came from, or maybe the next page.  However, it can
1836 % be a completely different one.  We maintain a cache,
1837 % which is ~\let~ to the last page's macro.  But for now
1838 % it is initialized to expand ~\LN@first~, where the poiner
1839 % to the first numbered page has been stored in. 
1840
1841 \def\NumberedPageCache{\LN@Pfirst}
1842
1843 % To find out on which page the current ~\c@linenumber~ is, 
1844 % we define the four dynamic macros to do something usefull
1845 % and execute the current cache macro.  ~\lastLN~ is run
1846 % first, testing if the line number in question may be on a
1847 % later page.  If so, disable ~\firstLN~, and go on to the
1848 % next page via ~\nextLN~.
1849
1850 \def\testLastNumberedPage#1{\ifnum#1<\c@linenumber
1851       \let\firstLN\@gobble
1852   \fi}
1853
1854 % Else, if ~\firstLN~ finds out that we need an earlier
1855 % page,  we start over from the beginning. Else, ~\nextLN~
1856 % will be disabled, and ~\pageLN~ will run
1857 % ~\gotNumberedPage~ with four arguments: the first line
1858 % number on this column, the page number, the column 
1859 % number, and the first line on the page.
1860
1861 \def\testFirstNumberedPage#1{\ifnum#1>\c@linenumber
1862      \def\nextLN##1{\testNextNumberedPage\LN@Pfirst}%
1863   \else
1864       \let\nextLN\@gobble
1865       \def\pageLN{\gotNumberedPage{#1}}%
1866   \fi}
1867
1868 % We start with ~\pageLN~ disabled and ~\nextLN~ defined to
1869 % continue the search with the next page.
1870
1871 \long\def \@gobblethree #1#2#3{}
1872
1873 \def\testNumberedPage{%
1874   \let\lastLN\testLastNumberedPage
1875   \let\firstLN\testFirstNumberedPage
1876   \let\pageLN\@gobblethree
1877   \let\nextLN\testNextNumberedPage
1878   \NumberedPageCache
1879   }
1880
1881 % When we switch to another page, we first have to make
1882 % sure that it is there.  If we are done with the last 
1883 % page, we probably need to run \TeX\ again, but for the
1884 % rest of this run, the cache macro will just return four
1885 % zeros. This saves a lot of time, for example if you have
1886 % half of an aux-file from an aborted run,  in the next run
1887 % the whole page-list would be searched in vain again and
1888 % again for the second half of the document.
1889 %
1890 % If there is another page, we iterate the search. 
1891
1892 \def\testNextNumberedPage#1{\ifx#1\relax
1893      \global\def\NumberedPageCache{\gotNumberedPage0000}%
1894      \PackageWarningNoLine{lineno}%
1895                     {Linenumber reference failed,
1896       \MessageBreak  rerun to get it right}%
1897    \else
1898      \global\let\NumberedPageCache#1%
1899    \fi
1900    \testNumberedPage
1901    }
1902
1903 %                             \linelabel{demo2}
1904 %                             \marginpar{\tiny\raggedright
1905 %                                 Let's see if it finds the label
1906 %                                 on page \pageref{demo}, 
1907 %                                 line \ref{demo}, and back here
1908 %                                 on page \pageref{demo2}, line
1909 %                                 \ref{demo2}. 
1910 %                             \unskip}%
1911 % To separate the official hooks from the internals there is
1912 % this equivalence, to hook in later for whatever purpose:
1913
1914 \let\getLineNumber\testNumberedPage
1915
1916 % So, now we got the page where the number is on.  We
1917 % establish if we are on an odd or even page, and calculate
1918 % the final line number to be printed.
1919
1920 \newif\ifoddNumberedPage
1921 \newif\ifcolumnwiselinenumbers
1922 \columnwiselinenumbersfalse
1923
1924 \def\gotNumberedPage#1#2#3#4{\oddNumberedPagefalse
1925   \ifodd \if@twocolumn #3\else #2\fi\relax\oddNumberedPagetrue\fi
1926   \advance\c@linenumber\@ne 
1927   \ifcolumnwiselinenumbers
1928      \subtractlinenumberoffset{#1}%
1929   \else
1930      \subtractlinenumberoffset{#4}%
1931   \fi
1932   }
1933
1934 % You might want to run the pagewise mode with running line
1935 % numbers, or you might not.  It's your choice:
1936
1937 \def\runningpagewiselinenumbers{%
1938   \let\subtractlinenumberoffset\@gobble
1939   }
1940
1941 \def\realpagewiselinenumbers{%
1942   \def\subtractlinenumberoffset##1{\advance\c@linenumber-##1\relax}%
1943   }
1944
1945 \realpagewiselinenumbers
1946
1947 % For line number references, we need a protected call to
1948 % the whole procedure, with the requested line number stored
1949 % in the ~\c@linenumber~ counter.  This is what gets printed
1950 % to the aux-file to make a label:
1951
1952 \def\thePagewiseLineNumber{\protect 
1953        \getpagewiselinenumber{\the\c@linenumber}}%
1954
1955 % And here is what happens when the label is refered to:
1956
1957 \def\getpagewiselinenumber#1{{%
1958   \c@linenumber #1\relax\testNumberedPage
1959   \thelinenumber
1960   }}
1961
1962 %                                                                            %
1963 % A summary of all per line expenses:
1964 %                                                     \begin{description}\item
1965 % [CPU:]  The ~\output~ routine is called for each line,
1966 %         and the page-search is done.
1967 %                                                                        \item
1968 % [DISK:] One line of output to the aux-file for each
1969 %         numbered line
1970 %                                                                        \item
1971 % [MEM:]  One macro per page. Great improvement over v1.02,
1972 %         which had one control sequence per line in
1973 %         addition.  It blew the hash table after some five
1974 %         thousand lines. 
1975 %                                                            \end{description}
1976 %
1977 %                                                                \subsection{%
1978 %                  Twocolumn mode (New v3.06)
1979 %                                                                     \unskip}
1980 %
1981 % Twocolumn mode requires another patch to the ~\output~ 
1982 % routine, in order to print a column tag to the .aux 
1983 % file.
1984
1985 \AtBeginDocument{% v4.2, revtex4.cls (e.g.). 
1986  % <- TODO v4.4+: Or better in \LineNoLaTeXOutput!? 
1987   \let\@LN@orig@makecol\@makecol} 
1988 \def\@LN@makecol{%
1989    \@LN@orig@makecol
1990    \setbox\@outputbox \vbox{%
1991       \boxmaxdepth \@maxdepth
1992       \protected@write\@auxout{}{% 
1993           \string\@LN@col{\if@firstcolumn1\else2\fi}%
1994       }%
1995       \box\@outputbox 
1996    }% \vbox
1997 } %% TODO cf. revtexln.sty. 
1998
1999 \def\@LN@col{\def\@LN@column} % v4.22, removed #1. 
2000 \@LN@col{1}
2001
2002 %
2003 %                                                                \subsection{%
2004 %                  Numbering modulo $m$, starting at $f$ 
2005 %%                  Numbering modulo 5
2006 %                                                       \unskip}\label{ss:Mod} 
2007
2008 % Most users want to have only one in five lines numbered.
2009 % ~\LineNumber~ is supposed to produce the outfit of the
2010 % line number attached to the line,  while ~\thelinenumber~
2011 % is used also for references, which should appear even if
2012 % they are not multiples of five.   
2013
2014 % (New v4.00)                   Moreover, some users want to 
2015 % control which line number should be printed first. Support 
2016 % of this is now introduced here---see ~\firstlinenumber~ 
2017 % below.---~numline.sty~ by Michael Jaegermann and 
2018 % James Fortune offers controlling which \emph{final} 
2019 % line numbers should not be printed. What is 
2020 % it good for? We ignore this here until some user demands 
2021 % it.---Peter Wilson's ~ledmac.sty~ offers much different 
2022 % choices of line numbers to be printed, due to Wayne Sullivan. 
2023 % (/New v4.00) 
2024
2025 % (New v4.22)   ~\c@linenumbermodulo~ is rendered a 
2026 % fake counter, as discussed since v4.00. So it can 
2027 % no longer be set by ~\setcounter~. ~\modulolinenumbers~ 
2028 % serves this purpose. Well, does anybody want to do 
2029 % what worked with ~\addtocounter~? (Then please tell 
2030 % me.)---At least, ~\value~ still works. For the same 
2031 % purpose I rename the fake `firstlinenumber' counter 
2032 % ~\n@...~ to ~\c@...~.                  (/New v4.22) 
2033 %                                                  \begin{old}\begin{verbatim}
2034 % % \newcount\c@linenumbermodulo % removed for v4.22 
2035 % \end{verbatim}
2036 %                                                                    \end{old}
2037
2038 %% Removed for v4.22: 
2039 %% (UL)                                On my question why, e.g., 
2040 %% ~\chardef~ would not have sufficed, Stephan couldn't remember 
2041 %% exactly; guessed that he wanted to offer \LaTeX\ counter 
2042 %% facilities. However, the typical ones don't come this way. 
2043 %% So I'm quite sure that I will change this next time. 
2044 %% 
2045 %% However, I observed at least two times that users gave a very 
2046 %% high value to ~\c@linenumbermodulo~ in order to suppress 
2047 %% printing of the line number. One of these users preferred an 
2048 %% own way of handling line numbers, just wanted to use 
2049 %% ~\linelabel~ and ~ednotes.sty~ features. Should we support this? 
2050 %% I rather would like to advise them to 
2051 %% ~\let\makeLineNumber\relax~.      (/UL) 
2052
2053 % (New v4.00)                                                             \par 
2054 % ~\themodulolinenumber~ waits for being declared 
2055 % ~\LineNumber~ by ~\modulolinenumbers~. (This has 
2056 % been so before, no change.) Here is how it 
2057 % looked before: 
2058 %                                                  \begin{old}\begin{verbatim}
2059 % % \def\themodulolinenumber{{\@tempcnta\c@linenumber
2060 % %   \divide\@tempcnta\c@linenumbermodulo
2061 % %   \multiply\@tempcnta\c@linenumbermodulo
2062 % %   \ifnum\@tempcnta=\c@linenumber\thelinenumber\fi
2063 % %   }}
2064 % \end{verbatim}
2065 %                                                                    \end{old} 
2066 % (UL)                   This was somewhat slow. This arithmetic 
2067 % happens at every line. This time I tend to declare an extra 
2068 %% TODO v4.4+ 
2069 % line counter (as opposed to my usual recommendations to use 
2070 % counters as rarely as possible) which is stepped every line. 
2071 % It could be incremented in the same way as ~\c@LN@truepage~ 
2072 % is incremented via ~\cl@page~! This is another point in favour 
2073 % of ~{linenumber}~ being a \LaTeX\ counter! 
2074 % When this new counter equals ~\c@linenumbermodulo~, it is reset, 
2075 % and ~\thelinenumber~ is executed.---It gets much slower by my 
2076 % support of controlling the first line number below. I should 
2077 % improve this.---On
2078 %%                                                   %% TODO v4.4+--pagewise!? 
2079 % the other hand, time expense means very little nowadays, 
2080 % while the number of \TeX\ counters still is limited. 
2081
2082 % For the same purpose, moreover, attaching the line number 
2083 % box could be intercepted earlier (in ~\MakeLineNo~), 
2084 % without changing ~\LineNumber~. However, this may be 
2085 % bad for the latter's announcement as a wizard interface 
2086 % in section_\ref{s:UserCmds}.
2087 %% 
2088 %% I wonder about Stephan's group. Its only effect is that 
2089 %% ~\@tempcnta~ is restored after using it. What for is this? 
2090 %% I tend to remove the group braces.                            %% TODO v4.4+
2091 % (/UL) 
2092
2093 % Here is the new code. It is very near to my ~lnopatch.sty~ 
2094 % code which introduced the first line number feature 
2095 % before.---I add starting with a ~\relax~ which is so often 
2096 % recommended---without understanding this really. At least, 
2097 % it will not harm.---Former group braces appear as 
2098 % ~\begingroup~/~\endgroup~ here. 
2099
2100 \def\themodulolinenumber{\relax
2101   \ifnum\c@linenumber<\c@firstlinenumber \else 
2102     \begingroup 
2103       \@tempcnta\c@linenumber
2104       \advance\@tempcnta-\c@firstlinenumber 
2105       \divide\@tempcnta\c@linenumbermodulo
2106       \multiply\@tempcnta\c@linenumbermodulo
2107       \advance\@tempcnta\c@firstlinenumber 
2108       \ifnum\@tempcnta=\c@linenumber \thelinenumber \fi
2109     \endgroup 
2110   \fi 
2111 }
2112
2113 % (/New v4.00) 
2114
2115 % The user command to set the modulo counter:
2116 % (New v4.31) \dots\ a star variant is introduced to implement 
2117 % Hillel Chayim Yisraeli's idea to print the first line number 
2118 % after an interruption of the edited text by some editor's 
2119 % text, regardless of the modulo. If it is 1, it is printed only 
2120 % with ~\firstlinenumber{1}~. I.e., you use ~\modulolinenumbers*~
2121 % for the new feature, without the star you get the simpler 
2122 % behaviour that we have had so far. And you can switch back 
2123 % from the refined behaviour to the simple one by using 
2124 % ~\modulolinenumbers~ without the star.---This enhancement 
2125 % is accompanied by a new package option ~modulo*~ which just 
2126 % executes ~\modulolinenumbers*~ 
2127 % (subsection_\ref{ss:v3opts}).---`With ~\firstlinenumber{1}~' 
2128 % exactly means: `1' is printed if and only if the last 
2129 % ~\firstlinenumber~ before or in the paragraph that follows 
2130 % the ``interruption'' has argument `1' (or something 
2131 % \emph{expanding} to `1', or (to) something that \TeX\ 
2132 % ``reads'' as 1, e.g.: a \TeX\ count register storing 
2133 % 1).---At present, this behaviour may be unsatisfactory with 
2134 % pagewise line-numbering $\dots$ I'll make an experimental 
2135 % extra package if someone complains \dots
2136
2137 \newcommand\modulolinenumbers{% 
2138   \@ifstar
2139     {\def\@LN@maybe@moduloresume{% 
2140        \global\let\@LN@maybe@normalLineNumber
2141                             \@LN@normalLineNumber}% 
2142                                        \@LN@modulolinenos}% 
2143     {\let\@LN@maybe@moduloresume\relax \@LN@modulolinenos}%
2144 }
2145
2146 \global\let\@LN@maybe@normalLineNumber\relax 
2147 \let\@LN@maybe@moduloresume\relax 
2148 \gdef\@LN@normalLineNumber{% 
2149   \ifnum\c@linenumber=\c@firstlinenumber \else 
2150     \ifnum\c@linenumber>\@ne
2151       \def\LineNumber{\thelinenumber}% 
2152     \fi 
2153   \fi 
2154 %%
2155 % ~\def~ instead of ~\let~ enables taking account of a 
2156 % redefinition of ~\thelinenumber~ in a present numbering 
2157 % environment (e.g.). 
2158 %%
2159   \global\let\@LN@maybe@normalLineNumber\relax}
2160
2161 % Instead of changing ~\LineNumber~ directly by 
2162 % ~LN@moduloresume~, these tricks enable ~\modulolinenumbers*~
2163 % to act as locally as I can make it. I don't know how to 
2164 % avoid that the output routine switches back to the normal 
2165 % modulo behaviour by a global change. (An ~\aftergroup~ may 
2166 % fail in admittedly improbable cases.)
2167
2168 \newcommand*\@LN@modulolinenos[1][\z@]{%
2169 %% 
2170 % The definition of this macro is that of the former 
2171 % ~\modulolinenumbers~.                 (/New v4.31) 
2172 %%
2173   \let\LineNumber\themodulolinenumber
2174   \ifnum#1>\@ne 
2175     \chardef                      % v4.22, note below 
2176       \c@linenumbermodulo#1\relax
2177   \else\ifnum#1=\@ne 
2178 %                                                  \begin{old}\begin{verbatim}
2179 % %    \def\LineNumber{\thelinenumber}%
2180 % \end{verbatim}
2181 %                                                                    \end{old} 
2182 % (New v4.00)         I am putting something here to enable 
2183 % ~\firstlinenumber~ with $~\c@linenumbermodulo~=1$. 
2184 % With ~lnopatch.sty~, a trick was offered for this purpose. 
2185 % It is now obsolete. 
2186
2187     \def\LineNumber{\@LN@ifgreat\thelinenumber}% 
2188 %% 
2189 % (/New v4.00) 
2190 %% 
2191   \fi\fi
2192   }
2193
2194 % (New v4.00)                The default of ~\@LN@ifgreat~ is 
2195
2196 \let\@LN@ifgreat\relax
2197
2198 % The previous changes as soon as ~\firstlinenumber~ is used: 
2199
2200 \newcommand*\firstlinenumber[1]{% 
2201   \chardef\c@firstlinenumber#1\relax 
2202 %% 
2203 % No counter, little values allowed only---OK?---(UL) 
2204 % The change is local---OK? The good thing is that 
2205 % ~\global\firstlinenumber{~<number>~}~ works. Moreover, 
2206 % ~\modulolinenumbers~ acts locally as well.    (/UL)
2207 %
2208 % (New v4.31) 
2209 %% 
2210   \let\@LN@ifgreat\@LN@ifgreat@critical} 
2211
2212 \def\@LN@ifgreat@critical{%
2213   \ifnum\c@linenumber<\c@firstlinenumber 
2214     \expandafter \@gobble 
2215   \fi}% 
2216
2217 % (/New v4.31) 
2218
2219 % The default 
2220 % value of ~\c@firstlinenumber~                                %% v4.31 
2221 % is 0. This is best for what one would expect from modulo 
2222 % printing. 
2223
2224 \let\c@firstlinenumber=\z@
2225
2226
2227 % For usage and effects of ~\modulolinenumbers~ and            %% v4.31 
2228 % ~\firstlinenumbers~, please consult section_\ref{s:UserCmds}. 
2229 % Two details on ~\firstlinenumbers~ here: 
2230 % (i)_~\firstlinenumber~ acts on a paragraph if and only if 
2231 % (a)_the paragraph is broken into lines ``in line-numbering 
2232 % mode'' (after ~\linenumbers~, e.g.); 
2233 % (b)_it is the last occurrence of a ~\firstlinenumbers~ 
2234 % before or in the paragraph. 
2235 % (The practical applications of this that I can imagine 
2236 % don't seem appealing to me.) 
2237 % Cf._the explanation above of how ~\modulolinenumbers~ and 
2238 % ~\firstlinenumbers~ interact---for this and for (ii), 
2239 % which is concerned with possible arguments for 
2240 % ~\firstlinenumbers~. 
2241
2242 % Note that the line numbers of the present section 
2243 % demonstrate the two devices.         (/New v4.00) 
2244
2245 %%\setcounter{linenumbermodulo}{5}
2246 \chardef\c@linenumbermodulo=5      % v4.2; ugly? 
2247 \modulolinenumbers[1]
2248
2249 % (New v4.22)       The new implementation through ~\chardef~ 
2250 % decreases the functionality and raises certain compatibility 
2251 % problems. I face this without fear. The maximum modulo value 
2252 % is now ~255~. I expect that this suffices for usual applications. 
2253 % However, some users have ``abused'' ~lineno.sty~ to get 
2254 % ~ednotes.sty~ features without line numbers, so have set the 
2255 % modulo to a value beyond the total number of lines in their 
2256 % edition. This ought to be replaced by 
2257 % ~\let\makeLineNumber\relax~.          (/New v4.22) 
2258
2259 %                                                                   \section{% 
2260 %               Package options
2261 %                                                       \unskip}\label{s:Opts} 
2262
2263 % (New v4.1) 
2264 % The last heading formerly was the heading of what is now 
2265 % subsection_\ref{ss:v3opts}. The options declared there were 
2266 % said to execute user commands only. This was wrong already 
2267 % concerning ~displaymath~ and ~hyperref~. At least, however, 
2268 % these options were no or almost no occasion to skip definitions 
2269 % or allocations. This is different with the options that we now 
2270 % insert. 
2271
2272 %% (New v4.2)   v4.00 moved the ``options'' below the 
2273 %% ``extensions''. This was bad with ~\do@mlineno~ in 
2274 %% subsection_\ref{ss:v3opts} which is to control 
2275 %% subsection_\ref{ss:display}---undone here.  (/New v4.2) 
2276 %
2277 %                                                                \subsection{%
2278 %               Extended referencing to line numbers. (v4.2)
2279 %                                                                     \unskip}
2280 % This subsection explains and declares package option ~addpageno~.   %% v4.31
2281
2282 % If a line to whose number you refer by ~\ref~ is not on the 
2283 % present page, it may be useful to add the number of the page 
2284 % on which the line occurs---and perhaps it should not be added 
2285 % otherwise. In general, you could use the Standard \LaTeX\ 
2286 % package varioref for this. However, the latter usually 
2287 % produces verbose output like `on the preceding page'---
2288 % unless costumized---, while in critical editions, e.g., one 
2289 % may prefer just adding the page number and some mark on the 
2290 % left of the line number, irrespectively of how far the page is 
2291 % apart etc. To support this, package option ~addpageno~ 
2292 % provides a command ~\vpagelineref~ to be used in place of 
2293 % ~\ref~. This produces, e.g., `34.15' when referring to line_15 
2294 % on page_34 while the present page is not 34. You can customize 
2295 % the outcome, see the package file ~vplref.sty~ where the code 
2296 % and further details are. You may conceive of 
2297 % ~\vpagelineref~ as a certain customization of varioref's 
2298 % ~\vref~. 
2299
2300 % This implies that option ~addpageno~ requires the files 
2301 % ~vplref.sty~ and ~varioref.sty~. ~addpageno~ automatically 
2302 % loads both of them. Yet you can also load ~varioref.sty~ 
2303 % on your own to use its package options. 
2304
2305 % Of course, you might better introduce a shorter command name 
2306 % for ~\vpagelineref~ for your work, while we cannot predict 
2307 % here what shorthand will fit your work. E.g., 
2308 % ~\newcommand{\lref}{\vpagelineref}~.
2309
2310 % If you really want to add the page number in \emph{any} case, 
2311 % use, e.g., some ~\myref~ instead of ~\ref~, after 
2312 %   \[~newcommand*{\myref}{\pageref{#1}.\ref{#1}}~\] 
2313 % or what you like. You don't need the ~addpageno~ option in 
2314 % this case. 
2315
2316 % ~addpageno~ is due to a suggestion by Sergei Mariev. 
2317
2318 \DeclareOption{addpageno}{% 
2319   \AtEndOfPackage{\RequirePackage{vplref}[2005/04/25]}} 
2320
2321 %                                                                \subsection{% 
2322 %               \scs{linelabel} in math mode 
2323 %                                                   \unskip}\label{ss:MathRef}
2324
2325 % We have made some first steps towards allowing ~\linelabel~ in 
2326 % math mode. Because our code for this is presently experimental, 
2327 % we leave it to the user to decide for the experiment by calling 
2328 % option ~mathrefs~. We are in a hurry now and thus leave the 
2329 % code, explanations, and discussion in the separate package 
2330 % ~ednmath0.sty~. Maybe we later find the time to improve the 
2331 % code and move the relevant content of ~ednmath0.sty~ to here. 
2332 % The optimal situation would be to define ~\linelabel~ from 
2333 % the start so it works in math mode, omitting the ~mathrefs~ 
2334 % option. 
2335
2336 % Actually, this package even provides adjustments for analogously 
2337 % allowing ~ednotes.sty~ commands in math mode. Loading the package 
2338 % is postponed to ~\AtBeginDocument~ when we know whether these 
2339 % adjustments are needed. 
2340
2341 \DeclareOption{mathrefs}{\AtBeginDocument 
2342   {\RequirePackage{ednmath0}[2004/08/20]}} 
2343
2344
2345 %                                                                \subsection{% 
2346 %               Arrays, tabular environments (Revised v4.11)
2347 %                                                       \unskip}\label{ss:Tab} 
2348
2349 % This subsection explains and declares package options               %% v4.31
2350 % ~edtable~, ~longtable~, and ~nolongtablepatch~.
2351 %
2352 % The standard \LaTeX\ tabular environments come as single 
2353 % boxes, so the ~lineno.sty~ versions before v4.00 treated them as 
2354 % (parts of) single lines, printing (at most) one line number 
2355 % beside each and stepping the line number counter once only. 
2356 % Moreover, ~\linelabel~s got lost. Of course, tables are 
2357 % usually so high that you will want to treat each row like a 
2358 % line. (Christian Tapp even desires that the lines of table 
2359 % entries belonging to a single row are treated like ordinary 
2360 % lines.) Footnotes get lost in such environments as well, which 
2361 % was bad for ~ednotes.sty~.
2362
2363 % We provide adjustments to count lines, print their numbers 
2364 % etc.\ as desired at least for \emph{some} \LaTeX\ tabular 
2365 % environments. (Like with other details, ``some'' is to some 
2366 % extent explained in ~edtable.sty~.) We do this similarly as 
2367 % with option ~mathrefs~ before.               We leave code 
2368 % and explanations in the separate package ~edtable.sty~. 
2369 % (For wizards: this package provides adjustments for 
2370 % ~ednotes.sty~ as well. However, in the present case we don't try 
2371 % to avoid them unless ~ednotes.sty~ is loaded.) 
2372 % Package option ~edtable~ 
2373 % defines---by loading ~edtable.sty~---an environment ~{edtable}~ 
2374 % which is able to change some \LaTeX\ tabular environments 
2375 % with the desired effects. (v4.11: ~edtable.sty~ v1.3 counts 
2376 % \LaTeX's ~{array}~ [etc.\@] as a ``tabular environment'' as 
2377 % well.) 
2378
2379 % The ~{edtable}~ environment doesn't help with ~longtable.sty~, 
2380 % however. To make up for this, ~{longtable}~ is adjusted in a 
2381 % different way---and this happens only when another ~lineno.sty~ 
2382 % option ~longtable~ is called. In this case, option ~edtable~ 
2383 % needn't be called explicitly: option ~longtable~ works as if 
2384 % ~edtable~ had been called. 
2385
2386 % Now, we are convinced that vertical spacing around 
2387 % ~{longtable}~ works wrongly---see \LaTeX\ bugs database 
2388 % tools/3180 and 3485, or see explanations in the package 
2389 % ~ltabptch.sty~ (which is to be obtained from CTAN folder
2390 % \path{macros/latex/ltabptch}). Our conviction is so strong
2391 % that the ~longtable~ option loads---after ~longtable.sty~---the
2392 % patch package ~ltabptch.sty~. If the user doesn't want this
2393 % (maybe preferring her own arrangement with the vertical 
2394 % spacing), she can forbid it by calling ~nolongtablepatch~. 
2395
2396 % The following code just collects some choices, which are 
2397 % then executed in section_\ref{ss:ExOpt}. We use an ~\if...~ 
2398 % without ~\newif~ since ~\if...true~ and ~\if...false~ 
2399 % would occur at most two times and only within the present 
2400 % package. (~\AtEndOfClass{\RequirePackage{edtable}}~ 
2401 % could be used instead, I just overlooked this. Now I don't 
2402 % change it because it allows to change the version requirement 
2403 % at one place only.)
2404
2405 \let\if@LN@edtable\iffalse 
2406
2407 \DeclareOption{edtable}{\let\if@LN@edtable\iftrue}
2408
2409 \DeclareOption{longtable}{\let\if@LN@edtable\iftrue 
2410   \PassOptionsToPackage{longtable}{edtable}}
2411
2412 \DeclareOption{nolongtablepatch}{% 
2413   \PassOptionsToPackage{nolongtablepatch}{edtable}}
2414
2415 % (/New v4.1) 
2416
2417 %                                                                \subsection{% 
2418 %               Switch among settings 
2419 %                                                    \unskip}\label{ss:v3opts}
2420
2421 % There is a bunch of package options that execute                     %% v4.2 
2422 %% There is a bunch of package options, all of them executing 
2423 %% executing only user commands (see below). %% Cf. start of section. 
2424 % user commands only. 
2425 %
2426 % Options ~left~ (~right~) put the line numbers on the left
2427 % (right) margin.  This works in all modes.  ~left~ is the
2428 % default.
2429
2430 \DeclareOption{left}{\leftlinenumbers*}
2431
2432 \DeclareOption{right}{\rightlinenumbers*}
2433
2434 % Option ~switch~ (~switch*~) puts the line numbers on the
2435 % outer (inner) margin of the text.   This requires running
2436 % the pagewise mode,  but we turn off the page offset
2437 % subtraction, getting sort of running numbers again.  The
2438 % ~pagewise~ option may restore true pagewise mode later.
2439
2440 \DeclareOption{switch}{\setpagewiselinenumbers
2441                        \switchlinenumbers
2442                        \runningpagewiselinenumbers}
2443
2444 \DeclareOption{switch*}{\setpagewiselinenumbers
2445                         \switchlinenumbers*%
2446                         \runningpagewiselinenumbers}
2447
2448 % In twocolumn mode, we can switch the line numbers to 
2449 % the outer margin, and/or start with number 1 in each
2450 % column.  Margin switching is covered by the ~switch~ 
2451 % options.
2452
2453 \DeclareOption{columnwise}{\setpagewiselinenumbers
2454                            \columnwiselinenumberstrue
2455                            \realpagewiselinenumbers}
2456
2457 % The options ~pagewise~ and ~running~ select the major
2458 % linenumber mechanism.  ~running~ line numbers refer to a real
2459 % counter value, which can be reset for any paragraph,
2460 % even getting  multiple paragraphs on one page starting
2461 % with line number one.  ~pagewise~ line numbers get a
2462 % unique hidden number within the document,  but with the
2463 % opportunity to establish the page on which they finally
2464 % come to rest.  This allows the subtraction of the page
2465 % offset, getting the numbers starting with 1 on top of each
2466 % page, and margin switching in twoside formats becomes
2467 % possible.  The default mode is ~running~.  
2468 %
2469 % The order of declaration of the options is important here
2470 % ~pagewise~ must come after ~switch~, to overide running
2471 % pagewise mode. ~running~ comes last, to reset the running
2472 % line number mode, e.g, after selecting margin switch mode
2473 % for ~pagewise~ running.  Once more, if you specify all
2474 % three of the options ~[switch,pagewise,running]~, the
2475 % result is almost nothing, but if you later say
2476 % ~\pagewiselinenumbers~,  you get margin switching, with
2477 % real pagewise line numbers.
2478 %
2479 \DeclareOption{pagewise}{\setpagewiselinenumbers
2480                          \realpagewiselinenumbers}
2481
2482 \DeclareOption{running}{\setrunninglinenumbers}
2483
2484 % The option ~modulo~ causes only those linenumbers to be
2485 % printed which are multiples of five. 
2486
2487 \DeclareOption{modulo}{\modulolinenumbers\relax}
2488
2489 % Option ~modulo*~ modifies ~modulo~ in working like 
2490 % ~\modulolinenumbers*~---see section_\ref{s:UserCmds}. 
2491
2492 \DeclareOption{modulo*}{\modulolinenumbers*\relax}
2493
2494 % The package option ~mathlines~ switches the behavior of
2495 % the ~{linenomath}~ environment with its star-form.
2496 % Without this option, the ~{linenomath}~ environment does
2497 % not number the lines of the display, while the star-form
2498 % does.  With this option, its just the opposite.
2499 %
2500 %%% 1999-06-10: renamed ~displaymath~ to ~mathlines~.
2501
2502 \DeclareOption{mathlines}{\linenumberdisplaymath}
2503
2504 % ~displaymath~ now calls for wrappers of the standard 
2505 % \LaTeX\ display math environment.  This was previously 
2506 % done by ~mlineno.sty~.
2507
2508 % (New v4.3) Option `displaymath' becomes default according 
2509 % to Erik \mbox{Luijten}'s suggestion. I was finally convinced 
2510 % of this as soon as I discovered how to avoid a spurious line 
2511 % number above ~\begin{linenomath}~ (subsection_\ref{ss:DM}). 
2512 % ~\endlinenomath~ provides ~\ignorespaces~, so what could go 
2513 % wrong now? 
2514
2515 \DeclareOption{displaymath}{\PackageWarningNoLine{lineno}{%
2516                 Option [displaymath] is obsolete -- default now!}} 
2517 %% 
2518 %%\let\do@mlineno\relax
2519 %%\DeclareOption{displaymath}{\let\do@mlineno\@empty}
2520 % (/New v4.3) 
2521
2522 %                                                                \subsection{%
2523 %               Compatibility with \texttt{hyperref}      %% own subsec. v4.3. 
2524 %                                                                     \unskip}
2525 % The ~hyperref~ package, via ~nameref~, requires three more 
2526 % groups in the second argment of a ~\newlabel~.  Well, why 
2527 % shouldn't it get them?  (New v3.07) The presence of the
2528 % ~nameref~ package is now detected automatically
2529 % ~\AtBeginDocument~. (/New v3.07) (Fixed in v3.09)  We try
2530 % to be smart, and test ~\AtBeginDocument~ if the ~nameref~
2531 % package is loaded, but ~hyperref~ postpones the loading of
2532 % ~nameref~ too, so this is all in vain.
2533
2534 % (New v4.3)  But we can also test at the first ~\linelabel~. 
2535 % Regarding the error-message for misplaced ~\linelabel~ from v4.11: 
2536 % previously, ~\linenumbers~ rendered ~\linelabel~ the genuine 
2537 % version of ~\linelabel~ from the start on. This doesn't work 
2538 % now, since ~\@LN@linelabel~ may change its meaning after the 
2539 % first ~\linenumbers~ and before a next one (if there is some). 
2540 %     (/New v4.3) 
2541
2542 \DeclareOption{hyperref}{\PackageWarningNoLine{lineno}{%
2543                 Option [hyperref] is obsolete. 
2544   \MessageBreak The hyperref package is detected automatically.}}
2545
2546 \AtBeginDocument{% 
2547   \@ifpackageloaded{nameref}{%
2548 %% 
2549 % (New v4.3)  ``Global'' is merely ``symbolic'' ~\AtBeginDoc...~. 
2550 % If ~nameref~ is not detected here, the next ~\@LN@linelabel~ 
2551 % will do almost the same, then globally indeed. 
2552 %%
2553     \gdef\@LN@ExtraLabelItems{{}{}{}}% 
2554   }{%
2555     \global\let\@LN@@linelabel\@LN@linelabel 
2556     \gdef\@LN@linelabel{% 
2557 %% 
2558 % ~\@ifpackageloaded~ is ``preamble only'', its---very 
2559 % internal---preamble definition is replicated here: 
2560 %%
2561      \expandafter 
2562       \ifx\csname ver@nameref.sty\endcsname\relax \else 
2563         \gdef\@LN@ExtraLabelItems{{}{}{}}% 
2564       \fi 
2565 %% 
2566 % Now aim at the ``usual'' behaviour: 
2567 %% 
2568       \global\let\@LN@linelabel\@LN@@linelabel 
2569       \global\let\@LN@@linelabel\relax 
2570       \@LN@linelabel
2571     }% 
2572   }%
2573
2574
2575 % (/New v4.3) 
2576
2577 % (New v4.1) 
2578 %                                                                \subsection{% 
2579 %               A note on calling so many options 
2580 %                                                                     \unskip} 
2581
2582 % The number of package options may stimulate worrying about how to 
2583 % \emph{enter} all the options that one would like to use---they may 
2584 % not fit into one line. Fortunately, you can safely break code lines 
2585 % after the commas separating the option names in the ~\usepackage~
2586 % command (no comment marks needed). 
2587
2588 %                                                                \subsection{% 
2589 %               Execute options
2590 %                                                     \unskip}\label{ss:ExOpt}
2591
2592 % We stop declaring options and execute the ones that are 
2593 % called by the user.       (/New v4.1)
2594
2595 \ProcessOptions
2596
2597 % (New v4.1)        Now we know whether ~edtable.sty~ is wanted 
2598 % and (if it is) with which options it is to be called. 
2599
2600 \if@LN@edtable \RequirePackage{edtable}[2005/03/07] \fi 
2601
2602 % (/New v4.1) 
2603
2604 %                                                                   \section{%
2605 %               Former package extensions 
2606 %                                                         \label{s:Xt}\unskip}
2607 %
2608 % The extensions in this section were previously supplied 
2609 % in separate ~.sty~ files. 
2610 %
2611 %                                                                \subsection{%
2612 %              $display math$
2613 %                                                   \unskip}\label{ss:display}
2614 %% (New v4.32) 
2615 % (New v4.3)    From now on, you no longer need to type 
2616 % the ~{linenomath}~ environment with the ~\[~, ~{equation}~, 
2617 % and ~{eqnarray}~ environments---and you no longer need to 
2618 % use the former package option ~displaymath~ for this feature. 
2619 %                                                   (/New v4.3) 
2620 %% (/New v4.32) 
2621
2622 %  The standard \LaTeX\ display math environments are
2623 %  wrapped in a ~{linenomath}~ environment.
2624 %
2625 % (New 3.05)  The ~[fleqn]~ option of the standard
2626 % \LaTeX\ classes defines the display math
2627 % environments such that line numbers appear just
2628 % fine.  Thus, we need not do any tricks when
2629 % ~[fleqn]~ is loaded, as indicated by presents of
2630 % the ~\mathindent~ register.           (/New 3.05)
2631 %
2632 % (New 3.05a)  for ~{eqnarray}~s we rather keep the
2633 % old trick.                            (/New 3.05a)
2634 %
2635 % (New 3.08) Wrap ~\[~ and ~\]~ into ~{linenomath}~, 
2636 % instead of ~{displaymath}~.  Also save the definition
2637 % of ~\equation~, instead of replicating the current 
2638 % \LaTeX\ definition.                    (/New 3.08)
2639
2640 %%\ifx\do@mlineno\@empty
2641  \@ifundefined{mathindent}{
2642
2643 %% \AtBeginDocument{% 
2644   \let\LN@displaymath\[%
2645   \let\LN@enddisplaymath\]%
2646   \renewcommand\[{\begin{linenomath}\LN@displaymath}%
2647   \renewcommand\]{\LN@enddisplaymath\end{linenomath}}%
2648
2649   \let\LN@equation\equation
2650   \let\LN@endequation\endequation
2651   \renewenvironment{equation}%
2652      {\linenomath\LN@equation}%
2653      {\LN@endequation\endlinenomath}%
2654 %% }
2655
2656  }{}% \@ifundefined{mathindent} -- 3rd arg v4.2, was \par! 
2657
2658 %%\AtBeginDocument{%
2659   \let\LN@eqnarray\eqnarray
2660   \let\LN@endeqnarray\endeqnarray
2661   \renewenvironment{eqnarray}%
2662      {\linenomath\LN@eqnarray}%
2663      {\LN@endeqnarray\endlinenomath}%
2664 %%}
2665   
2666 %%\fi
2667
2668 % (UL)        Indeed. The \LaTeX\ macros are saved for 
2669 % unnumbered mode, which is detected by ~\linenomath~. 
2670 % (/UL) 
2671 %
2672 %                                                                \subsection{%
2673 %      Line numbers in internal vertical mode
2674 %                                                       \unskip}\label{ss:ILN}
2675 %
2676 % The command ~\internallinenumbers~ adds line numbers in 
2677 % internal vertical mode, but with limitations: we assume
2678 % fixed baseline skip.
2679 %
2680 % (v4.22)       v3.10 provided a global (~\global\advance~) 
2681 % as well as a local version (star-form, using 
2682 % ~\c@internallinenumber~). ~\resetlinenumbers~ acted 
2683 % locally and was here used with the global version---save 
2684 % stack danger, \TeX book p._301---in v4.00 I 
2685 % disabled the global version therefore. Now I find that 
2686 % it is better to keep a global version, and the now global 
2687 % ~\resetlinenumbers~ is perfect for this. The global version 
2688 % allows continuing the ``internal'' numbers in the ensuing 
2689 % ``external'' text, and---unless reset by brackets 
2690 % argument---continuing the above series of line numbers. 
2691 % As with v3.10, the local version always starts with 
2692 % line number one. A new ~\@LN@iglobal~ steps ~\global~ly 
2693 % in the global version, otherwise it is ~\relax~. 
2694 % (I also remove all my stupid discussions as of v4.00. 
2695 % And I use ~\newcommand~.)     (v4.22)
2696
2697 \let\@LN@iglobal\global                           % v4.22 
2698
2699 \newcommand\internallinenumbers{\setrunninglinenumbers 
2700      \let\@@par\internallinenumberpar
2701      \ifx\@par\@@@par\let\@par\internallinenumberpar\fi
2702      \ifx\par\@@@par\let\par\internallinenumberpar\fi
2703      \ifx\@par\linenumberpar\let\@par\internallinenumberpar\fi
2704      \ifx\par\linenumberpar\let\par\internallinenumberpar\fi
2705      \@ifnextchar[{\resetlinenumber}%]
2706                  {\@ifstar{\let\c@linenumber\c@internallinenumber
2707                            \let\@LN@iglobal\relax % v4.22
2708                            \c@linenumber\@ne}{}}%
2709      }
2710
2711 \let\endinternallinenumbers\endlinenumbers
2712 \@namedef{internallinenumbers*}{\internallinenumbers*}
2713 \expandafter\let\csname endinternallinenumbers*\endcsname\endlinenumbers
2714
2715 \newcount\c@internallinenumber
2716 \newcount\c@internallinenumbers
2717
2718 \newcommand\internallinenumberpar{% 
2719      \ifvmode\@@@par\else\ifinner\@@@par\else\@@@par
2720      \begingroup
2721         \c@internallinenumbers\prevgraf
2722         \setbox\@tempboxa\hbox{\vbox{\makeinternalLinenumbers}}%
2723         \dp\@tempboxa\prevdepth
2724         \ht\@tempboxa\z@
2725         \nobreak\vskip-\prevdepth
2726         \nointerlineskip\box\@tempboxa
2727      \endgroup 
2728      \fi\fi
2729      }
2730
2731 \newcommand\makeinternalLinenumbers{% 
2732    \ifnum\c@internallinenumbers>\z@               % v4.2
2733    \hb@xt@\z@{\makeLineNumber}% 
2734    \@LN@iglobal                                   % v4.22 
2735      \advance\c@linenumber\@ne
2736    \advance\c@internallinenumbers\m@ne
2737    \expandafter\makeinternalLinenumbers\fi
2738    }
2739  % TODO v4.4+: star: line numbers right!? cf. lnocapt.sty
2740
2741
2742 %                                                                \subsection{%
2743 %      Line number references with offset
2744 %                                                                     \unskip}
2745 %
2746 % This extension defines macros to refer to line
2747 % numbers with an offset, e.g., to refer to a line
2748 % which cannot be labeled directly (display math).
2749 % This was formerly knows as ~rlineno.sty~.
2750 %
2751 % To refer to a pagewise line number with offset:
2752 %                                                                \begin{quote}
2753 %   ~\linerefp[~<OFFSET>~]{~<LABEL>~}~
2754 %                                                                  \end{quote}
2755 % To refer to a running line number with offset:
2756 %                                                                \begin{quote}
2757 %   ~\linerefr[~<OFFSET>~]{~<LABEL>~}~
2758 %                                                                  \end{quote}
2759 % To refer to a line number labeled in the same mode as currently
2760 % selected:
2761 %                                                                \begin{quote}
2762 %   ~\lineref[~<OFFSET>~]{~<LABEL>~}~
2763 %                                                                  \end{quote}
2764
2765 \newcommand\lineref{%
2766   \ifx\c@linenumber\c@runninglinenumber
2767      \expandafter\linerefr
2768   \else
2769      \expandafter\linerefp
2770   \fi
2771 }
2772
2773 \newcommand*\linerefp[2][\z@]{{%
2774    \let\@thelinenumber\thelinenumber
2775    \edef\thelinenumber{\advance\c@linenumber#1\relax
2776                        \noexpand\@thelinenumber}%
2777    \ref{#2}%
2778 }}
2779
2780 % This goes deep into \LaTeX's internals.
2781
2782 \newcommand*\linerefr[2][\z@]{{%
2783    \def\@@linerefadd{\advance\c@linenumber#1}%
2784    \expandafter\@setref\csname r@#2\endcsname
2785    \@linerefadd{#2}%
2786 }}
2787
2788 \newcommand*\@linerefadd[2]{\c@linenumber=#1\@@linerefadd\relax
2789                             \thelinenumber}
2790
2791 %%                           TODO v4.4+: Insert `LN' in internal command names? 
2792
2793 %                                                                 \subsection{%
2794 %      Numbered quotation environments
2795 %                                                                     \unskip}
2796 %
2797 % The ~{numquote}~ and ~{numquotation}~
2798 % environments are like ~{quote}~ and
2799 % ~{quotation}~, except there will be line
2800 % numbers.  
2801
2802 % An optional argument gives the number to count
2803 % from.  A star ~*~ (inside or outside the closing
2804 % ~}~) prevent the reset of the line numbers.
2805 % Default is to count from one.
2806
2807 % (v4.22: A local version using ~\c@internallinenumber~ 
2808 % might be useful, see subsection_\ref{ss:ILN}.)                 %% TODO v4.4+
2809
2810 \newcommand\quotelinenumbers
2811    {\@ifstar\linenumbers{\@ifnextchar[\linenumbers{\linenumbers*}}}
2812
2813 \newdimen\quotelinenumbersep
2814 \quotelinenumbersep=\linenumbersep
2815 \let\quotelinenumberfont\linenumberfont
2816
2817 \newcommand\numquotelist
2818    {\leftlinenumbers
2819     \linenumbersep\quotelinenumbersep
2820     \let\linenumberfont\quotelinenumberfont
2821     \addtolength{\linenumbersep}{-\@totalleftmargin}%
2822     \quotelinenumbers
2823    }
2824
2825 \newenvironment{numquote}     {\quote\numquotelist}{\endquote}
2826 \newenvironment{numquotation} {\quotation\numquotelist}{\endquotation}
2827 \newenvironment{numquote*}    {\quote\numquotelist*}{\endquote}
2828 \newenvironment{numquotation*}{\quotation\numquotelist*}{\endquotation}
2829
2830
2831 %                                                                \subsection{%
2832 %      Frame around a paragraph
2833 %                                                                     \unskip}
2834 %
2835 % The ~{bframe}~ environment draws a frame around
2836 % some text, across page breaks, if necessary.
2837 %
2838 % This works only for plain text paragraphs,
2839 % without special height lines. All lines must be
2840 % ~\baselineskip~ apart, no display math.
2841
2842 \newenvironment{bframe}
2843   {\par
2844    \@tempdima\textwidth
2845    \advance\@tempdima 2\bframesep
2846    \setbox\bframebox\hb@xt@\textwidth{%
2847       \hskip-\bframesep
2848       \vrule\@width\bframerule\@height\baselineskip\@depth\bframesep
2849       \advance\@tempdima-2\bframerule
2850       \hskip\@tempdima
2851       \vrule\@width\bframerule\@height\baselineskip\@depth\bframesep
2852       \hskip-\bframesep
2853    }%
2854    \hbox{\hskip-\bframesep
2855          \vrule\@width\@tempdima\@height\bframerule\@depth\z@}%
2856    \nointerlineskip
2857    \copy\bframebox
2858    \nobreak
2859    \kern-\baselineskip
2860    \runninglinenumbers
2861    \def\makeLineNumber{\copy\bframebox\hss}%
2862   }
2863   {\par
2864    \kern-\prevdepth
2865    \kern\bframesep
2866    \nointerlineskip
2867    \@tempdima\textwidth
2868    \advance\@tempdima 2\bframesep
2869    \hbox{\hskip-\bframesep
2870          \vrule\@width\@tempdima\@height\bframerule\@depth\z@}%
2871   }
2872
2873 \newdimen\bframerule
2874 \bframerule=\fboxrule
2875
2876 \newdimen\bframesep
2877 \bframesep=\fboxsep
2878
2879 \newbox\bframebox
2880  
2881
2882
2883 %                                                                   \section{%
2884 %               Move \scs{vadjust} items (New v4.00)
2885 %                                                      \unskip}\label{s:MVadj} 
2886
2887 % This section completes reviving ~\pagebreak~, ~\nopagebreak~, 
2888 % ~\vspace~, and the star and optional form of ~\\~. This was 
2889 % started in section_\ref{ss:output} and resumed in 
2890 % section_\ref{ss:MLN} and subsection_\ref{ss:calls}.
2891 % The problem was explained in section_\ref{ss:output}: 
2892 % ~\vadjust~ items come out at a bad position, and the 
2893 % \LaTeX\ commands named before work with ~\vadjust~ indeed. 
2894 % Our solution was sketched there as well. 
2895
2896 % According to the caveat in subsection_\ref{ss:OnOff} concerning
2897 % ~\ifLineNumbers~, the \LaTeX\ commands enumerated may go 
2898 % wrong if you switch line numbering inside or at the end of 
2899 % a paragraph. 
2900 %%                                                               %% TODO v4.4+
2901
2902 %                                                                \subsection{%
2903 %               Redefining \scs{vadjust}
2904 %                                                     \unskip}\label{ss:PVadj}
2905
2906 % ~\vadjust~ will temporarily be changed into the following 
2907 % command. 
2908
2909 \def\PostponeVadjust#1{% 
2910   \global\let\vadjust\@LN@@vadjust 
2911 %% 
2912 % This undoes a ~\global\let\vadjust\PostponeVadjust~ which will 
2913 % start each of the refined \LaTeX\ commands. The ~\global~s 
2914 % are most probably superfluous. They might be useful should one 
2915 % ~\vadjust~ appear in a group starting after the change of 
2916 % ~\vadjust~ into ~\PostponeVadjust~. 
2917 % (UL) Even the undoing may be superfluous, cf._discussion 
2918 % in section_\ref{ss:ReDef} below.  (UL) 
2919 %% 
2920   \vadjust{\penalty-\@Mppvacodepen}% 
2921   \g@addto@macro\@LN@vadjustlist{#1\@lt}% 
2922 }
2923 \let\@LN@@vadjust\vadjust 
2924 \global\let\@LN@vadjustlist\@empty 
2925 \global\let\@LN@do@vadjusts\relax 
2926
2927 % These ~\global~s are just to remind that 
2928 % all the changes of the strings after ~\let~ should be 
2929 % ~\global~ (\TeX book p._301). ~\@LN@vadjustlist~ collects 
2930 % the ~\vadjust~ items of a paragraph. ~\PassVadjustList~ 
2931 % tears one ~\vadjust~ item for the current line out of 
2932 % ~\@LN@vadjustlist~ and puts it into ~\@LN@do@vadjusts~. 
2933 % The latter is encountered each line in ~\MakeLineNo~ 
2934 % (section_\ref{ss:MLN}), while those \LaTeX\ ~\vadjust~ 
2935 % commands will come rather rarely. So I decided that 
2936 % ~\@LN@do@vadjust~ is ~\relax~ until a ~\vadjust~ item 
2937 % is waiting. In the latter case, ~\@LN@do@vadjusts~ 
2938 % is turned into a list macro which resets itself to 
2939 % ~\relax~ when the other contents have been placed in 
2940 % the vertical list.---~\PassVadjustList~ is invoked by 
2941 % the output routine (section_\ref{ss:output}), so the 
2942 % ~\box255~ must be put back. 
2943
2944 \def\PassVadjustList{% 
2945   \unvbox\@cclv 
2946   \expandafter \@LN@xnext \@LN@vadjustlist \@@ 
2947                           \@tempa \@LN@vadjustlist 
2948   \ifx\@LN@do@vadjusts\relax 
2949     \gdef\@LN@do@vadjusts{\global\let\@LN@do@vadjusts\relax}% 
2950   \fi 
2951   \expandafter \g@addto@macro \expandafter \@LN@do@vadjusts 
2952     \expandafter {\@tempa}% 
2953
2954
2955
2956 %                                                                \subsection{%
2957 %               Redefining the \LaTeX\ commands 
2958 %                                                     \unskip}\label{ss:ReDef}
2959
2960 % Now we change ~\pagebreak~ etc.\ 
2961 % so that they use ~\PostponeVadjust~ in place of ~\vadjust~. 
2962 % We try to do this as independently as possible of the 
2963 % implementation of the \LaTeX\ commands to be redefined. 
2964 % Therefore, we don't just copy macro definition code from any 
2965 % single implementation (say, latest \LaTeX) and insert our 
2966 % changes, but attach a conditional 
2967 % ~\global\let\vadjust\PostponeVadjust~ 
2968 % to their left ends in a way which should work rather 
2969 % independantly of their actual code. 
2970 % However, ~\vadjust~ should be the primitive again after 
2971 % execution of the command. So the ~\global\let...~ may be used 
2972 % only if it's guaranteed that a ~\vadjust~ is near.---(UL) 
2973 % Sure? In line numbering mode, probably each ~\vadjust~ 
2974 % coming from a \LaTeX\ command should be ~\PostponeVadjust~. 
2975 % ~\marginpar~s and floats seem to be the only cases which 
2976 % are not explicitly dealt with in the present section. 
2977 % This would be a way to avoid ~\@LN@nobreaktrue~! 
2978 % Of course, the ~\vadjust~s that the present package uses 
2979 % then must be replaced by ~\@LN@@vadjust~.---Maybe 
2980 % next time.      (/UL) 
2981 %%                                                               %% TODO v4.4+ 
2982
2983 % The next command and something else will be added to the 
2984 % \LaTeX\ commands we are concerned with here. 
2985
2986 \DeclareRobustCommand\@LN@changevadjust{% 
2987   \ifvmode\else\ifinner\else 
2988     \global\let\vadjust\PostponeVadjust 
2989   \fi\fi 
2990
2991  
2992 % (UL) What about math mode? Math display? Warn? (/UL) 
2993 %%                                                               %% TODO v4.4+
2994
2995 % ~\@tempa~ will now become a two place macro which adds first 
2996 % argument (single token), enclosed by ~\ifLineNumbers~\,\dots
2997 % ~\fi~ to the left of second argument. As long as we need it, 
2998 % we can't use the star form of ~\DeclareRobustCommand~ or 
2999 % the like, because AMS-\LaTeX\ uses ~\@tempa~ for ~\@ifstar~. 
3000 % (New v4.41) And for the same reason, that ~\CheckCommand*~ 
3001 % had to be raised! (/New v4.41)
3002
3003 \CheckCommand*\@parboxrestore{\@arrayparboxrestore\let\\\@normalcr}
3004
3005 \def\@tempa#1#2{% 
3006   \expandafter \def \expandafter#2\expandafter{\expandafter
3007     \ifLineNumbers\expandafter#1\expandafter\fi#2}% 
3008
3009
3010 % (UL)              This ~\ifLineNumber~ can be fooled by 
3011 % ~\linenumbers~ ahead etc. It might be better to place 
3012 % a signal penalty in any case and let the output routine 
3013 % decide what to do. 
3014 %% 
3015 %% And when this has been done, remove warnings about this. 
3016 % (/UL) 
3017
3018 % We use the occasion to switch off linenumbers where they 
3019 % don't work anyway and where we don't want them, 
3020 % especially in footnotes: 
3021
3022 \@tempa\nolinenumbers\@arrayparboxrestore 
3023
3024 % We hope this suffices $\dots$ let's check one thing 
3025 % at least: [(New v4.41) see ~\CheckCommand~ above (/New v4.41)]
3026
3027 % Now for the main theme of the section. 
3028 % The next lines assume that ~\vspace~, ~\pagebreak~, and 
3029 % ~\nopagebreak~ use ~\vadjust~ whenever they occur outside 
3030 % vertical mode; moreover, that they don't directly read 
3031 % an argument. Indeed ~\pagebreak~ and ~\nopagebreak~ first 
3032 % call something which tests for a left bracket ahead, 
3033 % while ~\vspace~ first tests for a star. 
3034
3035 \@tempa\@LN@changevadjust\vspace 
3036 \@tempa\@LN@changevadjust\pagebreak 
3037 \@tempa\@LN@changevadjust\nopagebreak 
3038
3039 % ~\\~, however, uses ~\vadjust~ only in star or optional form. 
3040 % We relax independency of implementation in assuming 
3041 % that ~\@normalcr~ is the fragile version of ~\\~ 
3042 % (and we use ~\@ifstar~!). 
3043 %%
3044 %% \@ifstar reimplemented 1995/10/16, but seems to be much older. 
3045 %% TODO v4.4+: 
3046 %% \def\@LN@cr{% 
3047 %%   \@ifnextchar*{\@LN@changevadjust\@normalcr}% 
3048 %%      {\@ifnextchar[{\@LN@changevadjust\@normalcr}\@normalcr}% 
3049 %% } 
3050 %% ---same number of tokens, expansion step less. 
3051 %%
3052 % (Using a copy of ~\\~ would be safer, but an ugly repetition 
3053 % of ~\protect~.) 
3054 %%                                                               %% TODO v4.4+ 
3055
3056 \DeclareRobustCommand\\{% 
3057   \ifLineNumbers 
3058     \expandafter \@LN@cr 
3059   \else 
3060     \expandafter \@normalcr 
3061   \fi 
3062
3063 \def\@LN@cr{% 
3064   \@ifstar{\@LN@changevadjust\@normalcr*}% 
3065           {\@ifnextchar[{\@LN@changevadjust\@normalcr}\@normalcr}% 
3066
3067
3068 % Moreover we hope that ~\newline~ never leads to a ~\vadjust~, 
3069 % although names of some commands invoked by ~\\~ contain 
3070 % ~newline~. At last, this seems to have been OK since 1989 or 
3071 % even earlier. 
3072
3073 %                                                        \modulolinenumbers[1]
3074 %                                                          \firstlinenumber{0} 
3075 % Let's have a few tests.\vspace*{.5\baselineskip} 
3076 % Testing ~\pagebreak~ and ~\nopagebreak~ would be too expensive 
3077 % here, but---oops!---we have just experienced a successful 
3078 % ~\vspace*{.5\baselineskip}~. A 
3079 % ~\\*[.5\baselineskip]~\\*[.5\baselineskip] may look even more 
3080 % drastical, but this time we are happy about it. Note that the 
3081 % line numbers have moved with the lines. Without our changes, 
3082 % one line number\vadjust{\kern.5\baselineskip} would have 
3083 % ``anticipated'' the move of the next line, just as you can 
3084 % observe it now. 
3085 % (/New v4.00) 
3086
3087 %                                                           \switchlinenumbers 
3088
3089 %                                                                \subsection{% 
3090 %               Reminder on obsoleteness 
3091 %                                                                     \unskip} 
3092
3093 % (New v4.1)    We have completed inclusion of the earlier 
3094 % extension packages ~linenox0.sty~, ~linenox1.sty~, and 
3095 % ~lnopatch.sty~. If one of them is loaded, though, 
3096 % we produce an error message before something weird happens. 
3097 % We avoid ~\newif~ because the switchings occur so rarely. 
3098
3099 \AtBeginDocument{% 
3100   \let\if@LN@obsolete\iffalse 
3101   \@ifpackageloaded{linenox0}{\let\if@LN@obsolete\iftrue}\relax 
3102   \@ifpackageloaded{linenox1}{\let\if@LN@obsolete\iftrue}\relax 
3103   \@ifpackageloaded{lnopatch}{\let\if@LN@obsolete\iftrue}\relax
3104   \if@LN@obsolete 
3105     \PackageError{lineno}{Obsolete extension package(s)}{% 
3106     With lineno.sty version 4.00 or later,\MessageBreak 
3107     linenox0/linenox1/lnopatch.sty must no longer be loaded.}% 
3108   \fi 
3109
3110
3111
3112 %                                                        \modulolinenumbers[1]
3113 %                                                                   \section{%
3114 %               The final touch
3115 %                                                                     \unskip}
3116 %
3117 % There is one deadcycle for each line number.
3118
3119 \advance\maxdeadcycles 100
3120
3121 \endinput
3122
3123
3124 %                                                                   \section{%
3125 %               The user commands
3126 %                                                   \unskip}\label{s:UserCmds} 
3127
3128 % The user commands to turn on and off line numbering 
3129 % are 
3130 %                                                     \begin{description}\item
3131 % [|\linenumbers]                                                       \ \par
3132 %     Turn on line numbering in the current mode.
3133 %
3134 %                                                                        \item 
3135 % [|\linenumbers*]                                              \ \par$\qquad$
3136 %        and reset the line number to 1.
3137 %                                                      \def\NL{<number>]}\item 
3138 %%                         %% Boldface italic occurs here, which is evil. (UL) 
3139 % [|\linenumbers[\NL]                                           \ \par$\qquad$
3140 %        and start with <number>.  
3141 %                                                                        \item
3142 % [|\nolinenumbers]                                                     \ \par
3143 %     Turn off line numbering.
3144 %                                                                        \item
3145 % [|\runninglinenumbers*[\NL]                                           \ \par
3146 %     Turn on ~running~ line numbers, with the same optional
3147 %     arguments as ~\linenumbers~.  The numbers are running
3148 %     through the text over pagebreaks.  When you turn
3149 %     numbering off and on again, the numbers will continue,
3150 %     except, of cause, if you ask to reset or preset the
3151 %     counter.
3152 %                                                                        \item
3153 % [|\pagewiselinenumbers]                                               \ \par
3154 %     Turn on ~pagewise~ line numbers.  The lines on each
3155 %     page are numbered beginning with one at the first
3156 %     ~pagewise~ numbered line.
3157 %                                                                        \item
3158 % [|\resetlinenumber[\NL]                                               \ \par
3159 %     Reset ~[~Set~]~ the line number to 1
3160 %     ~[~<number>~]~.
3161 %                                                                        \item
3162 % [|\setrunninglinenumbers]                                             \ \par
3163 %     Switch to ~running~ line number mode. Do \emph{not}
3164 %     turn it on or off.
3165 %                                                                        \item
3166 % [|\setpagewiselinenumbers]                                            \ \par
3167 %     Switch to ~pagewise~ line number mode. Do \emph{not}
3168 %     turn it on or off.
3169 %                                                                        \item
3170 % [|\switchlinenumbers*]                                                \ \par
3171 %     Causes margin switching in pagewise modes. With the
3172 %     star,  put the line numbers on the inner margin.
3173 %                                                                        \item
3174 % [|\leftlinenumbers*]                                                  \ \par
3175 %                                                                        \item
3176 % [|\rightlinenumbers*]                                                 \ \par
3177 %     Set the line numbers in the left/right margin. With the
3178 %     star this works for both modes of operation, without
3179 %     the star only for the currently selected mode. 
3180 %                                                                        \item
3181 % [|\runningpagewiselinenumbers]                                        \ \par
3182 %     When using the pagewise line number mode,  do not
3183 %     subtract the page offset.  This results in running
3184 %     line numbers again,  but with the possibility to switch
3185 %     margins.  Be careful when doing line number
3186 %     referencing,  this mode status must be the same while
3187 %     setting the paragraph and during references.
3188 %                                                                        \item
3189 % [|\realpagewiselinenumbers]                                           \ \par
3190 %     Reverses the effect of ~\runningpagewiselinenumbers~.
3191 %                                                                        \item
3192 % [|\modulolinenumbers[\NL]                                             \ \par
3193 %     Give a number only to lines which are multiples of
3194 %     ~[~<number>~]~.  If <number> is not specified, the
3195 %     current value in the counter ~linenumbermodulo~ is
3196 %     retained.  <number>=1 turns this off without changing
3197 %     ~linenumbermodulo~.  The counter is initialized to 5.
3198 %%
3199 %%                               %% TODO v4.4+: `counter', he says. Cf._above. 
3200 %%
3201 %%                                                                 (New v4.31) 
3202 %                                                                        \item
3203 % [|\modulolinenumbers*[\NL]                                            \ \par 
3204 %     Like ~\modulolinenumbers~, the only difference being 
3205 %     that the first line number after a ~\linenumbers~ 
3206 %     (or ~\runninglinenumbers~, ~\pagewiselinenumbers~, 
3207 %     ~\quotelinenumbers~) is printed regardless of the 
3208 %     modulo---yet `1' is printed only after (or \dots) 
3209 %     ~\firstlinenumber{1}~. 
3210 %     This also applies to the first line of a 
3211 %     ~{linenumbers}~ or respective environment. 
3212 %     See subsection_\ref{ss:Mod} for another explanation. 
3213 %     The behaviour may be unsatisfactory with pagewise 
3214 %     line-numbering. 
3215 %%                                                                (/New v4.31) 
3216 %%                                                                 (New v4.00)
3217 %                                                                        \item
3218 % [|\firstlinenumber]                                                   \ \par 
3219 %     ~\firstlinenumber{~<filino>~}~ brings about that 
3220 %     (after it) line numbers less than <filino> do 
3221 %     \emph{not} appear in the margin. Moreover, with 
3222 %     ~\modulolinenumbers[~<number>~]~, just the line 
3223 %     numbers which are <filino> plus a multiple of 
3224 %     <number> are printed.---If you had 
3225 %     ~\firstlinenumber{~<pos>~}~ with some $\mbox{<pos>}>0$ 
3226 %     and want to switch to printing multiples of, e.g., 
3227 %     4, you best do ~\modulolinenumbers[4]~ and 
3228 %     ~\firstlinenumber{0}~. (See subsection_\ref{ss:Mod} 
3229 %     for technical details.) 
3230 %%                                                                (/New v4.00) 
3231 %                                                                        \item
3232 % [|\linenumberdisplaymath]                                             \ \par
3233 %     Number the lines of a display math in a ~{linenomath}~
3234 %     environment, but do not in a ~{linenomath*}~
3235 %     environment.  This is used by the package option
3236 %     ~[mathlines]~. 
3237 %                                                                        \item
3238 % [|\nolinenumberdisplaymath]                                           \ \par
3239 %     Do not Number the lines of a display math in a
3240 %     ~{linenomath}~ environment, but do in a
3241 %     ~{linenomath*}~ environment.  This is the default.
3242 %                                                                        \item
3243 % [|\linelabel]                                                         \ \par
3244 %     Set a ~\linelabel{~<foo>~}~ to the line number where
3245 %     this commands is in.  Refer to it with the \LaTeX\
3246 %     referencing commands ~\ref{~<foo>~}~ and
3247 %     ~\pageref{~<foo>~}~.
3248 %                                                            \end{description}
3249 % The commands can be used globally, locally within groups
3250 % or as environments.  It is important to know that they 
3251 %%
3252 %%                                                %% TODO: \linelabel? others? 
3253 %%
3254 % take action only when the ~\par~ is executed.  The
3255 %%
3256 %%                     %% TODO: sure? ~\modulo...~, e.g.? well, in a sense ... 
3257 %%
3258 % ~\end{~<mode>~linenumbers}~ commands provide a ~\par~.
3259 % Examples:
3260 %                                                                \begin{verse}
3261 %   ~{\linenumbers~  <text> ~\par}~                                         \\
3262 %                                                                         \ \\
3263 %   ~\begin{linenumbers}~                                                   \\
3264 %       <text>                                                              \\
3265 %   ~\end{linenumbers}~                                                     \\
3266 %                                                                         \ \\
3267 %   <paragraph> ~{\linenumbers\par}~                                        \\
3268 %                                                                         \ \\
3269 %   ~\linenumbers~                                                          \\
3270 %     <text> ~\par~                                                         \\
3271 %   ~\nolinenumbers~                                                        \\
3272 %                                                                         \ \\
3273 %   ~\linenumbers~                                                          \\
3274 %   <paragraph> ~{\nolinenumbers\par}~                                      \\
3275 %                                                                  \end{verse}
3276 % (New v4.00) 
3277 % However, the examples containing <paragraph> show what you 
3278 % should \emph{not} do, at least if you use ~\pagebreak~, 
3279 % ~\nopagebreak~, ~\vspace~, ~\\*~ or 
3280 % ~\\[~<space>~]~---cf._section_\ref{s:MVadj}. 
3281 %
3282 % The same care should be applied to the ``wizard'' devices 
3283 % ~\ifLineNumbers~ (subsection_\ref{ss:OnOff}) and
3284 % ~\PostponeVadjust~ (section_\ref{ss:PVadj}). 
3285 %  (/New v4.00) 
3286
3287 % (New v4.11) Oh, and the commands and environments of 
3288 % section_{s:Xt} are missing. Sorry, I am in a hurry now. 
3289 % May be next time.%                                             %% TODO v4.4+ 
3290 % ---And the  environments ~{linenomath}~ and ~{linenomath*}~should 
3291 % get an own paragraph. In short, each math display, equation, 
3292 % or ~{eqnarray}~ should be ``wrapped'' in one of ~{linenomath}~ 
3293 % and ~{linenomath*}~. 
3294
3295 %                                                                \subsection{%
3296 %                 Customization hooks
3297 %                                                                     \unskip} 
3298
3299 % There are several hooks to customize the appearance of the
3300 % line numbers, and some low level hooks for special
3301 % effects. 
3302 %                                                     \begin{description}\item
3303 % [|\thelinenumber]                                                     \ \par
3304 %     This macro should give the representation of the line
3305 %     number in the \LaTeX-counter ~linenumber~.  The
3306 %     default is provided by \LaTeX:                              \par$\qquad$
3307 %         ~\arabic{linenumber}~
3308 %                                                                        \item
3309 % [|\makeLineNumberLeft]                                                \ \par
3310 %     This macro is used to attach a line number to the left
3311 %     of the text page.  This macro should fill an ~\hbox to 0pt~ 
3312 %     which will be placed at the left margin of the
3313 %     page, with the reference point aligned to the line to
3314 %     which it should give a number.  Please use the macro
3315 %     ~\LineNumber~ to refer to the line number. 
3316 %
3317 %     The default definition is                                   \par$\qquad$
3318 %         ~\hss\linenumberfont\LineNumber\hskip\linenumbersep~
3319 %                                                                        \item
3320 % [|\makeLineNumberRight]                                               \ \par
3321 %     Like ~\makeLineNumberLeft~, but for line numbers on
3322 %     the right margin.
3323 %
3324 %     The default definition is                                   \par$\qquad$
3325 %        ~\linenumberfont\hskip\linenumbersep\hskip\textwidth~    \par$\qquad$
3326 %        ~\hbox to\linenumberwidth{\hss\LineNumber}\hss~
3327 %                                                                        \item
3328 % [|\linenumberfont]                                                    \ \par
3329 %     This macro is initialized to                                \par$\qquad$
3330 %         ~\normalfont\tiny\sffamily~
3331 %                                                                        \item
3332 % [|\linenumbersep]                                                     \ \par
3333 %     This dimension register sets the separation of the
3334 %     linenumber to the text. Default value is ~10pt~.
3335 %                                                                        \item
3336 % [|\linenumberwidth]                                                   \ \par
3337 %     This dimension register sets the width of the line
3338 %     number box on the right margin.  The distance of the
3339 %     right edge of the text to the right edge of the line
3340 %     number is ~\linenumbersep~ + ~\linenumberwidth~. The
3341 %     default value is ~10pt~.  
3342 %                                                                        \item
3343 % [|\theLineNumber] (for wizards)                                       \ \par
3344 %     This macro is called for printing a ~\newlabel~ entry
3345 %     to the aux-file.  Its definition depends on the mode.
3346 %     For running line numbers it's just ~\thelinenumber~,
3347 %     while in pagewise mode, the page offset subtraction
3348 %     is done in here.
3349 %                                                                        \item
3350 % [|\makeLineNumber] (for wizards)                                      \ \par
3351 %     This macro produces the line numbers.  The definition
3352 %     depends on the mode.  In the running line numbers
3353 %     mode it just expands ~\makeLineNumberLeft~.
3354 %                                                                        \item
3355 % [|\LineNumber] (for wizards)                                          \ \par
3356 %     This macro is called by ~\makeLineNumber~ to typeset
3357 %     the line number.  This hook is changed by the modulo
3358 %     mechanism 
3359 %%                                                                        %%%.
3360 %     and by ~\firstlinenumber~. 
3361 %%                                                                %% New v4.00 
3362 %                                                            \end{description}
3363 %% 
3364 %% TODO: \stepLineNumber---another wizard command!? 
3365 %% Not sure, may be retreated. 
3366 %                                                             \end{document}%D
3367 ------------------------------------------------------------------------------
3368                                                                        %SSTOPP
3369 %% TODO v4.4+:  Check for unwanted comment marks in new comments 
3370 %%             (resulting from manual aligning): search `New v4.2' 
3371 %%             and/or ` % '! 
3372 %% TODO v4.4+:  Check for missing comment marks where a paragraph 
3373 %%             should end/start. Also to prevent empty "code" lines. 
3374 %%             Especially, new comments at section ends must be 
3375 %%             followed by comment mark lines. 
3376 %%             And prevent ~\par~s from blank lines in definitions! 
3377 %%             See `visual space' above. 
3378 %%             For proper appearance in lineno.tex, note that a comment 
3379 %%             in a final code line changes behaviour. 
3380 %% TODO v4.4+:  Require README for redistribution? 
3381 %% TODO v4.4+:  Since discussions of code have increased so much, it 
3382 %%             would be appropriate not to give to this file 
3383 %%             extension `.sty' (e.g., `dty'!??). ?? Is quickly read though! 
3384 %%             A .sty extraction may be possible even if the present 
3385 %%             file is neither a .doc nor a .dtx. (!???) 
3386 %%             Use awk line below (etc.) for .doc at least; + .ins or so. 
3387 %%                 ^ must not be caps! To escape awk. 
3388 %% TODO v4.4+:  Underfull lines!? (due to long code quotations) 
3389 %% TODO v4.4+:  Sometimes paragraph indents may be appropriate. 
3390 %% TODO        Swap first line (`\iffalse...') with corresponding below. 
3391                Or do *not* swap, maybe nawk is more reliable. 
3392 %% TODO v4.4+:  Ponder Stephan's mail from 2004/09/02. 
3393 %% TODO v4.4+: 
3394 %% use \@ET@makeLineNumber. 
3395 %% plus almost all `(UL)' 
3396 %% plus lots of bad boxes messages 
3397 %% change v4.3 TODOs when postponed 
3398 %% remove {old} environments. 
3399
3400 ------------------------------------------------------------------------------
3401
3402 # awk command lines for v4.00, mixed with former ones: 
3403
3404 echo "Don't bother about unknown 'iffalse'."                  # SHELL1 
3405 nawk '/A[W]K/' lineno.sty | nawk -f - lineno.sty >lineno.tex; # SHELL1
3406 latex lineno; latex lineno; latex lineno; latex lineno;       # SHELL1
3407
3408 BEGIN{DOC=-1;                                     # AWK DOC A W K
3409  BEGINCODE = "\\begin{code}\\begin{verbatim}";    # AWK
3410  ENDCODE   = "\\end{verbatim}\n\\end{code}";   }  # AWK
3411  BEGINCODE = "%    \\begin{macrocode}";           #     DOC A W K
3412  ENDCODE   = "%    \\end{macrocode}";          }  #     DOC A W K
3413 /^[ \t]*$/ { ECNT++; next; }                      # AWK DOC A W K
3414 /\\documentclass/{ sub("article","ltxdoc") }      #     DOC A W K
3415 /%D$/      { sub("^%* *",""); sub("%D$","");      #     DOC A W K
3416              print > "lineno.drv"; next        }  #     DOC A W K
3417 /^%%/      { next; }                              # AWK DOC A W K
3418 /^%/       { if (!DOC) { print ENDCODE; }         # AWK DOC A W K
3419              DOC=1; ECNT=0;                       # AWK DOC A W K
3420              sub("^% *","");                      # AWK
3421              sub("^% *","% ");                    #     DOC A W K
3422              print; next;                      }  # AWK DOC A W K
3423 /%VERSION/ { sub("%VERSION",""); print; next; }   # AWK 
3424 /%SSTOPP/  { exit }                               # AWK 
3425 DOC<0      { next }                               # AWK DOC A W K
3426 /^-+-$/    { if (!DOC) print ENDCODE; exit }      # AWK DOC A W K
3427 { if (DOC) { ECNT=DOC=0; print BEGINCODE; }       # AWK DOC A W K
3428   while (ECNT>0) { print " "; ECNT--; }           # AWK DOC A W K
3429   print $0;                                    }  # AWK DOC A W K
3430
3431 # New v4.00, UL: know nothing about awk; found present solution 
3432 # in hours of trial and error. 
3433
3434 % Earlier (should be inhibited by %SSTOPP above and otherwise): 
3435 echo "expect errors for unknown commands 'iffalse' and 'fi'";# SHELL0 SHELL#1 
3436 awk '/A[W]K/' lineno.sty | awk -f - lineno.sty >lineno.tex;  # SHELL0
3437 latex lineno; latex lineno; latex lineno; latex lineno;      # SHELL0
3438 nawk '/A[W]K/' lineno4.sty | nawk -f - lineno4.sty >lineno4.tex;  # SHELL#1
3439 latex lineno4; latex lineno4; latex lineno4; latex lineno4;       # SHELL#1
3440
3441 awk '/DOC A [W] K/' lineno.sty | awk -f - lineno.sty >lineno.doc; # DOC SH
3442
3443 BEGIN{DOC=-1;                                     # A#WK DOC A W K
3444  BEGINCODE = "\\begin{code}\\begin{verbatim}";    # A#WK
3445  ENDCODE   = "\\end{verbatim}\n\\end{code}";   }  # A#WK
3446  BEGINCODE = "%    \\begin{macrocode}";           #     DOC A W K
3447  ENDCODE   = "%    \\end{macrocode}";          }  #     DOC A W K
3448 /^[ \t]*$/ { ECNT++; next; }                      # A#WK DOC A W K
3449 /\\documentclass/{ sub("article","ltxdoc") }      #     DOC A W K
3450 /%D$/      { sub("^%* *",""); sub("%D$","");      #     DOC A W K
3451              print > "lineno.drv"; next        }  #     DOC A W K
3452 /^%%/      { next; }                              # A#WK DOC A W K
3453 /^%/       { if (!DOC) { print ENDCODE; }         # A#WK DOC A W K
3454              DOC=1; ECNT=0;                       # A#WK DOC A W K
3455              sub("^% *","");                      # A#WK
3456              sub("^% *","% ");                    #     DOC A W K
3457              print; next;                      }  # A#WK DOC A W K
3458 DOC<0      { next }                               # A#WK DOC A W K
3459 /^-+-$/    { if (!DOC) print ENDCODE; exit }      # A#WK DOC A W K
3460 { if (DOC) { ECNT=DOC=0; print BEGINCODE; }       # A#WK DOC A W K
3461   while (ECNT>0) { print " "; ECNT--; }           # A#WK DOC A W K
3462   print $0;                                    }  # A#WK DOC A W K
3463
3464
3465 ------------------------------------------------------------------------------
3466
3467 If you are looking here because of the two top lines of the file: 
3468
3469 A .tex documentation of this macro file can be obtained by 
3470
3471     sh lineno.sty 
3472
3473 under UNIX.--You may find this hint little helpful. One 
3474 reason may be that the awk versions to which you have access 
3475 don't work suitably. Another reason may be that you don't have 
3476 access to UNIX (in some sense). However, a .tex, .dvi, or .pdf 
3477 version of such a documentation should be available from CTAN, 
3478 in the same folder as the present file. When we typed this, that 
3479 folder was /macros/latex/contrib/lineno. If this has changed in 
3480 the meantime, a CTAN search should lead you to a folder 
3481 containing such a documentation. Or you may get help from one of 
3482 the e-mail addresses above. 
3483
3484