
diff -r 3d4b49921cdb -r c346c156a7cd CookBook/document/lineno.sty
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CookBook/document/lineno.sty	Fri Nov 28 05:19:55 2008 +0100
@@ -0,0 +1,3484 @@
+                                \iffalse; awk '/S[H]ELL1/' lineno.sty|sh;exit; 
+                                     ... see bottom for .tex documentation ... 
+
+Macro file lineno.sty for LaTeX: attach line numbers, refer to them. 
+                                                                           \fi 
+\def\fileversion{v4.41} \def\filedate{2005/11/02}                     %VERSION
+
+%%% Copyright 1995--2003 Stephan I. B"ottcher <boettcher@physik.uni-kiel.de>; 
+%%% Copyright 2002--2005 Uwe L"uck, http://www.contact-ednotes.sty.de.vu 
+%%%                      for version 4 and code from former Ednotes bundle 
+%%%                      --author-maintained. 
+%%% 
+%%% This file can be redistributed and/or modified under 
+%%% the terms of the LaTeX Project Public License; either 
+%%% version 1.3a of the License, or any later version.
+%%% The latest version of this license is in
+%%%     http://www.latex-project.org/lppl.txt
+%%% We did our best to help you, but there is NO WARRANTY. 
+% 
+%%% $Id: lineno.sty,v 1.1 2006/02/25 18:18:12 wenzelm Exp $ %% was v4.00.
+%                                                      \title{\texttt{\itshape 
+%%                                       %% (UL 2004/10/09:) Italic TT is evil
+%%                                       %% ... or nice front page layout!? 
+%%
+%         lineno.sty \ \fileversion\ \filedate 
+%                                                               \unskip}\\\ \\
+%          A \LaTeX\ package  to attach 
+% \\        line numbers to paragraphs
+%                                                            \unskip}\author{% 
+%              Stephan I. B\"ottcher 
+%  \\          Uwe L\"uck 
+%                                                              \unskip}\date{% 
+%            boettcher@physik.uni-kiel.de 
+%  \\        http://contact-ednotes.sty.de.vu 
+%% \\        stephan@nevis.columbia.edu
+%% \\        Stephan.Boettcher@cern.ch                     
+%                                                                          \\}
+%
+%                                      \documentclass[a4paper,12pt]{article}%D
+%                                                        \usepackage{lineno}%D 
+%%                                                              %% (New v4.00)
+%                                                     \catcode`\_\active\let_~ 
+%%                                               %% Beware math!? (/New v4.00) 
+%                                                                \def~{\verb~} 
+%                                                               \let\lessthan< 
+%                                                           \catcode`\<\active
+%                                   \def<#1>{$\langle${\itshape#1}\/$\rangle$}
+%                                                           \catcode`\|\active
+%%                                        (New v4.1: \tt star; in box anyway.) 
+%                                                  \def|#1{\ttfamily\string#1}
+%%                                               \def|#1{{\ttfamily\string#1}}
+%%                                                                 (/New v4.1) 
+%                                                        \newenvironment{code}
+%                                                     {\par\runninglinenumbers
+%                                                       \modulolinenumbers[1]%
+%                                                           \linenumbersep.3em
+%                                                                \footnotesize
+%                                                          \def\linenumberfont
+%                                                  {\normalfont\tiny\itshape}}
+%                                                                           {} 
+%%                                                              %% (New v4.00)
+%                                           {\makeatletter \gdef\scs#1{\texttt
+%                                                {\protect\@backslashchar#1}}}
+%                                                  \def\old{\par\footnotesize}
+%%                                                             %% (/New v4.00)
+%%                                                               %% (New v4.1) 
+%                                                          {\catcode`\/\active
+%                                     \gdef\path{\begingroup\catcode`\/\active
+%                                                          \let/\slash\dopath}
+%                                 \gdef\dopath#1{\slash\unpenalty#1\endgroup}}
+%%                                                              %% (/New v4.1)
+%
+%                                                           \begin{document}%D
+%%                                                         \DocInput{lineno}%D
+%                                                         \pagewiselinenumbers
+%                                                                   \maketitle 
+%                                                         \pagestyle{headings}
+%                                                             \tableofcontents
+%                                                                      \sloppy
+% 
+%%                                      %% New v4.00: `...section{%' + \unskip 
+%                                                                   \section{%
+%                    Introductions 
+%%                                                           %% New v4.00: `s'
+%                                                                     \unskip}
+% 
+% (New v4.00)           Parts of former first section 
+% have been rendered separate subsections for package 
+% version_v4.00.                         (/New v4.00) 
+% 
+%                                                                \subsection{% 
+%               Introduction to versions $\textrm{v}\lessthan4$
+%                                                                     \unskip} 
+% 
+% This package provides line numbers on paragraphs.
+% After \TeX\ has broken a paragraph into lines there will
+% be line numbers attached to them, with the possibility to
+% make references  through the \LaTeX\ ~\ref~, ~\pageref~
+% cross reference mechanism.  This includes four issues:
+%                                                              \begin{itemize}
+% \item   attach a line number on each line,
+% \item   create references to a line number,
+% \item   control line numbering mode,
+% \item   count the lines and print the numbers.
+%                                                                \end{itemize}
+% The first two points are implemented through patches to
+% the output routine.  The third by redefining ~\par~, ~\@par~
+% and ~\@@par~.  The counting is easy, as long as you want
+% the line numbers run through the text.  If they shall
+% start over at the top of each page, the aux-file as well
+% as \TeX s memory have to carry a load for each counted line.
+%
+% I wrote this package for my wife Petra, who needs it for
+% transcriptions of interviews.  This allows her to
+% precisely refer to passages in the text.  It works well
+% together with ~\marginpar~s, but not too well with displaymath.
+% ~\footnote~s are a problem, especially when they
+% are split, but we may get there. 
+% (New v4.00 UL) Version v4.00 overcomes the problem, I believe. 
+% (/UL /New v4.00)
+%
+% lineno.sty works
+% surprisingly well with other packages, for
+% example, ~wrapfig.sty~.  So please try if it
+% works with whatever you need, and if it does,
+% please tell me, and if it does not, tell me as
+% well, so I can try to fix it.
+%
+%                                                                \subsection{%
+%               Introduction to versions v4.00ff. (UL) 
+%                                                                     \unskip}
+% 
+% ~lineno.sty~ has been maintained by Stephan until version_v3.14.
+% From version_v4.00 onwards, maintenance is shifting towards 
+% Uwe L\"uck (UL), who is the author of v4\dots code and of v4\dots 
+% changes in documentation. This came about as follows. 
+% 
+% Since late 2002, Christian Tapp and Uwe L\"uck have employed 
+% ~lineno.sty~ for their ~ednotes.sty~, a package supporting 
+% critical editions---cf.
+%                                                                  \[\mbox{\tt 
+%     http://ednotes.sty.de.vu 
+%                                                                   \unskip}\]
+% ---while you find ~ednotes.sty~ and surrounding files in 
+% CTAN folder \path{macros/latex/contrib/ednotes}.
+% 
+% Soon, some weaknesses of ~lineno.sty~ showed up, mainly since 
+% Christian's critical editions (using ~ednotes.sty~) needed lots 
+% of ~\linelabel~s and footnotes. (These weaknesses are due to 
+% weaknesses of \LaTeX's ~\marginpar~ mechanism that Stephan 
+% used for ~\linelabel~.) So we changed some ~lineno.sty~ 
+% definitions in some extra files, which moreover offered new 
+% features. We sent these files to Stephan, hoping he would take 
+% the changes into ~lineno.sty~. However, he was too short of time. 
+% 
+% Writing a TUGboat article on Ednotes in 2004, we hoped to 
+% reduce the number of files in the Ednotes bundle and so asked 
+% Stephan again. Now he generously offered maintenance to me, so 
+% I could execute the changes on my own. 
+% 
+% The improvements are as follows: 
+%                                                         \begin{itemize}\item 
+% [(i)]   Footnotes placement approaches intentions better 
+% (footnotes formerly liked to pile up at late pages). 
+%                                                                        \item 
+% [(ii)]  The number of ~\linelabel~s in one paragraph is no longer 
+% limited to 18. 
+%                                                                        \item 
+% [(iii)] ~\pagebreak~, ~\nopagebreak~, ~\vspace~, and the star 
+% and optional versions of ~\\~ work as one would expect 
+% (section_\ref{s:MVadj}).                                   %% Added for v4.1
+%                                                                        \item 
+% [(iv)]  A command is offered which chooses the first line number 
+% to be printed in the margin 
+% (subsection_\ref{ss:Mod}).                                 %% Added for v4.1
+%                                                                        \item 
+% [(v)]   (New v4.1) \LaTeX\ tabular environments (optionally) 
+% get line numbers as well, and you can refer to them in the 
+% usual automatic way. (It may be considered a shortcoming that, 
+% precisely, \emph{rows} are numbered, not lines.---See 
+% subsection_\ref{ss:Tab}.) 
+%                                                                        \item 
+% [(vi)]  We are moving towards referring to math items 
+% (subsection_\ref{ss:MathRef} and the hooks in 
+% subsection_\ref{ss:LL}). 
+% (/New v4.1) 
+%                                                                 \end{itemize}
+% (Thanks to Stephan for making this possible!)
+% 
+%% Unpublish: 
+%% You may trace the earlier developments of these changes by 
+%% requesting our files ~linenox0.sty~, ~linenox1.sty~, and 
+%% ~lnopatch.sty~. Most of our changes have been in ~linenox0.sty~. 
+%% Our ~linenox1.sty~ has extended ~linenox0.sty~ for one single 
+%% purpose in a not very stable way. 
+%%% (See ~\linenumberpar~ below). 
+%% ~lnopatch.sty~ has done the first line number thing referred 
+%% to in case_(iv) up to now. 
+%% (New v4.1) 
+%% Case_(v) earlier was provided by our ~edtab02.sty~---now 
+%% called ~edtable.sty~. 
+%% (/New v4.1) 
+% 
+% Ednotes moreover profits from Stephan's offer with regard 
+% to the documentation of our code which yielded these 
+% improvements formerly. This documentation now becomes 
+% printable, being part of the ~lineno.sty~ documentation. 
+% 
+% Of course, Stephan's previous ~lineno.sty~ versions were a great 
+% and ingenious work and exhibit greatest \TeX pertise. I never 
+% could have done this. I learnt a lot in studying the code when 
+% Christian pointed out strange output results and error 
+% messages, and there are still large portions of ~lineno.sty~ 
+% which I don't understand (consider only pagewise numbering of 
+% lines). Fortunately, Stephan has offered future help if 
+% needed.---My code for attaching line numbers to \emph{tabular 
+% environments} (as mentioned above, now still in 
+% ~edtable.sty~) %%                                                      %% TODO
+% developed from macros which Stephan and Christian experimented 
+% with in December 2002. Stephan built the basics. 
+% (However, I then became too proud to follow his advice only to 
+% use and modify ~longtable.sty~.)
+% 
+% There are some issues concerning use of counters on which I 
+% don't agree with Stephan and where I would like to change the 
+% code if ~lineno.sty~ is ``mine'' as Stephan offered. However, 
+% Stephan is afraid of compatibility problems from which, in 
+% particular, his wife could suffer in the near future. So he 
+% demanded that I change as little as possible for my first 
+% version. Instead of executing changes that I plan I just offer 
+% my opinions at the single occasions. I hope to get in touch 
+% this way with users who consider subtle features vital which I 
+% consider strange. 
+% 
+% On the other hand, the sections on improvements of the 
+% implementation have been blown up very much and may be tiring 
+% and litte understandable for mere \emph{users}. These users 
+% may profit from the present presentation just by jumping to 
+% sections_\ref{s:Opts} and_\ref{s:UserCmds}. There is a user's 
+% guide ulineno.tex which may be even more helpful, but it has 
+% not been updated for a while.                                        %% TODO
+% 
+%                                                                \subsection{%
+%               Availability 
+%                                                                     \unskip}
+% 
+% In case you have found the present file otherwise than from 
+% CTAN: A recent version and documentation of this package 
+% should be available from CTAN folder 
+% \path{macros/latex/contrib/lineno}.
+% Or mail to one of the addresses at top of file. 
+% 
+%                                                                \subsection{% 
+%               Introductory code
+%                                                                     \unskip}
+% 
+% This style option is written for \LaTeXe, November 1994 or later,
+% since we need the ~\protected@write~ macro. 
+% 
+% (New v4.00)               And we use ~\newcommand*~ for 
+% controlling length of user macro arguments, which has been 
+% available since December 1994. 
+%% 
+
+\NeedsTeXFormat{LaTeX2e}[1994/12/01] 
+%%                                                                [1994/11/04] 
+\ProvidesPackage{lineno} 
+  [\filedate\space line numbers on paragraphs \fileversion] 
+% (/New v4.00) 
+%% 
+%% History of versions: 
+%% v1.00 1995/03/31  SIB: first release for Petra's interview transcriptions
+%% v1.01 1995/10/28  SIB: added ~pagewise~ mode
+%% v1.02 1995/11/15  SIB: added ~modulo~ option  
+%% v1.03 1995/12/05  SIB: pagewise: try to reduce the hash-size requirements
+%% v2.00 1995/12/06  SIB:   .. it works, new user interface
+%% v2.01 1996/09/17  SIB: put into CVS
+%% v2.02 1997/03/17  SIB: add: \@reinserts, for footnotes
+%% v2.04 1998/03/09  SIB: add: linenomath environment
+%% v2.05 1998/04/26  SIB: add: prevgraf test
+%% v2.06 1999/03/02  SIB: LPPL added
+%% v3.00 1999/06/11  SiB: include the extension in the main file
+%% v3.01 1999/08/28  SiB: \@reinserts -> \holdinginserts
+%% v3.02 2000/03/10  SiB: \@LN@output
+%% v3.03 2000/07/01  SiB: \@LN@ExtraLabelItems, hyperref
+%% v3.04 2000/12/17  SiB: longtable compatibility.
+%% v3.05 2001/01/02  SiB: [fleqn] detection. 
+%% v3.05a 2001/01/04 SiB: [fleqn] detection reverted for eqnarray. 
+%% v3.06 2001/01/17  SiB: [twocolumn] mode support.
+%% v3.07 2001/07/30  SiB: [hyperref] option obsoleted.
+%% v3.08 2001/08/02  SiB: linenomath wrapping for \[ \]
+%% v3.08a 2001/08/04 SiB: linenomath wrapping for \[ \] fixed
+%% v3.08b 2002/01/27 SiB: enquotation typo fix
+%% v3.09 2003/01/14  SIB: hyperref detection fix
+%% v3.10 2003/04/15  FMi: \MakeLineNo fix for deep boxes
+%% v3.10a 2003/11/12  Uwe L�ck: \lineref typo fix
+%% v4.00 2004/09/02  UL:  included linenox0, linenox1, lnopatch code with 
+%%                        documentation, usually indicated by `New v4.00'; 
+%%                        discussions of old code, indicated by `UL'; 
+%%                        LPPL v.1 ->  LPPL v1.3, `program' -> `file'; 
+%%                        first lines with \filedate and \fileversion, 
+%%                        according nawk lines; `November 1994 or later', 
+%%                        some earlier documentation typos (including a few 
+%%                        bad minus signs), { -> {% and } -> \unskip} at 
+%%                        line ends (so, e.g., alignment in TOC works); \scs. 
+%%       2004/09/03  UL:  removed everything which indicated that the 
+%%                        present file were named `lineno4.sty'. 
+%% v4.1  2004/09/19  UL:  Inserted Stephan's identification line, removed 
+%%                        some TODOs and remarks from v4.00. 
+%%       2004/10/04  UL:  Added acknowledgement for Daniel Doherty; 
+%%                        `(New v4.00)' with [|\firstlinenumber]; changed 
+%%                        TODOs; Refining -> Redefining (\vadjust). 
+%%       2004/10/05  UL:  ednmath0 -> mathrefs; \catcode`\~ -> \active;
+%%                        \path; refined section on options `mathrefs'; 
+%%                        changes in introduction. 
+%%       2004/10/06  UL:  Changed/removed TODOs, e.g., for edtable.sty. 
+%%       2004/10/11  UL:  Reminders: linenox0/1/lnopatch.sty obsolete; 
+%%                        \tt star in list of commands.
+%%       2004/10/12  UL:  Corrected blank lines in lineno.tex. 
+%%       2004/10/19  UL:  Fixed minor typos; remark on \if@LN@edtable. 
+%% v4.1a 2004/11/07  UL:  LPPL v1.3a. 
+%% v4.1b 2004/11/13  UL:  Comment on \outputpenalty values. 
+%% v4.1c 2005/01/10  UL:  Contact via http. 
+%% v4.11 2005/02/20  UL:  Error message with \linelabel when not numbering. 
+%%       2005/03/07  UL:  Removed \linelabel from ss:Tab heading, consider 
+%%                        marginal line numbers as well, revised ss:Tab. 
+%%                        Added a few lines on missing explanations to 
+%%                        s:UserCmds. Corrected some code alignments. 
+%%       2005/03/08  UL:  Require recent edtable.sty. 
+%%
+
+%% v4.2  2005/03/21  UL:  "Physical page" counter works with \include. 
+%%       2005/04/17  UL:  Raised options section above extensions section 
+%%                        (v4.00 disabled `displaymath' option); 
+%%                        third arg for \@ifundefined{mathindent}; 
+%%                        "bunch of options"; 
+%%       2005/04/24  UL:  compatibility with tamefloats; vplref.sty. 
+%%       2005/04/25  UL:  \number -> \the; wondered -> $$; subsec. appbas; 
+%%                        CrtlLN sec -> subsec.; \newcommand* wherever ...; 
+%%                        doc. on `other output routines' and `addpageno' 
+%%                        (this changed from `varioref'). 
+%%       2005/04/27  UL:  =1\relax -> =\@ne, 0\relax ..., \hb@xt@, 
+%%                        \ifx\@@par\@@@par -> \ifLineNumbers, typos, 
+%%                        \pagestyle{headings}, LaTeX -> \LaTeX. 
+%% v4.21 2005/04/28  UL:  linenomath section: removed wrong \else's, 
+%%                        \holding...: \thr@@, \@LN@outer@holdins, \global. 
+%% v4.22 2005/05/01  UL:  \unvbox\@outputbox; \@LN@col without #1, 
+%%       2005/05/08  UL:  global/local \internall..., \resetl... global, 
+%%                        shortened discussions of this and of \newcounter. 
+%%       2005/05/09  UL:  corr.: doc. typo, version history, bad lines; 
+%%                        percent; \chardef for modulo, 
+%%                        \value{firstlinenumber}. 
+%% v4.3  2005/05/10  UL:  \@backslashchar -> \char`\\ in \scs. 
+%%       2005/05/11  UL:  \linenumbers sets ...outer@holdins; tidied up 
+%%                        documentation regarding earlier versions. 
+%%       2005/05/12  UL:  `linenomath' without spurious number above; 
+%%                        `displaymath' default; edmac homepage -> 
+%%                        ednotes.sty.de.vu, \endlinenomath without 
+%%                        numbers: no change of \holdinginserts; 
+%%                        \linelabel doesn't go to .aux or mark, 
+%%                        hyperref detected; undone 2005/05/10 (bad mark). 
+%%       2005/05/13  UL:  Reworked hyperref detection (new subsec.). 
+%%       2005/05/15  UL:  More typo fixes, corrected terrible confusions in 
+%%                        the discussion (v4.22/v4.3) of \new/\stepcounter; 
+%%                        new subsec. in `Line number ...'; another 
+%%                        implementation of `hyperref' detection. 
+%%       2005/05/16  UL:  Final minor changes. 
+%% v4.31b    /06/14  UL:  Extended explanation of \firstlinenumbers 
+%%                        and package options; \@LN@ifgreat@critical; 
+%%                        \modulolinenumbers*. Sent to Ednotes.news only.
+%% v4.31 2005/06/15  UL:  \modulolinenumbers* with \firstlinenumber{1}; 
+%%                        " -> ``/''; more doc. on \firstlinenumber .
+%%       2005/06/20  UL:  Typo fix. 
+%%       2005/10/01  UL:  Warning about \mod...* with pagewise mode. 
+%% v4.31a    /10/02  UL:  Minor changes of appearance of doc., e.g., 
+%%                        \[ for $$. 
+%% v4.32b    /10/15  UL:  Support for \addvspace; removed comments that
+%%                        had been invisible already for some time; 
+%%                        made clear with which environments the 
+%%                        linenomath environment is not needed. 
+%% v4.32ab   /10/15  UL:  Observe \if@nobreak with support for \addvspace. 
+%% v4.32 2005/10/17  UL:  Just made it official and sent it to CTAN. 
+%% v4.33b    /10/23  UL:  \if@nobreak\nobreak\fi -> \nobreak . 
+%% v4.33ab   /10/24  UL:  \LineNoLaTeXOutput without \@tempswafalse; 
+%%                        undid v4.22: \[unv]box\@outputbox (space is OK, 
+%%                        \unvbox pushes short columns down); \@LN@kern@z@ . 
+%% v4.4b 2005/10/24  UL:  Another tidying-up of the discussion of 
+%%                        \stepcounter{linenumber}; \@LN@screenoff@pen 
+%%                        replaces \@LN@kern@z@, \@LN@depthbox . 
+%% v4.4  2005/10/27  UL:  Just made official for CTAN. 
+%% v4.4a 2005/10/29  UL:  Undid change of discussion of 
+%%                        \stepcounter{linenumber} (confusion again). 
+%% v4.41 2005/11/02  UL:  Raised \CheckCommand*. 
+%% 
+%% Acknowledgements:
+%% v3.06:  Donald Arseneau, pointed to mparhack.sty.
+%% v3.07+: Frank Mittelbach, points out inconsistencies in the
+%%         user interface.
+%% v3.10:  Frank Mittelbach \MakeLineNo fix for deep boxes
+%% v4.00:  Daniel Doherty points out clash of \pagewise... with resetting 
+%%         page number. 
+%% v4.21:  Much testing work by Erik Luijten. 
+%% v4.3:   `displaymath' default by Erik Luijten's suggestion. 
+%% v4.31:  \modulolinenumbers* is an idea of Hillel Chayim Yisraeli's. 
+%% v4.32:  Support for \addvspace due to Saravanan M.'s observation. 
+%% v4.33:  Different support for \addvspace due to bug reports by 
+%%         Saravanan M.'s and David Josef Dev. 
+%% v4.4:   David Josef Dev points out that \kern\z@ after a paragraph 
+%%         tends to place its final baseline wrongly. 
+%
+%
+%                                                                   \section{%
+%               Put the line numbers to the lines
+%                                                                     \unskip}
+% 
+% (New v4.00)                    This section contained the most 
+% basic package code previously. For various purposes of 
+% version_4\dots, much of these basics have been to be modified. 
+% Much of my (UL's) reasoning on these modifications has been to 
+% be reported. Sorry, the present section has been blown up 
+% awfully thus and contains ramifications that may be difficult 
+% to trace. We add some ~\subsection~ commands in order to cope 
+% with the new situation. (/New v4.00) 
+% 
+%                                                                \subsection{% 
+%               Basic code of \texttt{lineno.sty} \scs{output}
+%                                                    \unskip}\label{ss:output} 
+% 
+% The line numbers have to be attached by the output
+% routine.  We simply set the ~\interlinepenalty~ to $-100000$.
+% The output routine will be called after each line in the
+% paragraph,  except the last,  where we trigger by ~\par~.
+% The ~\linenopenalty~ is small enough to compensate a bunch of
+% penalties (e.g., with ~\samepage~).
+%
+% (New v3.04)            Longtable uses 
+% ~\penalty~$-30000$.  The lineno penalty range was 
+% shrunk to $-188000 \dots -32000$.  (/New v3.04)
+% (New v4.00) New values are listed below (11111f.). (/New v4.00) 
+
+\newcount\linenopenalty\linenopenalty=-100000
+
+%% TODO v4.4+: 
+% (UL)                              Hm. It is never needed below 
+% that this is a counter. ~\def\linenopenalty{-100000\relax}~ 
+% would do. (I guess this consumes more memory, but it 
+% is more important to save counters than to save memory.) 
+% I was frightened by ~-\linenopenalty~ below, but indeed 
+% \TeX\ interprets the string ~--100000~ as 100000. 
+% Has any user or extension package writer ever called 
+% ~\linenopenalty=xxx~, or could I really change this?---The 
+% counter is somewhat faster than the macro. Together with the 
+% compatibility question this seems to support keeping the 
+% counter. (???) 
+%% Note that Stephan chose ~\mathchardef~ below, 
+%% so his choice above seems to have been deliberate. 
+%% <- no point, \mathchardef token is fast. 
+% (/UL) 
+
+\mathchardef\linenopenaltypar=32000
+
+% So let's make a hook to ~\output~,  the direct way. The \LaTeX\ 
+% macro ~\@reinserts~ puts the footnotes back on the page.
+%
+% (New v3.01)                ~\@reinserts~ badly
+% screws up split footnotes.  The bottom part is
+% still on the recent contributions list, and the
+% top part will be put back there after the bottom
+% part. Thus, since lineno.sty does not play well
+% with ~\inserts~ anyway, we can safely experiment
+% with ~\holdinginserts~, without making things
+% much worse.    
+%
+% Or that's what I thought, but:  Just activating
+% ~\holdinginserts~ while doing the ~\par~ will
+% not do the trick:  The ~\output~ routine may be
+% called for a real page break before all line
+% numbers are done, and how can we get control
+% over ~\holdinginserts~ at that point?
+%
+% Let's try this:  When the ~\output~ routine is
+% run with ~\holdinginserts=3~ for a real page
+% break, then we reset ~\holdinginserts~ and
+% restart ~\output~.
+%
+% Then, again, how do we keep the remaining
+% ~\inserts~ while doing further line numbers? 
+%
+% If we find ~\holdinginserts~=$-3$ we activate it again 
+% after doing ~\output~.             (/New v3.01)
+%
+% (New v3.02)                    To work with
+% multicol.sty, the original output routine is now
+% called indirectly, instead of being replaced.
+% When multicol.sty changes ~\output~, it is a
+% toks register, not the real thing. (/New v3.02)
+% 
+% (New v4.00)               Two further complications are added. 
+%%
+%% TODO v4.3+: Or three, ~\@nobreakfalse~ after ~\MakeLineNo~ 
+%% for getting rid of ~\@LN@nopagebreak~. 
+%                                                         \begin{itemize}\item
+% [(i)]  Problems with footnotes formerly resulted from 
+% \LaTeX's ~\@reinserts~ in ~\@specialoutput~ which Stephan's 
+% ~\linelabel~ called via the ~\marginpar~ mechanism. 
+%                                                                        \item
+% [(ii)] \LaTeX\ commands using ~\vadjust~ formerly didn't work 
+% as one would have hoped. The problem is as follows: 
+% Printing the line number results from 
+% a box that the output routine inserts at the place of the 
+% ~\interlinepenalty~. ~\vadjust~ items appear \emph{above} the 
+% ~\interlinepenalty~ (\TeX book p._105). So ~\pagebreak~, e.g., 
+% formerly sent the line number to the next page, while the 
+% penalty from ~\nopagebreak~ could not tie the following line, 
+% since it was screened off by the line number box.---Our trick 
+% is putting the ~\vadjust~ items into a list macro from which 
+% the output routine transfers them into the vertical list, 
+% below the line number box. 
+%                                                                \end{itemize}
+% In this case_(ii), like in case_(i), footnotes would suffer 
+% if ~\holdinginserts~ were non-positive. Indeed, in both 
+% cases_(i) and_(ii) we tackle the footnote problem by extending 
+% that part of Stephan's output routine that is active when 
+% ~\holdinginserts~ is positive. This extension writes the line 
+% number ~\newlabel~ to the .aux file (which was formerly done 
+% under $~\holdinginserts~=-3$) and handles the ~\vadjust~ 
+% items.---To trigger ~\output~ and its ~\linelabel~ or, resp., 
+% ~\vadjust~ part, the list of signal penalties started 
+% immediately before is increased here (first for ~\linelabel~, 
+% second for postponed ~\vadjust~ items): 
+
+\mathchardef\@Mllbcodepen=11111 
+\mathchardef\@Mppvacodepen=11112 
+
+% (/New v4.00) (New v4.2) David Kastrup urges to use a private 
+% name instead of ~\the\output~ (LaTeX-L-list). Otherwise an 
+% ~\output~ routine loaded later and using ~\newtoks\output~ 
+% again may get lost entirely. So we change use of ~\@LN@output~, 
+% using it for the former purpose. Reference to what appeared 
+% with the name of ~\output~ here lasts for a few lines and then 
+% is given away. 
+
+\let\@tempa\output
+\newtoks\output
+\let\@LN@output\output
+\output=\expandafter{\the\@tempa}
+
+% Now we add two cases to Stephan's output routine. (New v4.00)
+
+\@tempa={%
+% (/New 4.2)
+            \LineNoTest
+            \if@tempswa
+%% 
+%% (UL) Learnt that even in def.s blank line means ~\par~. 
+%% to leave visual space in present file with having a
+%% blank line neither in present nor in .tex file, 
+%% use double comment mark (`%%'). (/UL) 
+%% 
+% (New v4.00)
+% We insert recognition of waiting ~\linelabel~ items--- 
+%% 
+              \ifnum\outputpenalty=-\@Mllbcodepen 
+                \WriteLineNo 
+%%
+% ---and of waiting ~\vadjust~ items: 
+%% 
+              \else 
+                \ifnum\outputpenalty=-\@Mppvacodepen 
+                  \PassVadjustList 
+                \else 
+%% 
+%% Now we give control back to Stephan. 
+% (/New v4.00) (New v4.2) Outsource ``Standard'' output 
+% ---which occurs so rarely---to subsection_\ref{ss:LLO}: 
+%% 
+                  \LineNoLaTeXOutput 
+% (/New v4.2) (New v4.00) 
+% Two new ~\fi~s for the ~\linelabel~ and ~\vadjust~ tests--- 
+%% 
+                \fi 
+              \fi 
+%%
+% ---and the remaining is 
+%%%next three lines are 
+% Stephan's code again: 
+% (/New v4.00) 
+%%
+            \else  
+              \MakeLineNo
+            \fi
+            }
+ 
+% (New v4.00)                                  Our new macros 
+% ~\WriteLineNo~ and ~\PassVadjustList~ will be dealt with in 
+% sections_\ref{s:LNref} and_\ref{ss:PVadj}. (/New v4.00) 
+% 
+%                                                                \subsection{%
+%               \scs{LineNoTest}
+%                                                                     \unskip} 
+% 
+% The float mechanism inserts ~\interlinepenalty~s during
+% ~\output~.  So carefully reset it before going on.  Else
+% we get doubled line numbers on every float placed in
+% horizontal mode, e.g, from ~\linelabel~.  
+%
+% Sorry, neither a ~\linelabel~ nor a ~\marginpar~ should
+% insert a penalty, else the following linenumber
+% could go to the next page. Nor should any other
+% float.  So let us suppress the ~\interlinepenalty~ 
+% altogether with the ~\@nobreak~ switch.
+%
+% Since (ltspace.dtx, v1.2p)[1996/07/26], the ~\@nobreaktrue~ does
+% it's job globally.  We need to do it locally here.
+
+\def\LineNoTest{%
+  \let\@@par\@@@par
+  \ifnum\interlinepenalty<-\linenopenaltypar
+     \advance\interlinepenalty-\linenopenalty
+     \@LN@nobreaktrue
+     \fi
+  \@tempswatrue
+  \ifnum\outputpenalty>-\linenopenaltypar\else
+     \ifnum\outputpenalty>-188000\relax
+       \@tempswafalse
+       \fi
+     \fi
+  }
+
+\def\@LN@nobreaktrue{\let\if@nobreak\iftrue} % renamed v4.33
+
+% (UL)                                      I thought here were 
+% another case of the save stack problem explained in \TeX book, 
+% p._301, namely through both local and global changing 
+% ~\if@nobreak~. However, ~\@LN@nobreak~ is called during 
+% ~\@LN@output~ only, while ~\@nobreaktrue~ is called by \LaTeX's 
+% ~\@startsection~ only. The latter never happens during 
+% ~\@LN@output~. So there is no local value of ~\if@nobreak~ on 
+% save stack when ~\@nobreaktrue~ acts, since ~\the\@LN@output~ 
+% (where ~\@LN@output~ is a new name for the original ~\output~) 
+% is executed within a group (\TeX book p._21).
+%%
+%%           2004/09/19 Removed nonsense here according to Stephan 2004/09/04.
+%% 
+% (/UL) 
+%
+%                                                                \subsection{%
+%               Other output routines (v4.2)
+%                                                       \unskip}\label{ss:LLO} 
+% 
+% I had thought of dealing with bad interference of footnotes 
+% (and ~\enlargethispage~) with (real) ~\marginpar~s and floats 
+% \emph{here}. Yet this is done in 
+%                                                                           \[
+%     ~http://~\mbox{[CTAN]}
+%           ~/macros/latex/contrib/tamefloats/tameflts.sty~
+%                                                                           \]
+% now, and I prefer striving for compatibility with the latter. 
+% (See there for expanding on the problem.)
+% This requires returning the special absolute value of 
+% ~\holdinginserts~ that ~lineno.sty~ finds at the end of a newly 
+% typeset paragraph---now done in subsection_\ref{ss:calls}
+% (~\linenumberpar~). 
+% The former ~\LineNoHoldInsertsTest~ has been filled into here. 
+%% ---`3' is replaced by ~\thr@@~ for a while. ~\thr@@~ is 
+%% useful practice since plain \TeX, but Stephan may have been 
+%% wise in suspecting that \LaTeX\ once could forsake ~\thr@@~. 
+%% The same holds for ~\@M=10000~. 
+% Note: when the following code is invoked, we have 
+% ~\if@tempswa~_ =_~\iftrue~. 
+% WARNING: I am still not sure whether the present code is good 
+% for cooperating with other packages that use ~\holdinginserts~. 
+
+\def\LineNoLaTeXOutput{% 
+  \ifnum \holdinginserts=\thr@@   % v4.33 without \@tempswafalse
+    \global\holdinginserts-\thr@@ 
+    \unvbox\@cclv 
+    \ifnum \outputpenalty=\@M \else \penalty\outputpenalty \fi 
+  \else
+    \if@twocolumn \let\@makecol\@LN@makecol \fi
+    \the\@LN@output % finally following David Kastrup's advice. 
+    \ifnum \holdinginserts=-\thr@@ 
+      \global\holdinginserts\thr@@ \fi 
+  \fi
+}
+
+% \textit{More on dealing with output routines from other 
+%         packages:} 
+% Since ~lineno.sty~'s output routine is called at least once 
+% for each output line, I think it should be in \TeX's 
+% original ~\output~, while output routines dealing with 
+% building pages and with floats etc.\ should be filled into 
+% registers addressed by ~\output~ after ~\newtoks\output~. 
+% Therefore                                                  \begin{enumerate}
+%                                                                        \item 
+%   ~tameflts.sty~ should be loaded \emph{after} ~lineno.sty~; 
+%                                                                        \item 
+%   if a class changes ~\output~ (APS journal class revtex4, 
+%   e.g.), ~lineno.sty~ should be loaded by ~\RequirePackage~ 
+%   [here presumably following some options in 
+%   brackets]~{lineno}~ \emph{preceding} ~\documentclass~. 
+%                                                                        \item 
+%   If you actually maintain such a class, please consider 
+%   loading ~lineno.sty~ on some draft option. The bunch of 
+%   lineno's package options may be a problem, but perhaps the 
+%   purpose of your class is offering only very few of lineno's 
+%   options anyway, maybe just one. 
+%                                                              \end{enumerate} 
+% The latter may also be needed with classes that don't follow 
+% David Kastrup's rule on changing ~\output~. 
+% 
+%                                                                \subsection{%
+%               \scs{MakeLineNo}: Actually attach line number 
+%                                                       \unskip}\label{ss:MLN} 
+% 
+% We have to return all the page to the current page, and
+% add a box with the line number, without adding
+% breakpoints, glue or space.  The depth of our line number
+% should be equal to the previous depth of the page, in
+% case the page breaks here,  and the box has to be moved up
+% by that depth.  
+%
+% The ~\interlinepenalty~ comes after the ~\vadjust~ from a
+% ~\linelabel~,  so we increment the line number \emph{after}
+% printing it. The macro ~\makeLineNumber~ produces the
+% text of the line number, see section \ref{appearance}.
+% 
+% (UL)                        I needed a while to understand 
+% the sentence on incrementing. Correctly: writing the 
+% ~\newlabel~ to the .aux file is triggered by the signal 
+% penalty that ~\end@float~ inserts via ~\vadjust~. 
+% However, this could be changed by our new ~\PostponeVadjust~. 
+% After ~\c@linenumber~ has been introduced as a \LaTeX\ 
+% counter, it might be preferable that it behaved like standard 
+% \LaTeX\ counters which are incremented shortly before printing. 
+% But this may be of little practical relevance in this case, 
+% as ~\c@linenumber~ is driven in a very non-standard 
+% way.---However still, this behaviour of ~\c@linenumber~ 
+% generates a problem with our ~edtable.sty~. 
+%% \unskip---Before, 
+%% I thought that Stephan had reported his reasoning incorrectly 
+%% and rather did this because of his ~\resetlinenumber~ which 
+%% initializes ~\c@linenumber~ to 1 instead of 0---the latter is 
+%% usual with \LaTeX\ counters. Cf._additional comment at 
+%% ~\resetlinenumber~. 
+% (/UL). 
+%
+% Finally we put in the natural ~\interlinepenalty~, except
+% after the last line. 
+%
+% (New v3.10) Frank Mittelbach points out that box255 may be 
+% less deep than the last box inside, so he proposes to 
+% measure the page depth with ~\boxmaxdepth=\maxdimen~.
+% (/New v3.10)
+% 
+% (UL, New v4.00)               We also resume the matter of 
+% ~\vadjust~ items that was started in section_\ref{ss:output}. 
+% 
+% \TeX\ puts only nonzero interline 
+% penalties into the vertical list (\TeX book p._105), while 
+% ~lineno.sty~ formerly replaced the signal interline penalty by 
+% something closing with an explicit penalty of the value that 
+% the interline penalty would have without ~lineno.sty~. 
+% This is usually 0. Now, explicit vertical penalties can be 
+% very nasty with respect to ~\nopagebreak~, e.g., a low (even 
+% positive) ~\widowpenalty~ may force a widow where you 
+% explicitly tried to forbid it by ~\nopagebreak~ 
+% (see explanation soon below). 
+% The ~\nopagebreak~ we create here would never work if all 
+% those zero penalties were present.---On 
+% the other hand, we cannot just omit Stephan's zero penalties, 
+% because \TeX\ puts a penalty of 10000 after what ~lineno.sty~ 
+% inserts (\TeX book p._125). This penalty must be overridden 
+% to allow page breaks between ordinary lines. To revive 
+% ~\nopagebreak~, we therefore replace those zero (or low) 
+% penalties by penalties that the user demanded by 
+% ~\nopagebreak~.---This mechanism is not perfect and does not 
+% exactly restore the original \LaTeX\ working of ~\pagebreak~ 
+% and ~\nopagebreak~. Viz., if there are several vertical 
+% penalties after a line which were produced by closely sitting 
+% ~\[no]pagebreak~s, without ~lineno.sty~ the lowest penalty would 
+% be effective (cf._\TeX book exercise_14.10). Our mechanism, by 
+% contrast, chooses the \emph{last} user-set penalty of the line 
+% as the effective one. It would not be very difficult to come 
+% more close to the original mechanism, but until someone urges 
+% us we will cling to the present simple way. You may consider an 
+% advantage of the difference between our mechanism and the 
+% original one that the user here can actually override low 
+% penalties by ~\nopagebreak~, which may be what a lay \LaTeX\ 
+% user would expect. 
+%% ---Zero glue would do instead of zero 
+%% penalty! This could make things easier. Maybe next time. 
+%% <- v4.4: No, problem with column depth. 
+% (/UL, /New v4.00) 
+
+\def\MakeLineNo{%
+   \@LN@maybe@normalLineNumber                        % v4.31 
+   \boxmaxdepth\maxdimen\setbox\z@\vbox{\unvbox\@cclv}%
+   \@tempdima\dp\z@ \unvbox\z@
+   \sbox\@tempboxa{\hb@xt@\z@{\makeLineNumber}}%
+%% 
+% (New v4.00) Previously, 
+%                                                  \begin{old}\begin{verbatim}
+% %    \stepcounter{linenumber}%
+% \end{verbatim}
+%                                                                    \end{old}
+%%                                         %% TODO: Still first `\begin{old}'?
+% followed. (Of course, there was no 
+% comment mark; I put it there to make 
+% reading the actual code easy.) 
+% 
+% (New v4.22: improved) Why not just 
+%   \[~\global\advance\c@linenumber\@ne~?\]
+% ~\stepcounter~ additionally resets ``subordinate'' 
+% counters, but which could these (usefully) be? 
+% Again, may be column counters with ~edtable.sty~!? 
+% 
+% But then, our ~edtable.sty~ and its ~longtable~ option 
+% should use it as well. So use a shorthand supporting 
+% uniformity. You can even use it as a hook for choosing 
+% ~\global\advance\c@linenumber\@ne~ instead of our choice. 
+% (/New v4.22) 
+%% 
+   \stepLineNumber
+%% 
+%  (New v4.4)   Now 
+%% 
+   \ht\@tempboxa\z@ \@LN@depthbox 
+%% 
+% appends the box containing the line number without changing 
+% ~\prevdepth~---see end of section. 
+% Now is the time for inserting the $\dots$ (/New v4.4) 
+%% The line number has now been placed (it may be invisible 
+%% depending on the modulo feature), so 
+%% we can insert the 
+% ~\vadjust~ items. We cannot do this much later, because 
+% their right place is above the artificial interline 
+% penalty which Stephan's code will soon insert 
+% (cf._\TeX book p._105). The next command is just ~\relax~ 
+% if no ~\vadjust~ items have been accumulated for the 
+% current line. Otherwise it is a list macro inserting 
+% the ~\vadjust~ items and finally resetting itself. 
+% (This is made in section_\ref{ss:PVadj} below.)
+% If the final item is a penalty, it is stored so it can 
+% compete with other things about page breaking. 
+%% 
+   \@LN@do@vadjusts 
+   \count@\lastpenalty 
+%% 
+% At this place, 
+%                                                  \begin{old}\begin{verbatim}
+% %    \ifnum\outputpenalty=-\linenopenaltypar\else
+% \end{verbatim}
+%                                                                    \end{old}
+% originally followed. We need something \emph{before} the 
+% ~\else~: 
+%% 
+   \ifnum\outputpenalty=-\linenopenaltypar 
+     \ifnum\count@=\z@ \else 
+%% 
+% So final ~\pagebreak[0]~ or ~\nopagebreak[0]~ has no 
+% effect---but this will make a difference after headings only, 
+% where nobody should place such a thing anyway. 
+%% 
+       \xdef\@LN@parpgbrk{% 
+         \penalty\the\count@
+         \global\let\noexpand\@LN@parpgbrk
+                      \noexpand\@LN@screenoff@pen}% v4.4 
+%% 
+% That penalty will replace former ~\kern\z@~ in 
+% ~\linenumberpar~, see subsection_\ref{ss:calls}.---A
+% few days earlier, I tried to send just a penalty value. 
+% However, the ~\kern\z@~ in ~\linenumberpar~ is crucial, 
+% as I then found out. See below.---The final penalty is 
+% repeated, but this does no harm. (It would not be very 
+% difficult to avoid the repeating, but it may even be 
+% less efficient.) It may be repeated due to the previous 
+% ~\xdef~, but it may be repeated as well below in the 
+% present macro where artificial interline penalty is to 
+% be overridden.
+%% 
+     \fi
+   \else
+%% 
+% (/New v4.00) 
+%%                                        Corrected code alignment with v4.11. 
+     \@tempcnta\outputpenalty
+     \advance\@tempcnta -\linenopenalty
+%% 
+% (New v4.00) 
+%                                                  \begin{old}\begin{verbatim}
+% %        \penalty\@tempcnta
+% \end{verbatim}
+%                                                                    \end{old}
+% followed previously. To give ~\nopagebreak~ a chance, 
+% we do 
+%%                                        Corrected code alignment with v4.11. 
+     \penalty \ifnum\count@<\@tempcnta \@tempcnta \else \count@ \fi 
+%% 
+% instead.---In ~linenox0.sty~, the ~\else~ thing once was omitted. 
+% Sergei Mariev's complaint (thanks!) showed that it is vital 
+% (see comment before ~\MakeLineNo~). 
+% The remaining ~\fi~ from previous package version closes the 
+% ~\ifnum\outputpenalty~\dots 
+% (/New v4.00) 
+%% 
+   \fi
+   }
+
+% (New v4.00) 
+
+\newcommand\stepLineNumber{\stepcounter{linenumber}} 
+
+% For reason, see use above. (/New v4.00) 
+%%                                   %% TODO v4.4+: ~\newcommand~ more often!? 
+% 
+% (New v4.4)   The depth preserving trick is drawn here from 
+% ~\MakeLineNo~ because it will be used again in 
+% section_\ref{ss:calls}.
+
+\def\@LN@depthbox{% 
+  \dp\@tempboxa=\@tempdima
+  \nointerlineskip \kern-\@tempdima \box\@tempboxa} 
+
+% (/New v4.4) 
+% 
+%                                                                   \section{%
+%               Control line numbering 
+%                                                                     \unskip}
+%                                                                \subsection{%
+%                  Inserting \scs{output} calls           %% own subsec. v4.4. 
+%                                                     \unskip}\label{ss:calls}
+% The line numbering is controlled via ~\par~.  \LaTeX\
+% saved the \TeX-primitive ~\par~ in ~\@@par~.  We push it
+% one level further out, and redefine ~\@@par~ to insert
+% the ~\interlinepenalty~ needed to trigger the
+% line numbering. And we need to allow pagebreaks after a
+% paragraph. 
+% 
+% New (2.05beta): the prevgraf test.  A paragraph that ends with a
+% displayed equation, a ~\noindent\par~ or ~wrapfig.sty~ produce empty
+% paragraphs. These should not get a spurious line number via
+% ~\linenopenaltypar~. 
+
+\let\@@@par\@@par
+\newcount\linenoprevgraf
+
+% (UL)                          And needs ~\linenoprevgraf~ 
+% to be a counter? Perhaps there may be a paragraph having 
+% thousands of lines, so ~\mathchardef~ doesn't suffice (really??). 
+%%
+%%                      %% TODO: limitations of lines per paragraph elsewhere? 
+%%                      %% Signal penalties, e.g.!? ~\deadcycles~!? 
+%%
+% A macro ending on ~\relax~ might suffice, but would be 
+% somewhat slow. I think I will use ~\mathchardef~ next time. 
+% Or has any user used ~\linenoprevgraf~? (/UL) 
+
+%% v4.33: changed code alignment for better understanding. 
+\def\linenumberpar{% 
+  \ifvmode \@@@par \else 
+    \ifinner \@@@par \else
+      \xdef\@LN@outer@holdins{\the\holdinginserts}% v4.2 
+      \advance \interlinepenalty \linenopenalty
+      \linenoprevgraf \prevgraf
+      \global \holdinginserts \thr@@ 
+      \@@@par
+      \ifnum\prevgraf>\linenoprevgraf
+        \penalty-\linenopenaltypar
+      \fi
+%% 
+% (New v4.00) 
+%                                                  \begin{old}\begin{verbatim}
+% %          \kern\z@ 
+% \end{verbatim}
+%                                                                    \end{old}
+% was here previously. What for? 
+% According to \TeX book p._125, Stephan's 
+% interline penalty is changed into 10000. At the end of a 
+% paragraph, the ~\parskip~ would follow that penalty of 10000, 
+% so there could be a page break neither at the 
+% ~\parskip~ nor at the ~\baselineskip~ (\TeX book p._110)---so 
+% there could never be a page break between two paragraphs. 
+% So something must screen off the 10000 penalty. 
+% Indeed, the ~\kern~ is a place to break. 
+% (Stephan once knew this: see `allow pagebreaks' above.)
+% 
+% Formerly, I tried to replace ~\kern\z@~ by 
+%                                                  \begin{old}\begin{verbatim}
+% %         \penalty\@LN@parpgpen\relax 
+% \end{verbatim}
+%                                                                    \end{old}
+% ---but this allows a page break after heading. So: 
+%% 
+      \@LN@parpgbrk 
+%% 
+%% After heading, ~\kern\z@~ resulting from previous line 
+%% (see below) is followed by ~\write~ or ~\penalty10000~, 
+%% so causes no page break. 
+% 
+% These and similar changes were formerly done by ~linenox1.sty~. 
+% (/New v4.00) 
+% 
+% (New v4.4) 
+% A ~\belowdisplayskip~ may precede the previous when the paragraph 
+% ends on a display-math; or there may be a ~\topsep~ from a list, etc. 
+% ~\addvspace~ couldn't take account for it with ~\kern\z@~ 
+% here. v4.32 therefore moved the space down -- with at least two 
+% bad consequences. 
+% Moreover, David Josef Dev observes that ~\kern\z@~ may 
+% inappropriately yield column depth 0pt. 
+% For these reasons, we introduce ~\@LN@screenoff@pen~ below. 
+% (/New v4.4) 
+%% 
+      \global\holdinginserts\@LN@outer@holdins % v4.2
+      \advance\interlinepenalty -\linenopenalty
+    \fi     % from \ifinner ... \else 
+  \fi}      % from \ifvmode ... \else 
+
+% (New v4.00, v4.4) Initialize ~\@LN@parpgbrk~, accounting 
+% for earlier space and for appropriate columndepth. 
+% We use former ~\MakeLineNo~'s depth-preverving trick 
+% ~\@LN@depthbox~ again: 
+
+\def\@LN@screenoff@pen{% 
+  \ifdim\lastskip=\z@ 
+    \@tempdima\prevdepth \setbox\@tempboxa\null 
+    \@LN@depthbox                           \fi}
+
+\global\let\@LN@parpgbrk\@LN@screenoff@pen 
+
+% (/New v4.4, v4.00) 
+%                                                                \subsection{%
+%                  Turning on/off                         %% own subsec. v4.4.
+%                                                     \unskip}\label{ss:OnOff}
+% The basic commands to enable and disable line numbers.
+% ~\@par~ and ~\par~ are only touched, when they are ~\let~ 
+% to ~\@@@par~/~\linenumberpar~.  The line number may be
+% reset to 1 with the star-form, or set by an optional
+% argument ~[~<number>~]~. 
+% 
+% (New v4.00)        We add ~\ifLineNumbers~ etc.\ since 
+% a number of our new adjustments need to know whether 
+% linenumbering is active. This just provides a kind of 
+% shorthand for ~\ifx\@@par\linenumberpar~; moreover it is 
+% more stable: who knows what may happen to ~\@@par~?---A 
+% caveat: ~\ifLineNumbers~ may be wrong. E.g., it may be 
+% ~\iffalse~ where it acts, while a ~\linenumbers~ a few 
+% lines below---in the same paragraph---brings about that 
+% the line where the ~\ifLineNumbers~ appears gets a 
+% marginal number. 
+%%                                      Better implementation suggested below. 
+%% 
+% (New v4.3)        Just noticed: Such tricks have been 
+% disallowed with v4.11, see subsections_\ref{ss:LL} 
+% and_\ref{ss:OnOff}.---Moreover, the switching between
+% meanings of ~\linelabel~ for a possible error message 
+% as of v4.11 is removed. Speed is difficult to esteem 
+% and also depends on applications. Just use the most 
+% simple code you find.                      (/New v4.3) 
+
+\newif\ifLineNumbers \LineNumbersfalse 
+
+% (/New v4.00) 
+
+\def\linenumbers{% 
+     \LineNumberstrue                            % v4.00 
+     \xdef\@LN@outer@holdins{\the\holdinginserts}% v4.3 
+%%
+% (New v4.3) The previous line is for ~{linenomath}~ 
+% in a first numbered paragraph.         (/New v4.3) 
+%% 
+     \let\@@par\linenumberpar
+ %      \let\linelabel\@LN@linelabel % v4.11, removed v4.3 
+     \ifx\@par\@@@par\let\@par\linenumberpar\fi
+     \ifx\par\@@@par\let\par\linenumberpar\fi
+     \@LN@maybe@moduloresume         % v4.31 
+     \@ifnextchar[{\resetlinenumber}%]
+                 {\@ifstar{\resetlinenumber}{}}%
+     }
+
+\def\nolinenumbers{% 
+  \LineNumbersfalse                              % v4.00
+  \let\@@par\@@@par
+ %   \let\linelabel\@LN@LLerror      % v4.11, removed v4.3 
+  \ifx\@par\linenumberpar\let\@par\@@@par\fi
+  \ifx\par\linenumberpar\let\par\@@@par\fi
+  }
+
+% (New v4.00)               Moreover, it is useful to switch to 
+% ~\nolinenumbers~ in ~\@arrayparboxrestore~. We postpone this 
+% to section_\ref{ss:ReDef} where we'll have an appending macro 
+% for doing this.                                  (/New v4.00) 
+% 
+% What happens with a display math?  Since ~\par~ is not executed,
+% when breaking the lines before a display, they will not get
+% line numbers.  Sorry, but I do not dare to change
+% ~\interlinepenalty~ globally, nor do I want to redefine
+% the display math environments here.
+%   \begin{displaymath}
+%                       display \ math
+%   \end{displaymath}
+% See the subsection below, for a wrapper environment to make
+% it work.  But that requires to wrap each and every display
+% in your \LaTeX\ source %%.
+%% v4.3: 
+% (see option ~displaymath~ in subsections_\ref{ss:v3opts} 
+% and_\ref{ss:display} for some relief [UL]). 
+%
+% The next two commands are provided to turn on line
+% numbering in a specific mode. Please note the difference:
+% for pagewise numbering, ~\linenumbers~ comes first to
+% inhibit it from seeing optional arguments, since
+% re-/presetting the counter is useless. 
+
+\def\pagewiselinenumbers{\linenumbers\setpagewiselinenumbers}
+\def\runninglinenumbers{\setrunninglinenumbers\linenumbers}
+
+% Finally, it is a \LaTeX\ style, so we provide for the use
+% of environments, including the suppression of the
+% following paragraph's indentation.
+% 
+%% TODO: v4.4+: 
+% (UL)                                I am drawing the following 
+% private thoughts of Stephan's to publicity so that others may 
+% think about them---or to remind myself of them in an efficient 
+% way.                                                     (/UL) 
+%% UL changed `%%%' to `% %' below. 
+%% TODO: add \par to \linenumbers, if called from an environment. %% v4.3 
+%% ToDO: add an \@endpe hack if \linenumbers are turned on
+%                                                  \begin{old}\begin{verbatim} 
+% % TO DO: add \par to \linenumbers, if called from an environment.
+% % To DO: add an \@endpe hack if \linenumbers are turned on
+% %        in horizontal mode. {\par\parskip\z@\noindent} or
+% %        something.
+% \end{verbatim}
+%                                                                    \end{old} 
+% (UL)     However, I rather think that ~\linenumbers~ and        %% v4.31 
+% ~\nolinenumbers~ should execute a ~\par~ already. (Then the 
+% ~\par~s in the following definitions should be removed.) (/UL) 
+
+\@namedef{linenumbers*}{\par\linenumbers*}
+\@namedef{runninglinenumbers*}{\par\runninglinenumbers*}
+
+\def\endlinenumbers{\par\@endpetrue}
+\let\endrunninglinenumbers\endlinenumbers
+\let\endpagewiselinenumbers\endlinenumbers
+\expandafter\let\csname endlinenumbers*\endcsname\endlinenumbers
+\expandafter\let\csname endrunninglinenumbers*\endcsname\endlinenumbers
+\let\endnolinenumbers\endlinenumbers
+
+%
+%                                                                \subsection{%
+%                  Display math
+%                                                        \unskip}\label{ss:DM}
+%
+% Now we tackle the problem to get display math working.  
+% There are different options.
+%                                                      \begin{enumerate}\item[
+% 1.]  Precede every display math with a ~\par~.  
+%      Not too good.
+%                                                                       \item[
+% 2.]  Change ~\interlinepenalty~ and associates globally.  
+%      Unstable.
+%                                                                       \item[
+% 3.]  Wrap each display math with a ~{linenomath}~  
+%      environment. 
+%                                                              \end{enumerate}
+% We'll go for option 3.  See if it works:  
+% \begin{linenomath}
+%   \begin{equation}
+%      display \ math
+%   \end{equation}
+% \end{linenomath}
+% The star form ~{linenomath*}~ should also number the lines
+% of the display itself,
+% \begin{linenomath*}
+%   \begin{eqnarray}
+%     multi   && line \\
+%     display && math \\
+%     & 
+%     \begin{array}{c}
+%       with \\
+%       array
+%     \end{array}
+%     &
+%   \end{eqnarray}
+% \end{linenomath*}
+% including multline displays.
+% 
+% First, here are two macros to turn
+% on linenumbering on paragraphs preceeding displays, with
+% numbering the lines of the display itself, or without.
+% The ~\ifx..~ tests if line numbering is turned on.  It
+% does not harm to add these wrappers in sections that are
+% not numbered.  Nor does it harm to wrap a display
+% twice, e.q, in case you have some ~{equation}~s wrapped
+% explicitely, and later you redefine ~\equation~ to do it
+% automatically. 
+% 
+% (New v4.3)  To avoid the spurious line number above a 
+% display in vmode, I insert ~\ifhmode~.       (/New v4.3) 
+
+\newcommand\linenomathNonumbers{%
+  \ifLineNumbers 
+%%  \ifx\@@par\@@@par\else 
+    \ifnum\interlinepenalty>-\linenopenaltypar
+      \global\holdinginserts\thr@@ 
+      \advance\interlinepenalty \linenopenalty
+     \ifhmode                                   % v4.3 
+      \advance\predisplaypenalty \linenopenalty
+     \fi 
+    \fi
+  \fi
+  \ignorespaces
+  }
+
+\newcommand\linenomathWithnumbers{%
+  \ifLineNumbers 
+%%  \ifx\@@par\@@@par\else
+    \ifnum\interlinepenalty>-\linenopenaltypar
+      \global\holdinginserts\thr@@ 
+      \advance\interlinepenalty \linenopenalty
+     \ifhmode                                   % v4.3 
+      \advance\predisplaypenalty \linenopenalty
+     \fi 
+      \advance\postdisplaypenalty \linenopenalty
+      \advance\interdisplaylinepenalty \linenopenalty
+    \fi
+  \fi
+  \ignorespaces
+  }
+
+% The ~{linenomath}~ environment has two forms, with and
+% without a star.  The following two macros define the
+% environment, where the stared/non-stared form does/doesn't number the
+% lines of the display or vice versa.
+
+\newcommand\linenumberdisplaymath{%
+  \def\linenomath{\linenomathWithnumbers}%
+  \@namedef{linenomath*}{\linenomathNonumbers}%
+  }
+
+\newcommand\nolinenumberdisplaymath{%
+  \def\linenomath{\linenomathNonumbers}%
+  \@namedef{linenomath*}{\linenomathWithnumbers}%
+  }
+
+\def\endlinenomath{% 
+  \ifLineNumbers                            % v4.3 
+   \global\holdinginserts\@LN@outer@holdins % v4.21 
+  \fi 
+   \global % v4.21 support for LaTeX2e earlier than 1996/07/26. 
+   \@ignoretrue
+}
+\expandafter\let\csname endlinenomath*\endcsname\endlinenomath
+
+% The default is not to number the lines of a display.  But
+% the package option ~mathlines~ may be used to switch
+% that behavior.
+
+\nolinenumberdisplaymath
+
+%
+%                                                                   \section{%
+%               Line number references
+%                                                      \unskip}\label{s:LNref} 
+%                                                                \subsection{% 
+%                  Internals                              %% New subsec. v4.3. 
+%                                                                     \unskip}
+% The only way to get a label to a line number in a
+% paragraph is to ask the output routine to mark it.
+%
+% (New v4.00) The following two paragraphs don't hold any 
+% longer, see below. (/New v4.00) 
+%                                                  \begin{old}\begin{verbatim}
+% % We use the marginpar mechanism to hook to ~\output~ for a
+% % second time.  Marginpars are floats with number $-1$, we
+% % fake marginpars with No $-2$. Originally, every negative
+% % numbered float was considered to be a marginpar.
+% % 
+% % The float box number ~\@currbox~ is used to transfer the
+% % label name in a macro called ~\@LNL@~<box-number>.
+% \end{verbatim}
+%                                                                    \end{old}
+% A ~\newlabel~ is written to the aux-file.  The reference
+% is to ~\theLineNumber~, \emph{not} ~\thelinenumber~.
+% This allows to hook in, as done below for pagewise line
+% numbering. 
+%
+% (New v3.03) The ~\@LN@ExtraLabelItems~ are added for a hook
+% to keep packages like ~{hyperref}~ happy.      (/New v3.03)
+% 
+% (New v4.00) 
+% We fire the ~\marginpar~ mechanism, so we leave \LaTeX's 
+% ~\@addmarginpar~ untouched. 
+%                                                  \begin{old}\begin{verbatim}
+% % \let\@LN@addmarginpar\@addmarginpar
+% % \def\@addmarginpar{%
+% %    \ifnum\count\@currbox>-2\relax
+% %      \expandafter\@LN@addmarginpar
+% %    \else
+% %      \@cons\@freelist\@currbox
+% %      \protected@write\@auxout{}{%
+% %          \string\newlabel
+% %             {\csname @LNL@\the\@currbox\endcsname}%
+% %             {{\theLineNumber}{\thepage}\@LN@ExtraLabelItems}}%
+% %    \fi}
+% \end{verbatim}
+%                                                                    \end{old}
+% OK, we keep Stephan's ~\@LN@ExtraLabelItems~: 
+% (/New v4.00) 
+
+\let\@LN@ExtraLabelItems\@empty
+
+% (New v4.00) 
+% We imitate the ~\marginpar~ mechanism without using the 
+% ~\@freelist~ boxes. ~\linelabel~ will indeed place a signal 
+% penalty (~\@Mllbcodepen~, new), and it will put a label into 
+% some list macro ~\@LN@labellist~. A new part of the output 
+% routine will take the labels from the list and will write 
+% ~\newlabel~s to the .aux file. 
+% 
+% The following is a version of \LaTeX's ~\@xnext~.
+
+\def\@LN@xnext#1\@lt#2\@@#3#4{\def#3{#1}\gdef#4{#2}}
+
+% This takes an item ~#1~ from a list ~#4~ into ~#3~; 
+% to be used as ~\expandafter\@LN@xnext#4\@@#3#4~. 
+% Our lists use ~\@lt~ after each item for separating. 
+% Indeed, there will be another list macro which can 
+% appear as argument ~#4~, this will be used for moving 
+% ~\vadjust~ items (section_\ref{ss:PVadj}). 
+% The list for ~\linelabel~s is the following: 
+
+\global\let\@LN@labellist\@empty 
+
+% The next is the new part of the output routine writing the 
+% ~\newlabel~ to the .aux file. Since it is no real page output, 
+% the page is put back to top of the main vertical list. 
+
+\def\WriteLineNo{% 
+  \unvbox\@cclv 
+  \expandafter \@LN@xnext \@LN@labellist \@@ 
+                          \@LN@label \@LN@labellist 
+  \protected@write\@auxout{}{\string\newlabel{\@LN@label}% 
+         {{\theLineNumber}{\thepage}\@LN@ExtraLabelItems}}% 
+}
+
+% (/New v4.00)
+% 
+%                                                                \subsection{%
+%                  The \scs{linelabel} command
+%                                                        \unskip}\label{ss:LL}
+% To refer to a place in line ~\ref{~<foo>~}~ at page
+% ~\pageref{~<foo>~}~ you place a ~\linelabel{~<foo>~}~ at
+% that place.
+%
+%                   \linelabel{demo}
+%                   \marginpar{\tiny\raggedright
+%                       See if it works: This paragraph
+%                       starts on page \pageref{demo}, line
+%                       \ref{demo}.  
+%                   \unskip}%
+% (New v4.11) 
+%                                                  \begin{old}\begin{verbatim}
+% % If you use this command outside a ~\linenumbers~
+% % paragraph, you will get references to some bogus
+% % line numbers, sorry.  But we don't disable the command,
+% % because only the ~\par~ at the end of a paragraph  may
+% % decide whether to print line numbers on this paragraph
+% % or not.  A ~\linelabel~ may legally appear earlier than
+% % ~\linenumbers~.
+% \end{verbatim}
+%                                                                    \end{old} 
+% This trick is better not allowed---see subsections_\ref{ss:LL} 
+% and_\ref{ss:OnOff}.
+% (/New v4.11)
+%
+% ~\linelabel~ 
+%                                                  \begin{old}\begin{verbatim}
+% %, via a fake float number $-2$, %% new mechanism v4.00
+% \end{verbatim}
+%                                                                    \end{old}
+% puts a
+% ~\penalty~ into a ~\vadjust~, which triggers the
+% pagebuilder after putting the current line to the main
+% vertical list.  A ~\write~ is placed on the main vertical
+% list, which prints a reference to the current value of
+% ~\thelinenumber~ and ~\thepage~ at the time of the
+% ~\shipout~.
+%
+% A ~\linelabel~ is allowed only in outer horizontal mode.
+% In outer vertical mode we start a paragraph, and ignore
+% trailing spaces (by fooling ~\@esphack~).
+% 
+% (New v4.00) We aim at relaxing the previous condition. 
+% We insert a hook ~\@LN@mathhook~ and a shorthand 
+% ~\@LN@postlabel~ to support the ~mathrefs~ option which 
+% allows ~\linelabel~ in math mode. 
+%
+% The next paragraph is no longer valid. 
+%                                                  \begin{old}\begin{verbatim}
+% % The argument of ~\linelabel~ is put into a macro with a
+% % name derived from the number of the allocated float box.
+% % Much of the rest is dummy float setup.
+% \end{verbatim}
+%                                                                    \end{old}
+% (/New v4.00) 
+%
+% (New v4.11) 
+%                                                  \begin{old}\begin{verbatim} 
+% % \def\linelabel#1{%
+% \end{verbatim}
+%                                                                    \end{old} 
+% I forgot ~\linenumbers~ today, costed me hours or so. 
+
+\def\@LN@LLerror{\PackageError{lineno}{% 
+  \string\linelabel\space without \string\linenumbers}{% 
+  Just see documentation. (New feature v4.11)}\@gobble}
+
+% (New v4.3)         Here some things have changed for v4.3. 
+% The previous ~#1~ has been replaced by ~\@gobble~. 
+% Ensuing, the ~\linelabel~ error message is re-implemented. 
+% I find it difficult to compare efficiency of slight 
+% alternatives---so choose an easy one. Explicit switching 
+% in ~\linenumbers~ and ~\nolinenumbers~ is an additional 
+% command that may better be avoided. 
+
+\newcommand\linelabel{% 
+  \ifLineNumbers \expandafter \@LN@linelabel 
+  \else          \expandafter \@LN@LLerror   \fi}
+%%\let\linelabel\@LN@LLerror 
+
+\gdef\@LN@linelabel#1{% 
+%% 
+% ~\gdef~ for hyperref ``symbolically''. (/New v4.11) 
+%% 
+  \ifx\protect\@typeset@protect 
+%% 
+% $\gets$ And a ~\linelabel~ should never be replicated in a 
+% mark or a TOC entry.                           (/New v4.3) 
+%% 
+   \ifvmode
+       \ifinner \else 
+          \leavevmode \@bsphack \@savsk\p@
+       \fi
+   \else
+       \@bsphack
+   \fi
+   \ifhmode
+     \ifinner
+       \@parmoderr
+     \else
+%% 
+% (New v4.00) 
+%% 
+       \@LN@postlabel{#1}% 
+%                                                  \begin{old}\begin{verbatim}
+% %        \@floatpenalty -\@Mii
+% %        \@next\@currbox\@freelist
+% %            {\global\count\@currbox-2%
+% %             \expandafter\gdef\csname @LNL@\the\@currbox\endcsname{#1}}%
+% %            {\@floatpenalty\z@ \@fltovf \def\@currbox{\@tempboxa}}%
+% %        \begingroup
+% %            \setbox\@currbox \color@vbox \vbox \bgroup \end@float
+% %        \endgroup
+% %        \@ignorefalse \@esphack
+% \end{verbatim}
+%                                                                    \end{old} 
+% (/New v4.00) 
+%% 
+       \@esphack 
+%% 
+% (New v4.00) 
+% The ~\@ignorefalse~ was appropriate before because the 
+% ~\@Esphack~ in ~\end@float~ set ~\@ignoretrue~. Cf._\LaTeX's 
+% ~\@xympar~. (/New v4.00) 
+%% 
+     \fi
+   \else
+%% 
+% (New v4.00) 
+%% 
+     \@LN@mathhook{#1}%
+%                                                  \begin{old}\begin{verbatim}
+% %     \@parmoderr
+% \end{verbatim}
+%                                                                    \end{old} 
+% Instead of complaining, you may just do your job. 
+% (/New v4.00) 
+%% 
+   \fi
+  \fi 
+   }
+
+% (New v4.00)   The shorthand just does what happened 
+% with ~linenox0.sty~ before ~ednmath0.sty~ (New v4.1: 
+% now ~mathrefs~ option) appeared, and 
+% the hook is initialized to serve the same purpose. 
+% So errors come just where Stephan had built them in, 
+% and this is just the \LaTeX\ ~\marginpar~ behaviour. 
+
+\def\@LN@postlabel#1{\g@addto@macro\@LN@labellist{#1\@lt}%
+       \vadjust{\penalty-\@Mllbcodepen}} 
+\def\@LN@mathhook#1{\@parmoderr}
+
+% (/New v4.00) 
+% 
+%                                                        \modulolinenumbers[3] 
+%                                                          \firstlinenumber{1}
+%                                                                   \section{%
+%               The appearance of the line numbers
+%                                                   \unskip}\label{appearance}
+%                                                                \subsection{%
+%                  Basic code                             %% own subsec. v4.2. 
+%                                                                     \unskip}
+% 
+% The line numbers are set as ~\tiny\sffamily\arabic{linenumber}~,
+% $10pt$ left of the text.  With options to place it
+% right of the text, or . . .
+%
+%      . . . here are the hooks:
+
+\def\makeLineNumberLeft{% 
+  \hss\linenumberfont\LineNumber\hskip\linenumbersep}
+
+\def\makeLineNumberRight{% 
+  \linenumberfont\hskip\linenumbersep\hskip\columnwidth
+  \hb@xt@\linenumberwidth{\hss\LineNumber}\hss}
+
+\def\linenumberfont{\normalfont\tiny\sffamily}
+
+\newdimen\linenumbersep
+\newdimen\linenumberwidth
+
+\linenumberwidth=10pt
+\linenumbersep=10pt
+
+% Margin switching requires ~pagewise~ numbering mode, but
+% choosing the left or right margin for the numbers always
+% works. 
+
+\def\switchlinenumbers{\@ifstar
+    {\let\makeLineNumberOdd\makeLineNumberRight
+     \let\makeLineNumberEven\makeLineNumberLeft}%
+    {\let\makeLineNumberOdd\makeLineNumberLeft
+     \let\makeLineNumberEven\makeLineNumberRight}%
+    }
+
+\def\setmakelinenumbers#1{\@ifstar
+  {\let\makeLineNumberRunning#1%
+   \let\makeLineNumberOdd#1%
+   \let\makeLineNumberEven#1}%
+  {\ifx\c@linenumber\c@runninglinenumber
+      \let\makeLineNumberRunning#1%
+   \else
+      \let\makeLineNumberOdd#1%
+      \let\makeLineNumberEven#1%
+   \fi}%
+  }
+
+\def\leftlinenumbers{\setmakelinenumbers\makeLineNumberLeft}
+\def\rightlinenumbers{\setmakelinenumbers\makeLineNumberRight}
+
+\leftlinenumbers*
+
+% ~\LineNumber~ is a hook which is used for the modulo stuff.
+% It is the command to use for the line number, when you
+% customize ~\makeLineNumber~.  Use ~\thelinenumber~ to
+% change the outfit of the digits.
+%
+%
+% We will implement two modes of operation:
+%                                                              \begin{itemize}
+% \item  numbers ~running~ through (parts of) the text
+% \item  ~pagewise~ numbers starting over with one on top of
+%        each page.
+%                                                                \end{itemize}
+% Both modes have their own count register, but only one is
+% allocated as a \LaTeX\ counter, with the attached
+% facilities serving both.
+
+\newcounter{linenumber}
+\newcount\c@pagewiselinenumber
+\let\c@runninglinenumber\c@linenumber
+
+% Only the running mode counter may be reset, or preset,
+% for individual paragraphs.  The pagewise counter must
+% give a unique anonymous number for each line.
+% 
+% (New v4.3)                  ~\newcounter{linenumber}~ 
+% was the only ~\newcounter~ in the whole package, and 
+% formerly I was near using ~\newcount~ instead. Yet 
+% ~\newcounter~ may be quite useful for ~\includeonly~. 
+% It also supports resetting ``subcounters'', but what 
+% could these be? Well, ~edtable~ might introduce a 
+% subcounter for columns. 
+% (Note that \LaTeX's setting commands would work with 
+% ~\newcount\c@linenumber~ already, apart from this. 
+% And perhaps sometimes ~\refstepcounter{linenumber}~ 
+% wouldn't work---cf._my discussion of ~\stepcounter~ in 
+% subsection_\ref{ss:MLN}, similarly ~\refstep...~ would 
+% be quite useless. 
+% Even the usual redefinitions of ~\thelinenumber~ would 
+% work. It is nice, on the other hand, that 
+% ~\thelinenumber~ is predefined here. \LaTeX's 
+% initialization of the value perhaps just serves making 
+% clear \LaTeX\ counters should always be changed 
+% globally.---Shortened and improved the discussion here.) 
+% (/New v4.3) 
+% 
+% (New v4.22) 
+% ~\c@linenumber~ usually is---globally---incremented by 
+% ~\stepcounter~ (at present), so resetting it locally would 
+% raise the save stack problem of \TeX book p._301, moreover 
+% it would be is useless, there is no hope of keeping the 
+% values local (but see subsection_\ref{ss:ILN}). So I insert 
+% ~\global~:        (/New v4.22) 
+
+\newcommand*\resetlinenumber[1][\@ne]{% 
+  \global                             % v4.22
+  \c@runninglinenumber#1\relax}
+
+% (New v4.00) 
+%                                                  \begin{old}\begin{verbatim}
+% % \newcommand\resetlinenumber[1][1]{\c@runninglinenumber#1}
+% \end{verbatim}
+%                                                                    \end{old}
+% Added ~\relax~, being quite sure that this does no harm 
+% and is quite important, as with ~\setcounter~ etc. 
+% I consider this a bug fix (although perhaps no user has 
+% ever had a problem with this).    (/New v4.00) 
+% 
+% (v4.22: I had made much fuss about resetting subordinate 
+% counters here---removed, somewhat postponed.)
+% 
+%% TODO v4.4+: 
+%% \newcommand*\resetlinenumber[1][\@ne]{% 
+%%   \ifx\c@linenumber\c@runninglinenumber 
+%%     \global\c@linenumber#1\relax
+%%     \global\advance\c@linenumber\m@ne 
+%%     \stepLineNumber 
+%%   \else 
+%%     \PackageError{lineno}%% Shorthand!? 
+%%       {You can't reset line number in pagewise mode}% 
+%%       {This should suffice.}% 
+%%   \fi 
+%% } 
+% 
+%                                                                \subsection{%
+%                  Running line numbers
+%                                                                     \unskip} 
+% 
+% Running mode is easy,  ~\LineNumber~ and ~\theLineNumber~
+% produce ~\thelinenumber~, which defaults to
+% ~\arabic{linenumber}~, using the ~\c@runninglinenumber~
+% counter.  This is the default mode of operation.
+
+\def\makeRunningLineNumber{\makeLineNumberRunning}
+
+\def\setrunninglinenumbers{%
+   \def\theLineNumber{\thelinenumber}%
+   \let\c@linenumber\c@runninglinenumber
+   \let\makeLineNumber\makeRunningLineNumber
+   }
+
+\setrunninglinenumbers\resetlinenumber
+
+%
+%                                                                \subsection{%
+%                  Pagewise line numbers
+%                                                        \unskip}\label{ss:PW} 
+% 
+% Difficult, if you think about it.  The number has to be
+% printed when there is no means to know on which page it
+% will end up,  except through the aux-file.  My solution  
+% is really expensive, but quite robust.  
+%
+% With version ~v2.00~ the hashsize requirements are
+% reduced, because we do not need one controlsequence for
+% each line any more.  But this costs some computation time
+% to find out on which page we are.
+%
+% ~\makeLineNumber~ gets a hook to log the line and page
+% number to the aux-file.  Another hook tries to find out
+% what the page offset is, and subtracts it from the counter
+% ~\c@linenumber~.  Additionally, the switch
+% ~\ifoddNumberedPage~ is set true for odd numbered pages,
+% false otherwise.
+
+\def\setpagewiselinenumbers{%
+   \let\theLineNumber\thePagewiseLineNumber
+   \let\c@linenumber\c@pagewiselinenumber
+   \let\makeLineNumber\makePagewiseLineNumber
+   }
+
+\def\makePagewiseLineNumber{\logtheLineNumber\getLineNumber
+  \ifoddNumberedPage
+     \makeLineNumberOdd
+  \else
+     \makeLineNumberEven
+  \fi
+  }
+
+% Each numbered line gives a line to the aux file
+%                                                                \begin{verse}
+%     ~\@LN{~<line>~}{~<page>~}~
+%                                                                  \end{verse}
+% very similar to the ~\newlabel~ business, except that we need
+% an arabic representation of the page number, not what
+% there might else be in ~\thepage~.
+
+\def\logtheLineNumber{\protected@write\@auxout{}{%
+%% 
+% (New v4.00) (UL)
+% As Daniel Doherty observed, the earlier line 
+%                                                  \begin{old}\begin{verbatim}
+% %    \string\@LN{\the\c@linenumber}{\noexpand\the\c@page}}}
+% \end{verbatim}
+%                                                                    \end{old}
+% here may lead into an infinite loop when the user resets 
+% the page number (think of ~\pagenumbering~, e.g.). 
+% Stephan and I brief\/ly discussed the matter and decided 
+% to introduce a ``physical''-page counter to which 
+% ~\logtheLineNumber~ refers. It was Stephan's idea to use 
+% ~\cl@page~ for reliably augmenting the ``physical''-page 
+% counter. However, this relies on the output routine once 
+% doing ~\stepcounter{page}~. Before Stephan's 
+% suggestion, I had thought of appending the stepping to 
+% \LaTeX's ~\@outputpage~.---So the macro definition ends 
+% as follows. 
+%% 
+   \string\@LN{\the\c@linenumber}{% 
+%%
+% (New v4.2) 
+%%     \noexpand\number\n@LN@truepage}}} 
+%%
+% The `truepage' counter must start with ~\c@~ so it works 
+% with ~\include~, and the ~\@addtoreset~ below is needed 
+% for the same purpose. 
+%% 
+     \noexpand\the\c@LN@truepage}}} 
+
+%% \newcount\n@LN@truepage 
+%% \g@addto@macro\cl@page{\global\advance\n@LN@truepage\@ne}
+\newcount\c@LN@truepage 
+\g@addto@macro\cl@page{\global\advance\c@LN@truepage\@ne}
+\@addtoreset{LN@truepage}{@ckpt}
+
+% (/New v4.2)                I had thought of offering more 
+% features of a \LaTeX\ counter. However, the user should 
+% better \emph{not} have access to this counter. ~\c@page~ 
+% should suffice as a pagewise master counter.---To be sure, 
+% along the present lines the user \emph{can} manipulate 
+% ~\c@LN@truepage~ by ~\stepcounter{page}~. E.g., she might 
+% do this in order to manually insert a photograph. Well, 
+% seems not to harm. 
+% 
+% The above usage of ~\g@addto@macro~ and ~\cl@page~ may be 
+% not as stable as Stephan intended. His proposal used 
+% ~\xdef~ directly. But he used ~\cl@page~ as well, and who 
+% knows \dots{} And as to ~\g@addto@macro~, I have introduced 
+% it for list macros anyway. 
+% (/UL) (/New v4.00) 
+% 
+% From the aux-file we get one macro ~\LN@P~<page> for each
+% page with line numbers on it.  This macro calls four other
+% macros with one argument each.  These macros are
+% dynamically defined to do tests and actions, to find out
+% on which page the current line number is located.
+%
+% We need sort of a pointer to the first page with line
+% numbers, initiallized to point to nothing:
+
+\def\LastNumberedPage{first} 
+\def\LN@Pfirst{\nextLN\relax}
+
+% The four dynamic macros are initiallized to reproduce
+% themselves in an ~\xdef~
+
+\let\lastLN\relax  % compare to last line on this page
+\let\firstLN\relax % compare to first line on this page
+\let\pageLN\relax  % get the page number, compute the linenumber
+\let\nextLN\relax  % move to the next page
+
+% During the end-document run through the aux-files, we
+% disable ~\@LN~.  I may put in a check here later, to give
+% a rerun recommendation.  
+
+\AtEndDocument{\let\@LN\@gobbletwo}
+
+% Now, this is the tricky part.  First of all, the whole
+% definition of ~\@LN~ is grouped, to avoid accumulation
+% on the save stack. Somehow ~\csname~<cs>~\endcsname~ pushes
+% an entry, which stays after an ~\xdef~ to that <cs>.
+%
+% If ~\LN@P~<page> is undefined, initialize it with the
+% current page and line number, with the
+% \emph{pointer-to-the-next-page} pointing to nothing.  And
+% the macro for the previous page will be redefined to point
+% to the current one. 
+%
+% If the macro for the current page already exists, just
+% redefine the \emph{last-line-number} entry.
+%
+% Finally, save the current page number, to get the pointer to the
+% following page later.
+
+\def\@LN#1#2{{\expandafter\@@LN
+                 \csname LN@P#2C\@LN@column\expandafter\endcsname
+                 \csname LN@PO#2\endcsname
+                 {#1}{#2}}}
+
+\def\@@LN#1#2#3#4{\ifx#1\relax
+    \ifx#2\relax\gdef#2{#3}\fi
+    \expandafter\@@@LN\csname LN@P\LastNumberedPage\endcsname#1% 
+    \xdef#1{\lastLN{#3}\firstLN{#3}% 
+            \pageLN{#4}{\@LN@column}{#2}\nextLN\relax}%
+  \else
+    \def\lastLN##1{\noexpand\lastLN{#3}}%
+    \xdef#1{#1}%
+  \fi
+  \xdef\LastNumberedPage{#4C\@LN@column}}
+
+% The previous page macro gets its pointer to the
+% current one, replacing the ~\relax~ with the cs-token
+% ~\LN@P~<page>.  
+
+\def\@@@LN#1#2{{\def\nextLN##1{\noexpand\nextLN\noexpand#2}%
+                \xdef#1{#1}}}
+
+% Now, to print a line number, we need to find the page,
+% where it resides.  This will most probably be the page where
+% the last one came from, or maybe the next page.  However, it can
+% be a completely different one.  We maintain a cache,
+% which is ~\let~ to the last page's macro.  But for now
+% it is initialized to expand ~\LN@first~, where the poiner
+% to the first numbered page has been stored in. 
+
+\def\NumberedPageCache{\LN@Pfirst}
+
+% To find out on which page the current ~\c@linenumber~ is, 
+% we define the four dynamic macros to do something usefull
+% and execute the current cache macro.  ~\lastLN~ is run
+% first, testing if the line number in question may be on a
+% later page.  If so, disable ~\firstLN~, and go on to the
+% next page via ~\nextLN~.
+
+\def\testLastNumberedPage#1{\ifnum#1<\c@linenumber
+      \let\firstLN\@gobble
+  \fi}
+
+% Else, if ~\firstLN~ finds out that we need an earlier
+% page,  we start over from the beginning. Else, ~\nextLN~
+% will be disabled, and ~\pageLN~ will run
+% ~\gotNumberedPage~ with four arguments: the first line
+% number on this column, the page number, the column 
+% number, and the first line on the page.
+
+\def\testFirstNumberedPage#1{\ifnum#1>\c@linenumber
+     \def\nextLN##1{\testNextNumberedPage\LN@Pfirst}%
+  \else
+      \let\nextLN\@gobble
+      \def\pageLN{\gotNumberedPage{#1}}%
+  \fi}
+
+% We start with ~\pageLN~ disabled and ~\nextLN~ defined to
+% continue the search with the next page.
+
+\long\def \@gobblethree #1#2#3{}
+
+\def\testNumberedPage{%
+  \let\lastLN\testLastNumberedPage
+  \let\firstLN\testFirstNumberedPage
+  \let\pageLN\@gobblethree
+  \let\nextLN\testNextNumberedPage
+  \NumberedPageCache
+  }
+
+% When we switch to another page, we first have to make
+% sure that it is there.  If we are done with the last 
+% page, we probably need to run \TeX\ again, but for the
+% rest of this run, the cache macro will just return four
+% zeros. This saves a lot of time, for example if you have
+% half of an aux-file from an aborted run,  in the next run
+% the whole page-list would be searched in vain again and
+% again for the second half of the document.
+%
+% If there is another page, we iterate the search. 
+
+\def\testNextNumberedPage#1{\ifx#1\relax
+     \global\def\NumberedPageCache{\gotNumberedPage0000}%
+     \PackageWarningNoLine{lineno}%
+                    {Linenumber reference failed,
+      \MessageBreak  rerun to get it right}%
+   \else
+     \global\let\NumberedPageCache#1%
+   \fi
+   \testNumberedPage
+   }
+
+%                             \linelabel{demo2}
+%                             \marginpar{\tiny\raggedright
+%                                 Let's see if it finds the label
+%                                 on page \pageref{demo}, 
+%                                 line \ref{demo}, and back here
+%                                 on page \pageref{demo2}, line
+%                                 \ref{demo2}. 
+%                             \unskip}%
+% To separate the official hooks from the internals there is
+% this equivalence, to hook in later for whatever purpose:
+
+\let\getLineNumber\testNumberedPage
+
+% So, now we got the page where the number is on.  We
+% establish if we are on an odd or even page, and calculate
+% the final line number to be printed.
+
+\newif\ifoddNumberedPage
+\newif\ifcolumnwiselinenumbers
+\columnwiselinenumbersfalse
+
+\def\gotNumberedPage#1#2#3#4{\oddNumberedPagefalse
+  \ifodd \if@twocolumn #3\else #2\fi\relax\oddNumberedPagetrue\fi
+  \advance\c@linenumber\@ne 
+  \ifcolumnwiselinenumbers
+     \subtractlinenumberoffset{#1}%
+  \else
+     \subtractlinenumberoffset{#4}%
+  \fi
+  }
+
+% You might want to run the pagewise mode with running line
+% numbers, or you might not.  It's your choice:
+
+\def\runningpagewiselinenumbers{%
+  \let\subtractlinenumberoffset\@gobble
+  }
+
+\def\realpagewiselinenumbers{%
+  \def\subtractlinenumberoffset##1{\advance\c@linenumber-##1\relax}%
+  }
+
+\realpagewiselinenumbers
+
+% For line number references, we need a protected call to
+% the whole procedure, with the requested line number stored
+% in the ~\c@linenumber~ counter.  This is what gets printed
+% to the aux-file to make a label:
+
+\def\thePagewiseLineNumber{\protect 
+       \getpagewiselinenumber{\the\c@linenumber}}%
+
+% And here is what happens when the label is refered to:
+
+\def\getpagewiselinenumber#1{{%
+  \c@linenumber #1\relax\testNumberedPage
+  \thelinenumber
+  }}
+
+%                                                                            %
+% A summary of all per line expenses:
+%                                                     \begin{description}\item
+% [CPU:]  The ~\output~ routine is called for each line,
+%         and the page-search is done.
+%                                                                        \item
+% [DISK:] One line of output to the aux-file for each
+%         numbered line
+%                                                                        \item
+% [MEM:]  One macro per page. Great improvement over v1.02,
+%         which had one control sequence per line in
+%         addition.  It blew the hash table after some five
+%         thousand lines. 
+%                                                            \end{description}
+%
+%                                                                \subsection{%
+%                  Twocolumn mode (New v3.06)
+%                                                                     \unskip}
+%
+% Twocolumn mode requires another patch to the ~\output~ 
+% routine, in order to print a column tag to the .aux 
+% file.
+
+\AtBeginDocument{% v4.2, revtex4.cls (e.g.). 
+ % <- TODO v4.4+: Or better in \LineNoLaTeXOutput!? 
+  \let\@LN@orig@makecol\@makecol} 
+\def\@LN@makecol{%
+   \@LN@orig@makecol
+   \setbox\@outputbox \vbox{%
+      \boxmaxdepth \@maxdepth
+      \protected@write\@auxout{}{% 
+          \string\@LN@col{\if@firstcolumn1\else2\fi}%
+      }%
+      \box\@outputbox 
+   }% \vbox
+} %% TODO cf. revtexln.sty. 
+
+\def\@LN@col{\def\@LN@column} % v4.22, removed #1. 
+\@LN@col{1}
+
+%
+%                                                                \subsection{%
+%                  Numbering modulo $m$, starting at $f$ 
+%%                  Numbering modulo 5
+%                                                       \unskip}\label{ss:Mod} 
+% 
+% Most users want to have only one in five lines numbered.
+% ~\LineNumber~ is supposed to produce the outfit of the
+% line number attached to the line,  while ~\thelinenumber~
+% is used also for references, which should appear even if
+% they are not multiples of five.   
+% 
+% (New v4.00)                   Moreover, some users want to 
+% control which line number should be printed first. Support 
+% of this is now introduced here---see ~\firstlinenumber~ 
+% below.---~numline.sty~ by Michael Jaegermann and 
+% James Fortune offers controlling which \emph{final} 
+% line numbers should not be printed. What is 
+% it good for? We ignore this here until some user demands 
+% it.---Peter Wilson's ~ledmac.sty~ offers much different 
+% choices of line numbers to be printed, due to Wayne Sullivan. 
+% (/New v4.00) 
+% 
+% (New v4.22)   ~\c@linenumbermodulo~ is rendered a 
+% fake counter, as discussed since v4.00. So it can 
+% no longer be set by ~\setcounter~. ~\modulolinenumbers~ 
+% serves this purpose. Well, does anybody want to do 
+% what worked with ~\addtocounter~? (Then please tell 
+% me.)---At least, ~\value~ still works. For the same 
+% purpose I rename the fake `firstlinenumber' counter 
+% ~\n@...~ to ~\c@...~.                  (/New v4.22) 
+%                                                  \begin{old}\begin{verbatim}
+% % \newcount\c@linenumbermodulo % removed for v4.22 
+% \end{verbatim}
+%                                                                    \end{old}
+% 
+%% Removed for v4.22: 
+%% (UL)                                On my question why, e.g., 
+%% ~\chardef~ would not have sufficed, Stephan couldn't remember 
+%% exactly; guessed that he wanted to offer \LaTeX\ counter 
+%% facilities. However, the typical ones don't come this way. 
+%% So I'm quite sure that I will change this next time. 
+%% 
+%% However, I observed at least two times that users gave a very 
+%% high value to ~\c@linenumbermodulo~ in order to suppress 
+%% printing of the line number. One of these users preferred an 
+%% own way of handling line numbers, just wanted to use 
+%% ~\linelabel~ and ~ednotes.sty~ features. Should we support this? 
+%% I rather would like to advise them to 
+%% ~\let\makeLineNumber\relax~.      (/UL) 
+% 
+% (New v4.00)                                                             \par 
+% ~\themodulolinenumber~ waits for being declared 
+% ~\LineNumber~ by ~\modulolinenumbers~. (This has 
+% been so before, no change.) Here is how it 
+% looked before: 
+%                                                  \begin{old}\begin{verbatim}
+% % \def\themodulolinenumber{{\@tempcnta\c@linenumber
+% %   \divide\@tempcnta\c@linenumbermodulo
+% %   \multiply\@tempcnta\c@linenumbermodulo
+% %   \ifnum\@tempcnta=\c@linenumber\thelinenumber\fi
+% %   }}
+% \end{verbatim}
+%                                                                    \end{old} 
+% (UL)                   This was somewhat slow. This arithmetic 
+% happens at every line. This time I tend to declare an extra 
+%% TODO v4.4+ 
+% line counter (as opposed to my usual recommendations to use 
+% counters as rarely as possible) which is stepped every line. 
+% It could be incremented in the same way as ~\c@LN@truepage~ 
+% is incremented via ~\cl@page~! This is another point in favour 
+% of ~{linenumber}~ being a \LaTeX\ counter! 
+% When this new counter equals ~\c@linenumbermodulo~, it is reset, 
+% and ~\thelinenumber~ is executed.---It gets much slower by my 
+% support of controlling the first line number below. I should 
+% improve this.---On
+%%                                                   %% TODO v4.4+--pagewise!? 
+% the other hand, time expense means very little nowadays, 
+% while the number of \TeX\ counters still is limited. 
+% 
+% For the same purpose, moreover, attaching the line number 
+% box could be intercepted earlier (in ~\MakeLineNo~), 
+% without changing ~\LineNumber~. However, this may be 
+% bad for the latter's announcement as a wizard interface 
+% in section_\ref{s:UserCmds}.
+%% 
+%% I wonder about Stephan's group. Its only effect is that 
+%% ~\@tempcnta~ is restored after using it. What for is this? 
+%% I tend to remove the group braces.                            %% TODO v4.4+
+% (/UL) 
+% 
+% Here is the new code. It is very near to my ~lnopatch.sty~ 
+% code which introduced the first line number feature 
+% before.---I add starting with a ~\relax~ which is so often 
+% recommended---without understanding this really. At least, 
+% it will not harm.---Former group braces appear as 
+% ~\begingroup~/~\endgroup~ here. 
+
+\def\themodulolinenumber{\relax
+  \ifnum\c@linenumber<\c@firstlinenumber \else 
+    \begingroup 
+      \@tempcnta\c@linenumber
+      \advance\@tempcnta-\c@firstlinenumber 
+      \divide\@tempcnta\c@linenumbermodulo
+      \multiply\@tempcnta\c@linenumbermodulo
+      \advance\@tempcnta\c@firstlinenumber 
+      \ifnum\@tempcnta=\c@linenumber \thelinenumber \fi
+    \endgroup 
+  \fi 
+}
+
+% (/New v4.00) 
+% 
+% The user command to set the modulo counter:
+% (New v4.31) \dots\ a star variant is introduced to implement 
+% Hillel Chayim Yisraeli's idea to print the first line number 
+% after an interruption of the edited text by some editor's 
+% text, regardless of the modulo. If it is 1, it is printed only 
+% with ~\firstlinenumber{1}~. I.e., you use ~\modulolinenumbers*~
+% for the new feature, without the star you get the simpler 
+% behaviour that we have had so far. And you can switch back 
+% from the refined behaviour to the simple one by using 
+% ~\modulolinenumbers~ without the star.---This enhancement 
+% is accompanied by a new package option ~modulo*~ which just 
+% executes ~\modulolinenumbers*~ 
+% (subsection_\ref{ss:v3opts}).---`With ~\firstlinenumber{1}~' 
+% exactly means: `1' is printed if and only if the last 
+% ~\firstlinenumber~ before or in the paragraph that follows 
+% the ``interruption'' has argument `1' (or something 
+% \emph{expanding} to `1', or (to) something that \TeX\ 
+% ``reads'' as 1, e.g.: a \TeX\ count register storing 
+% 1).---At present, this behaviour may be unsatisfactory with 
+% pagewise line-numbering $\dots$ I'll make an experimental 
+% extra package if someone complains \dots
+
+\newcommand\modulolinenumbers{% 
+  \@ifstar
+    {\def\@LN@maybe@moduloresume{% 
+       \global\let\@LN@maybe@normalLineNumber
+                            \@LN@normalLineNumber}% 
+                                       \@LN@modulolinenos}% 
+    {\let\@LN@maybe@moduloresume\relax \@LN@modulolinenos}%
+}
+
+\global\let\@LN@maybe@normalLineNumber\relax 
+\let\@LN@maybe@moduloresume\relax 
+\gdef\@LN@normalLineNumber{% 
+  \ifnum\c@linenumber=\c@firstlinenumber \else 
+    \ifnum\c@linenumber>\@ne
+      \def\LineNumber{\thelinenumber}% 
+    \fi 
+  \fi 
+%%
+% ~\def~ instead of ~\let~ enables taking account of a 
+% redefinition of ~\thelinenumber~ in a present numbering 
+% environment (e.g.). 
+%%
+  \global\let\@LN@maybe@normalLineNumber\relax}
+
+% Instead of changing ~\LineNumber~ directly by 
+% ~LN@moduloresume~, these tricks enable ~\modulolinenumbers*~
+% to act as locally as I can make it. I don't know how to 
+% avoid that the output routine switches back to the normal 
+% modulo behaviour by a global change. (An ~\aftergroup~ may 
+% fail in admittedly improbable cases.)
+
+\newcommand*\@LN@modulolinenos[1][\z@]{%
+%% 
+% The definition of this macro is that of the former 
+% ~\modulolinenumbers~.                 (/New v4.31) 
+%%
+  \let\LineNumber\themodulolinenumber
+  \ifnum#1>\@ne 
+    \chardef                      % v4.22, note below 
+      \c@linenumbermodulo#1\relax
+  \else\ifnum#1=\@ne 
+%                                                  \begin{old}\begin{verbatim}
+% %    \def\LineNumber{\thelinenumber}%
+% \end{verbatim}
+%                                                                    \end{old} 
+% (New v4.00)         I am putting something here to enable 
+% ~\firstlinenumber~ with $~\c@linenumbermodulo~=1$. 
+% With ~lnopatch.sty~, a trick was offered for this purpose. 
+% It is now obsolete. 
+% 
+    \def\LineNumber{\@LN@ifgreat\thelinenumber}% 
+%% 
+% (/New v4.00) 
+%% 
+  \fi\fi
+  }
+
+% (New v4.00)                The default of ~\@LN@ifgreat~ is 
+
+\let\@LN@ifgreat\relax
+
+% The previous changes as soon as ~\firstlinenumber~ is used: 
+
+\newcommand*\firstlinenumber[1]{% 
+  \chardef\c@firstlinenumber#1\relax 
+%% 
+% No counter, little values allowed only---OK?---(UL) 
+% The change is local---OK? The good thing is that 
+% ~\global\firstlinenumber{~<number>~}~ works. Moreover, 
+% ~\modulolinenumbers~ acts locally as well.    (/UL)
+%
+% (New v4.31) 
+%% 
+  \let\@LN@ifgreat\@LN@ifgreat@critical} 
+
+\def\@LN@ifgreat@critical{%
+  \ifnum\c@linenumber<\c@firstlinenumber 
+    \expandafter \@gobble 
+  \fi}% 
+
+% (/New v4.31) 
+% 
+% The default 
+% value of ~\c@firstlinenumber~                                %% v4.31 
+% is 0. This is best for what one would expect from modulo 
+% printing. 
+
+\let\c@firstlinenumber=\z@
+
+% 
+% For usage and effects of ~\modulolinenumbers~ and            %% v4.31 
+% ~\firstlinenumbers~, please consult section_\ref{s:UserCmds}. 
+% Two details on ~\firstlinenumbers~ here: 
+% (i)_~\firstlinenumber~ acts on a paragraph if and only if 
+% (a)_the paragraph is broken into lines ``in line-numbering 
+% mode'' (after ~\linenumbers~, e.g.); 
+% (b)_it is the last occurrence of a ~\firstlinenumbers~ 
+% before or in the paragraph. 
+% (The practical applications of this that I can imagine 
+% don't seem appealing to me.) 
+% Cf._the explanation above of how ~\modulolinenumbers~ and 
+% ~\firstlinenumbers~ interact---for this and for (ii), 
+% which is concerned with possible arguments for 
+% ~\firstlinenumbers~. 
+% 
+% Note that the line numbers of the present section 
+% demonstrate the two devices.         (/New v4.00) 
+
+%%\setcounter{linenumbermodulo}{5}
+\chardef\c@linenumbermodulo=5      % v4.2; ugly? 
+\modulolinenumbers[1]
+
+% (New v4.22)       The new implementation through ~\chardef~ 
+% decreases the functionality and raises certain compatibility 
+% problems. I face this without fear. The maximum modulo value 
+% is now ~255~. I expect that this suffices for usual applications. 
+% However, some users have ``abused'' ~lineno.sty~ to get 
+% ~ednotes.sty~ features without line numbers, so have set the 
+% modulo to a value beyond the total number of lines in their 
+% edition. This ought to be replaced by 
+% ~\let\makeLineNumber\relax~.          (/New v4.22) 
+% 
+%                                                                   \section{% 
+%               Package options
+%                                                       \unskip}\label{s:Opts} 
+% 
+% (New v4.1) 
+% The last heading formerly was the heading of what is now 
+% subsection_\ref{ss:v3opts}. The options declared there were 
+% said to execute user commands only. This was wrong already 
+% concerning ~displaymath~ and ~hyperref~. At least, however, 
+% these options were no or almost no occasion to skip definitions 
+% or allocations. This is different with the options that we now 
+% insert. 
+% 
+%% (New v4.2)   v4.00 moved the ``options'' below the 
+%% ``extensions''. This was bad with ~\do@mlineno~ in 
+%% subsection_\ref{ss:v3opts} which is to control 
+%% subsection_\ref{ss:display}---undone here.  (/New v4.2) 
+%
+%                                                                \subsection{%
+%               Extended referencing to line numbers. (v4.2)
+%                                                                     \unskip}
+% This subsection explains and declares package option ~addpageno~.   %% v4.31
+% 
+% If a line to whose number you refer by ~\ref~ is not on the 
+% present page, it may be useful to add the number of the page 
+% on which the line occurs---and perhaps it should not be added 
+% otherwise. In general, you could use the Standard \LaTeX\ 
+% package varioref for this. However, the latter usually 
+% produces verbose output like `on the preceding page'---
+% unless costumized---, while in critical editions, e.g., one 
+% may prefer just adding the page number and some mark on the 
+% left of the line number, irrespectively of how far the page is 
+% apart etc. To support this, package option ~addpageno~ 
+% provides a command ~\vpagelineref~ to be used in place of 
+% ~\ref~. This produces, e.g., `34.15' when referring to line_15 
+% on page_34 while the present page is not 34. You can customize 
+% the outcome, see the package file ~vplref.sty~ where the code 
+% and further details are. You may conceive of 
+% ~\vpagelineref~ as a certain customization of varioref's 
+% ~\vref~. 
+% 
+% This implies that option ~addpageno~ requires the files 
+% ~vplref.sty~ and ~varioref.sty~. ~addpageno~ automatically 
+% loads both of them. Yet you can also load ~varioref.sty~ 
+% on your own to use its package options. 
+% 
+% Of course, you might better introduce a shorter command name 
+% for ~\vpagelineref~ for your work, while we cannot predict 
+% here what shorthand will fit your work. E.g., 
+% ~\newcommand{\lref}{\vpagelineref}~.
+% 
+% If you really want to add the page number in \emph{any} case, 
+% use, e.g., some ~\myref~ instead of ~\ref~, after 
+%   \[~newcommand*{\myref}{\pageref{#1}.\ref{#1}}~\] 
+% or what you like. You don't need the ~addpageno~ option in 
+% this case. 
+% 
+% ~addpageno~ is due to a suggestion by Sergei Mariev. 
+
+\DeclareOption{addpageno}{% 
+  \AtEndOfPackage{\RequirePackage{vplref}[2005/04/25]}} 
+
+%                                                                \subsection{% 
+%               \scs{linelabel} in math mode 
+%                                                   \unskip}\label{ss:MathRef}
+% 
+% We have made some first steps towards allowing ~\linelabel~ in 
+% math mode. Because our code for this is presently experimental, 
+% we leave it to the user to decide for the experiment by calling 
+% option ~mathrefs~. We are in a hurry now and thus leave the 
+% code, explanations, and discussion in the separate package 
+% ~ednmath0.sty~. Maybe we later find the time to improve the 
+% code and move the relevant content of ~ednmath0.sty~ to here. 
+% The optimal situation would be to define ~\linelabel~ from 
+% the start so it works in math mode, omitting the ~mathrefs~ 
+% option. 
+% 
+% Actually, this package even provides adjustments for analogously 
+% allowing ~ednotes.sty~ commands in math mode. Loading the package 
+% is postponed to ~\AtBeginDocument~ when we know whether these 
+% adjustments are needed. 
+
+\DeclareOption{mathrefs}{\AtBeginDocument 
+  {\RequirePackage{ednmath0}[2004/08/20]}} 
+
+% 
+%                                                                \subsection{% 
+%               Arrays, tabular environments (Revised v4.11)
+%                                                       \unskip}\label{ss:Tab} 
+% 
+% This subsection explains and declares package options               %% v4.31
+% ~edtable~, ~longtable~, and ~nolongtablepatch~.
+%
+% The standard \LaTeX\ tabular environments come as single 
+% boxes, so the ~lineno.sty~ versions before v4.00 treated them as 
+% (parts of) single lines, printing (at most) one line number 
+% beside each and stepping the line number counter once only. 
+% Moreover, ~\linelabel~s got lost. Of course, tables are 
+% usually so high that you will want to treat each row like a 
+% line. (Christian Tapp even desires that the lines of table 
+% entries belonging to a single row are treated like ordinary 
+% lines.) Footnotes get lost in such environments as well, which 
+% was bad for ~ednotes.sty~.
+% 
+% We provide adjustments to count lines, print their numbers 
+% etc.\ as desired at least for \emph{some} \LaTeX\ tabular 
+% environments. (Like with other details, ``some'' is to some 
+% extent explained in ~edtable.sty~.) We do this similarly as 
+% with option ~mathrefs~ before.               We leave code 
+% and explanations in the separate package ~edtable.sty~. 
+% (For wizards: this package provides adjustments for 
+% ~ednotes.sty~ as well. However, in the present case we don't try 
+% to avoid them unless ~ednotes.sty~ is loaded.) 
+% Package option ~edtable~ 
+% defines---by loading ~edtable.sty~---an environment ~{edtable}~ 
+% which is able to change some \LaTeX\ tabular environments 
+% with the desired effects. (v4.11: ~edtable.sty~ v1.3 counts 
+% \LaTeX's ~{array}~ [etc.\@] as a ``tabular environment'' as 
+% well.) 
+% 
+% The ~{edtable}~ environment doesn't help with ~longtable.sty~, 
+% however. To make up for this, ~{longtable}~ is adjusted in a 
+% different way---and this happens only when another ~lineno.sty~ 
+% option ~longtable~ is called. In this case, option ~edtable~ 
+% needn't be called explicitly: option ~longtable~ works as if 
+% ~edtable~ had been called. 
+% 
+% Now, we are convinced that vertical spacing around 
+% ~{longtable}~ works wrongly---see \LaTeX\ bugs database 
+% tools/3180 and 3485, or see explanations in the package 
+% ~ltabptch.sty~ (which is to be obtained from CTAN folder
+% \path{macros/latex/ltabptch}). Our conviction is so strong
+% that the ~longtable~ option loads---after ~longtable.sty~---the
+% patch package ~ltabptch.sty~. If the user doesn't want this
+% (maybe preferring her own arrangement with the vertical 
+% spacing), she can forbid it by calling ~nolongtablepatch~. 
+% 
+% The following code just collects some choices, which are 
+% then executed in section_\ref{ss:ExOpt}. We use an ~\if...~ 
+% without ~\newif~ since ~\if...true~ and ~\if...false~ 
+% would occur at most two times and only within the present 
+% package. (~\AtEndOfClass{\RequirePackage{edtable}}~ 
+% could be used instead, I just overlooked this. Now I don't 
+% change it because it allows to change the version requirement 
+% at one place only.)
+
+\let\if@LN@edtable\iffalse 
+
+\DeclareOption{edtable}{\let\if@LN@edtable\iftrue}
+
+\DeclareOption{longtable}{\let\if@LN@edtable\iftrue 
+  \PassOptionsToPackage{longtable}{edtable}}
+
+\DeclareOption{nolongtablepatch}{% 
+  \PassOptionsToPackage{nolongtablepatch}{edtable}}
+
+% (/New v4.1) 
+% 
+%                                                                \subsection{% 
+%               Switch among settings 
+%                                                    \unskip}\label{ss:v3opts}
+% 
+% There is a bunch of package options that execute                     %% v4.2 
+%% There is a bunch of package options, all of them executing 
+%% executing only user commands (see below). %% Cf. start of section. 
+% user commands only. 
+%
+% Options ~left~ (~right~) put the line numbers on the left
+% (right) margin.  This works in all modes.  ~left~ is the
+% default.
+
+\DeclareOption{left}{\leftlinenumbers*}
+
+\DeclareOption{right}{\rightlinenumbers*}
+
+% Option ~switch~ (~switch*~) puts the line numbers on the
+% outer (inner) margin of the text.   This requires running
+% the pagewise mode,  but we turn off the page offset
+% subtraction, getting sort of running numbers again.  The
+% ~pagewise~ option may restore true pagewise mode later.
+
+\DeclareOption{switch}{\setpagewiselinenumbers
+                       \switchlinenumbers
+                       \runningpagewiselinenumbers}
+
+\DeclareOption{switch*}{\setpagewiselinenumbers
+                        \switchlinenumbers*%
+                        \runningpagewiselinenumbers}
+
+% In twocolumn mode, we can switch the line numbers to 
+% the outer margin, and/or start with number 1 in each
+% column.  Margin switching is covered by the ~switch~ 
+% options.
+
+\DeclareOption{columnwise}{\setpagewiselinenumbers
+                           \columnwiselinenumberstrue
+                           \realpagewiselinenumbers}
+
+% The options ~pagewise~ and ~running~ select the major
+% linenumber mechanism.  ~running~ line numbers refer to a real
+% counter value, which can be reset for any paragraph,
+% even getting  multiple paragraphs on one page starting
+% with line number one.  ~pagewise~ line numbers get a
+% unique hidden number within the document,  but with the
+% opportunity to establish the page on which they finally
+% come to rest.  This allows the subtraction of the page
+% offset, getting the numbers starting with 1 on top of each
+% page, and margin switching in twoside formats becomes
+% possible.  The default mode is ~running~.  
+%
+% The order of declaration of the options is important here
+% ~pagewise~ must come after ~switch~, to overide running
+% pagewise mode. ~running~ comes last, to reset the running
+% line number mode, e.g, after selecting margin switch mode
+% for ~pagewise~ running.  Once more, if you specify all
+% three of the options ~[switch,pagewise,running]~, the
+% result is almost nothing, but if you later say
+% ~\pagewiselinenumbers~,  you get margin switching, with
+% real pagewise line numbers.
+%
+\DeclareOption{pagewise}{\setpagewiselinenumbers
+                         \realpagewiselinenumbers}
+
+\DeclareOption{running}{\setrunninglinenumbers}
+
+% The option ~modulo~ causes only those linenumbers to be
+% printed which are multiples of five. 
+
+\DeclareOption{modulo}{\modulolinenumbers\relax}
+
+% Option ~modulo*~ modifies ~modulo~ in working like 
+% ~\modulolinenumbers*~---see section_\ref{s:UserCmds}. 
+
+\DeclareOption{modulo*}{\modulolinenumbers*\relax}
+
+% The package option ~mathlines~ switches the behavior of
+% the ~{linenomath}~ environment with its star-form.
+% Without this option, the ~{linenomath}~ environment does
+% not number the lines of the display, while the star-form
+% does.  With this option, its just the opposite.
+%
+%%% 1999-06-10: renamed ~displaymath~ to ~mathlines~.
+
+\DeclareOption{mathlines}{\linenumberdisplaymath}
+
+% ~displaymath~ now calls for wrappers of the standard 
+% \LaTeX\ display math environment.  This was previously 
+% done by ~mlineno.sty~.
+% 
+% (New v4.3) Option `displaymath' becomes default according 
+% to Erik \mbox{Luijten}'s suggestion. I was finally convinced 
+% of this as soon as I discovered how to avoid a spurious line 
+% number above ~\begin{linenomath}~ (subsection_\ref{ss:DM}). 
+% ~\endlinenomath~ provides ~\ignorespaces~, so what could go 
+% wrong now? 
+
+\DeclareOption{displaymath}{\PackageWarningNoLine{lineno}{%
+                Option [displaymath] is obsolete -- default now!}} 
+%% 
+%%\let\do@mlineno\relax
+%%\DeclareOption{displaymath}{\let\do@mlineno\@empty}
+% (/New v4.3) 
+% 
+%                                                                \subsection{%
+%               Compatibility with \texttt{hyperref}      %% own subsec. v4.3. 
+%                                                                     \unskip}
+% The ~hyperref~ package, via ~nameref~, requires three more 
+% groups in the second argment of a ~\newlabel~.  Well, why 
+% shouldn't it get them?  (New v3.07) The presence of the
+% ~nameref~ package is now detected automatically
+% ~\AtBeginDocument~. (/New v3.07) (Fixed in v3.09)  We try
+% to be smart, and test ~\AtBeginDocument~ if the ~nameref~
+% package is loaded, but ~hyperref~ postpones the loading of
+% ~nameref~ too, so this is all in vain.
+% 
+% (New v4.3)  But we can also test at the first ~\linelabel~. 
+% Regarding the error-message for misplaced ~\linelabel~ from v4.11: 
+% previously, ~\linenumbers~ rendered ~\linelabel~ the genuine 
+% version of ~\linelabel~ from the start on. This doesn't work 
+% now, since ~\@LN@linelabel~ may change its meaning after the 
+% first ~\linenumbers~ and before a next one (if there is some). 
+%     (/New v4.3) 
+
+\DeclareOption{hyperref}{\PackageWarningNoLine{lineno}{%
+                Option [hyperref] is obsolete. 
+  \MessageBreak The hyperref package is detected automatically.}}
+
+\AtBeginDocument{% 
+  \@ifpackageloaded{nameref}{%
+%% 
+% (New v4.3)  ``Global'' is merely ``symbolic'' ~\AtBeginDoc...~. 
+% If ~nameref~ is not detected here, the next ~\@LN@linelabel~ 
+% will do almost the same, then globally indeed. 
+%%
+    \gdef\@LN@ExtraLabelItems{{}{}{}}% 
+  }{%
+    \global\let\@LN@@linelabel\@LN@linelabel 
+    \gdef\@LN@linelabel{% 
+%% 
+% ~\@ifpackageloaded~ is ``preamble only'', its---very 
+% internal---preamble definition is replicated here: 
+%%
+     \expandafter 
+      \ifx\csname ver@nameref.sty\endcsname\relax \else 
+        \gdef\@LN@ExtraLabelItems{{}{}{}}% 
+      \fi 
+%% 
+% Now aim at the ``usual'' behaviour: 
+%% 
+      \global\let\@LN@linelabel\@LN@@linelabel 
+      \global\let\@LN@@linelabel\relax 
+      \@LN@linelabel
+    }% 
+  }%
+} 
+
+% (/New v4.3) 
+% 
+% (New v4.1) 
+%                                                                \subsection{% 
+%               A note on calling so many options 
+%                                                                     \unskip} 
+% 
+% The number of package options may stimulate worrying about how to 
+% \emph{enter} all the options that one would like to use---they may 
+% not fit into one line. Fortunately, you can safely break code lines 
+% after the commas separating the option names in the ~\usepackage~
+% command (no comment marks needed). 
+% 
+%                                                                \subsection{% 
+%               Execute options
+%                                                     \unskip}\label{ss:ExOpt}
+% 
+% We stop declaring options and execute the ones that are 
+% called by the user.       (/New v4.1)
+
+\ProcessOptions
+
+% (New v4.1)        Now we know whether ~edtable.sty~ is wanted 
+% and (if it is) with which options it is to be called. 
+
+\if@LN@edtable \RequirePackage{edtable}[2005/03/07] \fi 
+
+% (/New v4.1) 
+% 
+%                                                                   \section{%
+%               Former package extensions 
+%                                                         \label{s:Xt}\unskip}
+%
+% The extensions in this section were previously supplied 
+% in separate ~.sty~ files. 
+%
+%                                                                \subsection{%
+%              $display math$
+%                                                   \unskip}\label{ss:display}
+%% (New v4.32) 
+% (New v4.3)    From now on, you no longer need to type 
+% the ~{linenomath}~ environment with the ~\[~, ~{equation}~, 
+% and ~{eqnarray}~ environments---and you no longer need to 
+% use the former package option ~displaymath~ for this feature. 
+%                                                   (/New v4.3) 
+%% (/New v4.32) 
+% 
+%  The standard \LaTeX\ display math environments are
+%  wrapped in a ~{linenomath}~ environment.
+%
+% (New 3.05)  The ~[fleqn]~ option of the standard
+% \LaTeX\ classes defines the display math
+% environments such that line numbers appear just
+% fine.  Thus, we need not do any tricks when
+% ~[fleqn]~ is loaded, as indicated by presents of
+% the ~\mathindent~ register.           (/New 3.05)
+%
+% (New 3.05a)  for ~{eqnarray}~s we rather keep the
+% old trick.                            (/New 3.05a)
+%
+% (New 3.08) Wrap ~\[~ and ~\]~ into ~{linenomath}~, 
+% instead of ~{displaymath}~.  Also save the definition
+% of ~\equation~, instead of replicating the current 
+% \LaTeX\ definition.                    (/New 3.08)
+
+%%\ifx\do@mlineno\@empty
+ \@ifundefined{mathindent}{
+
+%% \AtBeginDocument{% 
+  \let\LN@displaymath\[%
+  \let\LN@enddisplaymath\]%
+  \renewcommand\[{\begin{linenomath}\LN@displaymath}%
+  \renewcommand\]{\LN@enddisplaymath\end{linenomath}}%
+% 
+  \let\LN@equation\equation
+  \let\LN@endequation\endequation
+  \renewenvironment{equation}%
+     {\linenomath\LN@equation}%
+     {\LN@endequation\endlinenomath}%
+%% }
+
+ }{}% \@ifundefined{mathindent} -- 3rd arg v4.2, was \par! 
+
+%%\AtBeginDocument{%
+  \let\LN@eqnarray\eqnarray
+  \let\LN@endeqnarray\endeqnarray
+  \renewenvironment{eqnarray}%
+     {\linenomath\LN@eqnarray}%
+     {\LN@endeqnarray\endlinenomath}%
+%%}
+  
+%%\fi
+
+% (UL)        Indeed. The \LaTeX\ macros are saved for 
+% unnumbered mode, which is detected by ~\linenomath~. 
+% (/UL) 
+%
+%                                                                \subsection{%
+%      Line numbers in internal vertical mode
+%                                                       \unskip}\label{ss:ILN}
+%
+% The command ~\internallinenumbers~ adds line numbers in 
+% internal vertical mode, but with limitations: we assume
+% fixed baseline skip.
+%
+% (v4.22)       v3.10 provided a global (~\global\advance~) 
+% as well as a local version (star-form, using 
+% ~\c@internallinenumber~). ~\resetlinenumbers~ acted 
+% locally and was here used with the global version---save 
+% stack danger, \TeX book p._301---in v4.00 I 
+% disabled the global version therefore. Now I find that 
+% it is better to keep a global version, and the now global 
+% ~\resetlinenumbers~ is perfect for this. The global version 
+% allows continuing the ``internal'' numbers in the ensuing 
+% ``external'' text, and---unless reset by brackets 
+% argument---continuing the above series of line numbers. 
+% As with v3.10, the local version always starts with 
+% line number one. A new ~\@LN@iglobal~ steps ~\global~ly 
+% in the global version, otherwise it is ~\relax~. 
+% (I also remove all my stupid discussions as of v4.00. 
+% And I use ~\newcommand~.)     (v4.22)
+
+\let\@LN@iglobal\global                           % v4.22 
+
+\newcommand\internallinenumbers{\setrunninglinenumbers 
+     \let\@@par\internallinenumberpar
+     \ifx\@par\@@@par\let\@par\internallinenumberpar\fi
+     \ifx\par\@@@par\let\par\internallinenumberpar\fi
+     \ifx\@par\linenumberpar\let\@par\internallinenumberpar\fi
+     \ifx\par\linenumberpar\let\par\internallinenumberpar\fi
+     \@ifnextchar[{\resetlinenumber}%]
+                 {\@ifstar{\let\c@linenumber\c@internallinenumber
+                           \let\@LN@iglobal\relax % v4.22
+                           \c@linenumber\@ne}{}}%
+     }
+
+\let\endinternallinenumbers\endlinenumbers
+\@namedef{internallinenumbers*}{\internallinenumbers*}
+\expandafter\let\csname endinternallinenumbers*\endcsname\endlinenumbers
+
+\newcount\c@internallinenumber
+\newcount\c@internallinenumbers
+
+\newcommand\internallinenumberpar{% 
+     \ifvmode\@@@par\else\ifinner\@@@par\else\@@@par
+     \begingroup
+        \c@internallinenumbers\prevgraf
+        \setbox\@tempboxa\hbox{\vbox{\makeinternalLinenumbers}}%
+        \dp\@tempboxa\prevdepth
+        \ht\@tempboxa\z@
+        \nobreak\vskip-\prevdepth
+        \nointerlineskip\box\@tempboxa
+     \endgroup 
+     \fi\fi
+     }
+
+\newcommand\makeinternalLinenumbers{% 
+   \ifnum\c@internallinenumbers>\z@               % v4.2
+   \hb@xt@\z@{\makeLineNumber}% 
+   \@LN@iglobal                                   % v4.22 
+     \advance\c@linenumber\@ne
+   \advance\c@internallinenumbers\m@ne
+   \expandafter\makeinternalLinenumbers\fi
+   }
+ % TODO v4.4+: star: line numbers right!? cf. lnocapt.sty
+
+% 
+%                                                                \subsection{%
+%      Line number references with offset
+%                                                                     \unskip}
+%
+% This extension defines macros to refer to line
+% numbers with an offset, e.g., to refer to a line
+% which cannot be labeled directly (display math).
+% This was formerly knows as ~rlineno.sty~.
+%
+% To refer to a pagewise line number with offset:
+%                                                                \begin{quote}
+%   ~\linerefp[~<OFFSET>~]{~<LABEL>~}~
+%                                                                  \end{quote}
+% To refer to a running line number with offset:
+%                                                                \begin{quote}
+%   ~\linerefr[~<OFFSET>~]{~<LABEL>~}~
+%                                                                  \end{quote}
+% To refer to a line number labeled in the same mode as currently
+% selected:
+%                                                                \begin{quote}
+%   ~\lineref[~<OFFSET>~]{~<LABEL>~}~
+%                                                                  \end{quote}
+
+\newcommand\lineref{%
+  \ifx\c@linenumber\c@runninglinenumber
+     \expandafter\linerefr
+  \else
+     \expandafter\linerefp
+  \fi
+}
+
+\newcommand*\linerefp[2][\z@]{{%
+   \let\@thelinenumber\thelinenumber
+   \edef\thelinenumber{\advance\c@linenumber#1\relax
+                       \noexpand\@thelinenumber}%
+   \ref{#2}%
+}}
+
+% This goes deep into \LaTeX's internals.
+
+\newcommand*\linerefr[2][\z@]{{%
+   \def\@@linerefadd{\advance\c@linenumber#1}%
+   \expandafter\@setref\csname r@#2\endcsname
+   \@linerefadd{#2}%
+}}
+
+\newcommand*\@linerefadd[2]{\c@linenumber=#1\@@linerefadd\relax
+                            \thelinenumber}
+
+%%                           TODO v4.4+: Insert `LN' in internal command names? 
+% 
+%                                                                 \subsection{%
+%      Numbered quotation environments
+%                                                                     \unskip}
+%
+% The ~{numquote}~ and ~{numquotation}~
+% environments are like ~{quote}~ and
+% ~{quotation}~, except there will be line
+% numbers.  
+% 
+% An optional argument gives the number to count
+% from.  A star ~*~ (inside or outside the closing
+% ~}~) prevent the reset of the line numbers.
+% Default is to count from one.
+% 
+% (v4.22: A local version using ~\c@internallinenumber~ 
+% might be useful, see subsection_\ref{ss:ILN}.)                 %% TODO v4.4+
+
+\newcommand\quotelinenumbers
+   {\@ifstar\linenumbers{\@ifnextchar[\linenumbers{\linenumbers*}}}
+
+\newdimen\quotelinenumbersep
+\quotelinenumbersep=\linenumbersep
+\let\quotelinenumberfont\linenumberfont
+
+\newcommand\numquotelist
+   {\leftlinenumbers
+    \linenumbersep\quotelinenumbersep
+    \let\linenumberfont\quotelinenumberfont
+    \addtolength{\linenumbersep}{-\@totalleftmargin}%
+    \quotelinenumbers
+   }
+
+\newenvironment{numquote}     {\quote\numquotelist}{\endquote}
+\newenvironment{numquotation} {\quotation\numquotelist}{\endquotation}
+\newenvironment{numquote*}    {\quote\numquotelist*}{\endquote}
+\newenvironment{numquotation*}{\quotation\numquotelist*}{\endquotation}
+
+% 
+%                                                                \subsection{%
+%      Frame around a paragraph
+%                                                                     \unskip}
+%
+% The ~{bframe}~ environment draws a frame around
+% some text, across page breaks, if necessary.
+%
+% This works only for plain text paragraphs,
+% without special height lines. All lines must be
+% ~\baselineskip~ apart, no display math.
+
+\newenvironment{bframe}
+  {\par
+   \@tempdima\textwidth
+   \advance\@tempdima 2\bframesep
+   \setbox\bframebox\hb@xt@\textwidth{%
+      \hskip-\bframesep
+      \vrule\@width\bframerule\@height\baselineskip\@depth\bframesep
+      \advance\@tempdima-2\bframerule
+      \hskip\@tempdima
+      \vrule\@width\bframerule\@height\baselineskip\@depth\bframesep
+      \hskip-\bframesep
+   }%
+   \hbox{\hskip-\bframesep
+         \vrule\@width\@tempdima\@height\bframerule\@depth\z@}%
+   \nointerlineskip
+   \copy\bframebox
+   \nobreak
+   \kern-\baselineskip
+   \runninglinenumbers
+   \def\makeLineNumber{\copy\bframebox\hss}%
+  }
+  {\par
+   \kern-\prevdepth
+   \kern\bframesep
+   \nointerlineskip
+   \@tempdima\textwidth
+   \advance\@tempdima 2\bframesep
+   \hbox{\hskip-\bframesep
+         \vrule\@width\@tempdima\@height\bframerule\@depth\z@}%
+  }
+
+\newdimen\bframerule
+\bframerule=\fboxrule
+
+\newdimen\bframesep
+\bframesep=\fboxsep
+
+\newbox\bframebox
+ 
+% 
+% 
+%                                                                   \section{%
+%               Move \scs{vadjust} items (New v4.00)
+%                                                      \unskip}\label{s:MVadj} 
+% 
+% This section completes reviving ~\pagebreak~, ~\nopagebreak~, 
+% ~\vspace~, and the star and optional form of ~\\~. This was 
+% started in section_\ref{ss:output} and resumed in 
+% section_\ref{ss:MLN} and subsection_\ref{ss:calls}.
+% The problem was explained in section_\ref{ss:output}: 
+% ~\vadjust~ items come out at a bad position, and the 
+% \LaTeX\ commands named before work with ~\vadjust~ indeed. 
+% Our solution was sketched there as well. 
+% 
+% According to the caveat in subsection_\ref{ss:OnOff} concerning
+% ~\ifLineNumbers~, the \LaTeX\ commands enumerated may go 
+% wrong if you switch line numbering inside or at the end of 
+% a paragraph. 
+%%                                                               %% TODO v4.4+
+% 
+%                                                                \subsection{%
+%               Redefining \scs{vadjust}
+%                                                     \unskip}\label{ss:PVadj}
+% 
+% ~\vadjust~ will temporarily be changed into the following 
+% command. 
+
+\def\PostponeVadjust#1{% 
+  \global\let\vadjust\@LN@@vadjust 
+%% 
+% This undoes a ~\global\let\vadjust\PostponeVadjust~ which will 
+% start each of the refined \LaTeX\ commands. The ~\global~s 
+% are most probably superfluous. They might be useful should one 
+% ~\vadjust~ appear in a group starting after the change of 
+% ~\vadjust~ into ~\PostponeVadjust~. 
+% (UL) Even the undoing may be superfluous, cf._discussion 
+% in section_\ref{ss:ReDef} below.  (UL) 
+%% 
+  \vadjust{\penalty-\@Mppvacodepen}% 
+  \g@addto@macro\@LN@vadjustlist{#1\@lt}% 
+}
+\let\@LN@@vadjust\vadjust 
+\global\let\@LN@vadjustlist\@empty 
+\global\let\@LN@do@vadjusts\relax 
+
+% These ~\global~s are just to remind that 
+% all the changes of the strings after ~\let~ should be 
+% ~\global~ (\TeX book p._301). ~\@LN@vadjustlist~ collects 
+% the ~\vadjust~ items of a paragraph. ~\PassVadjustList~ 
+% tears one ~\vadjust~ item for the current line out of 
+% ~\@LN@vadjustlist~ and puts it into ~\@LN@do@vadjusts~. 
+% The latter is encountered each line in ~\MakeLineNo~ 
+% (section_\ref{ss:MLN}), while those \LaTeX\ ~\vadjust~ 
+% commands will come rather rarely. So I decided that 
+% ~\@LN@do@vadjust~ is ~\relax~ until a ~\vadjust~ item 
+% is waiting. In the latter case, ~\@LN@do@vadjusts~ 
+% is turned into a list macro which resets itself to 
+% ~\relax~ when the other contents have been placed in 
+% the vertical list.---~\PassVadjustList~ is invoked by 
+% the output routine (section_\ref{ss:output}), so the 
+% ~\box255~ must be put back. 
+
+\def\PassVadjustList{% 
+  \unvbox\@cclv 
+  \expandafter \@LN@xnext \@LN@vadjustlist \@@ 
+                          \@tempa \@LN@vadjustlist 
+  \ifx\@LN@do@vadjusts\relax 
+    \gdef\@LN@do@vadjusts{\global\let\@LN@do@vadjusts\relax}% 
+  \fi 
+  \expandafter \g@addto@macro \expandafter \@LN@do@vadjusts 
+    \expandafter {\@tempa}% 
+} 
+
+% 
+%                                                                \subsection{%
+%               Redefining the \LaTeX\ commands 
+%                                                     \unskip}\label{ss:ReDef}
+% 
+% Now we change ~\pagebreak~ etc.\ 
+% so that they use ~\PostponeVadjust~ in place of ~\vadjust~. 
+% We try to do this as independently as possible of the 
+% implementation of the \LaTeX\ commands to be redefined. 
+% Therefore, we don't just copy macro definition code from any 
+% single implementation (say, latest \LaTeX) and insert our 
+% changes, but attach a conditional 
+% ~\global\let\vadjust\PostponeVadjust~ 
+% to their left ends in a way which should work rather 
+% independantly of their actual code. 
+% However, ~\vadjust~ should be the primitive again after 
+% execution of the command. So the ~\global\let...~ may be used 
+% only if it's guaranteed that a ~\vadjust~ is near.---(UL) 
+% Sure? In line numbering mode, probably each ~\vadjust~ 
+% coming from a \LaTeX\ command should be ~\PostponeVadjust~. 
+% ~\marginpar~s and floats seem to be the only cases which 
+% are not explicitly dealt with in the present section. 
+% This would be a way to avoid ~\@LN@nobreaktrue~! 
+% Of course, the ~\vadjust~s that the present package uses 
+% then must be replaced by ~\@LN@@vadjust~.---Maybe 
+% next time.      (/UL) 
+%%                                                               %% TODO v4.4+ 
+% 
+% The next command and something else will be added to the 
+% \LaTeX\ commands we are concerned with here. 
+
+\DeclareRobustCommand\@LN@changevadjust{% 
+  \ifvmode\else\ifinner\else 
+    \global\let\vadjust\PostponeVadjust 
+  \fi\fi 
+} 
+ 
+% (UL) What about math mode? Math display? Warn? (/UL) 
+%%                                                               %% TODO v4.4+
+% 
+% ~\@tempa~ will now become a two place macro which adds first 
+% argument (single token), enclosed by ~\ifLineNumbers~\,\dots
+% ~\fi~ to the left of second argument. As long as we need it, 
+% we can't use the star form of ~\DeclareRobustCommand~ or 
+% the like, because AMS-\LaTeX\ uses ~\@tempa~ for ~\@ifstar~. 
+% (New v4.41) And for the same reason, that ~\CheckCommand*~ 
+% had to be raised! (/New v4.41)
+
+\CheckCommand*\@parboxrestore{\@arrayparboxrestore\let\\\@normalcr}
+
+\def\@tempa#1#2{% 
+  \expandafter \def \expandafter#2\expandafter{\expandafter
+    \ifLineNumbers\expandafter#1\expandafter\fi#2}% 
+} 
+
+% (UL)              This ~\ifLineNumber~ can be fooled by 
+% ~\linenumbers~ ahead etc. It might be better to place 
+% a signal penalty in any case and let the output routine 
+% decide what to do. 
+%% 
+%% And when this has been done, remove warnings about this. 
+% (/UL) 
+% 
+% We use the occasion to switch off linenumbers where they 
+% don't work anyway and where we don't want them, 
+% especially in footnotes: 
+
+\@tempa\nolinenumbers\@arrayparboxrestore 
+
+% We hope this suffices $\dots$ let's check one thing 
+% at least: [(New v4.41) see ~\CheckCommand~ above (/New v4.41)]
+% 
+% Now for the main theme of the section. 
+% The next lines assume that ~\vspace~, ~\pagebreak~, and 
+% ~\nopagebreak~ use ~\vadjust~ whenever they occur outside 
+% vertical mode; moreover, that they don't directly read 
+% an argument. Indeed ~\pagebreak~ and ~\nopagebreak~ first 
+% call something which tests for a left bracket ahead, 
+% while ~\vspace~ first tests for a star. 
+
+\@tempa\@LN@changevadjust\vspace 
+\@tempa\@LN@changevadjust\pagebreak 
+\@tempa\@LN@changevadjust\nopagebreak 
+
+% ~\\~, however, uses ~\vadjust~ only in star or optional form. 
+% We relax independency of implementation in assuming 
+% that ~\@normalcr~ is the fragile version of ~\\~ 
+% (and we use ~\@ifstar~!). 
+%%
+%% \@ifstar reimplemented 1995/10/16, but seems to be much older. 
+%% TODO v4.4+: 
+%% \def\@LN@cr{% 
+%%   \@ifnextchar*{\@LN@changevadjust\@normalcr}% 
+%%      {\@ifnextchar[{\@LN@changevadjust\@normalcr}\@normalcr}% 
+%% } 
+%% ---same number of tokens, expansion step less. 
+%%
+% (Using a copy of ~\\~ would be safer, but an ugly repetition 
+% of ~\protect~.) 
+%%                                                               %% TODO v4.4+ 
+
+\DeclareRobustCommand\\{% 
+  \ifLineNumbers 
+    \expandafter \@LN@cr 
+  \else 
+    \expandafter \@normalcr 
+  \fi 
+} 
+\def\@LN@cr{% 
+  \@ifstar{\@LN@changevadjust\@normalcr*}% 
+          {\@ifnextchar[{\@LN@changevadjust\@normalcr}\@normalcr}% 
+} 
+
+% Moreover we hope that ~\newline~ never leads to a ~\vadjust~, 
+% although names of some commands invoked by ~\\~ contain 
+% ~newline~. At last, this seems to have been OK since 1989 or 
+% even earlier. 
+% 
+%                                                        \modulolinenumbers[1]
+%                                                          \firstlinenumber{0} 
+% Let's have a few tests.\vspace*{.5\baselineskip} 
+% Testing ~\pagebreak~ and ~\nopagebreak~ would be too expensive 
+% here, but---oops!---we have just experienced a successful 
+% ~\vspace*{.5\baselineskip}~. A 
+% ~\\*[.5\baselineskip]~\\*[.5\baselineskip] may look even more 
+% drastical, but this time we are happy about it. Note that the 
+% line numbers have moved with the lines. Without our changes, 
+% one line number\vadjust{\kern.5\baselineskip} would have 
+% ``anticipated'' the move of the next line, just as you can 
+% observe it now. 
+% (/New v4.00) 
+% 
+%                                                           \switchlinenumbers 
+% 
+%                                                                \subsection{% 
+%               Reminder on obsoleteness 
+%                                                                     \unskip} 
+% 
+% (New v4.1)    We have completed inclusion of the earlier 
+% extension packages ~linenox0.sty~, ~linenox1.sty~, and 
+% ~lnopatch.sty~. If one of them is loaded, though, 
+% we produce an error message before something weird happens. 
+% We avoid ~\newif~ because the switchings occur so rarely. 
+
+\AtBeginDocument{% 
+  \let\if@LN@obsolete\iffalse 
+  \@ifpackageloaded{linenox0}{\let\if@LN@obsolete\iftrue}\relax 
+  \@ifpackageloaded{linenox1}{\let\if@LN@obsolete\iftrue}\relax 
+  \@ifpackageloaded{lnopatch}{\let\if@LN@obsolete\iftrue}\relax
+  \if@LN@obsolete 
+    \PackageError{lineno}{Obsolete extension package(s)}{% 
+    With lineno.sty version 4.00 or later,\MessageBreak 
+    linenox0/linenox1/lnopatch.sty must no longer be loaded.}% 
+  \fi 
+} 
+
+% 
+%                                                        \modulolinenumbers[1]
+%                                                                   \section{%
+%               The final touch
+%                                                                     \unskip}
+%
+% There is one deadcycle for each line number.
+
+\advance\maxdeadcycles 100
+
+\endinput
+
+% 
+%                                                                   \section{%
+%               The user commands
+%                                                   \unskip}\label{s:UserCmds} 
+% 
+% The user commands to turn on and off line numbering 
+% are 
+%                                                     \begin{description}\item
+% [|\linenumbers]                                                       \ \par
+%     Turn on line numbering in the current mode.
+%
+%                                                                        \item 
+% [|\linenumbers*]                                              \ \par$\qquad$
+%        and reset the line number to 1.
+%                                                      \def\NL{<number>]}\item 
+%%                         %% Boldface italic occurs here, which is evil. (UL) 
+% [|\linenumbers[\NL]                                           \ \par$\qquad$
+%        and start with <number>.  
+%                                                                        \item
+% [|\nolinenumbers]                                                     \ \par
+%     Turn off line numbering.
+%                                                                        \item
+% [|\runninglinenumbers*[\NL]                                           \ \par
+%     Turn on ~running~ line numbers, with the same optional
+%     arguments as ~\linenumbers~.  The numbers are running
+%     through the text over pagebreaks.  When you turn
+%     numbering off and on again, the numbers will continue,
+%     except, of cause, if you ask to reset or preset the
+%     counter.
+%                                                                        \item
+% [|\pagewiselinenumbers]                                               \ \par
+%     Turn on ~pagewise~ line numbers.  The lines on each
+%     page are numbered beginning with one at the first
+%     ~pagewise~ numbered line.
+%                                                                        \item
+% [|\resetlinenumber[\NL]                                               \ \par
+%     Reset ~[~Set~]~ the line number to 1
+%     ~[~<number>~]~.
+%                                                                        \item
+% [|\setrunninglinenumbers]                                             \ \par
+%     Switch to ~running~ line number mode. Do \emph{not}
+%     turn it on or off.
+%                                                                        \item
+% [|\setpagewiselinenumbers]                                            \ \par
+%     Switch to ~pagewise~ line number mode. Do \emph{not}
+%     turn it on or off.
+%                                                                        \item
+% [|\switchlinenumbers*]                                                \ \par
+%     Causes margin switching in pagewise modes. With the
+%     star,  put the line numbers on the inner margin.
+%                                                                        \item
+% [|\leftlinenumbers*]                                                  \ \par
+%                                                                        \item
+% [|\rightlinenumbers*]                                                 \ \par
+%     Set the line numbers in the left/right margin. With the
+%     star this works for both modes of operation, without
+%     the star only for the currently selected mode. 
+%                                                                        \item
+% [|\runningpagewiselinenumbers]                                        \ \par
+%     When using the pagewise line number mode,  do not
+%     subtract the page offset.  This results in running
+%     line numbers again,  but with the possibility to switch
+%     margins.  Be careful when doing line number
+%     referencing,  this mode status must be the same while
+%     setting the paragraph and during references.
+%                                                                        \item
+% [|\realpagewiselinenumbers]                                           \ \par
+%     Reverses the effect of ~\runningpagewiselinenumbers~.
+%                                                                        \item
+% [|\modulolinenumbers[\NL]                                             \ \par
+%     Give a number only to lines which are multiples of
+%     ~[~<number>~]~.  If <number> is not specified, the
+%     current value in the counter ~linenumbermodulo~ is
+%     retained.  <number>=1 turns this off without changing
+%     ~linenumbermodulo~.  The counter is initialized to 5.
+%%
+%%                               %% TODO v4.4+: `counter', he says. Cf._above. 
+%%
+%%                                                                 (New v4.31) 
+%                                                                        \item
+% [|\modulolinenumbers*[\NL]                                            \ \par 
+%     Like ~\modulolinenumbers~, the only difference being 
+%     that the first line number after a ~\linenumbers~ 
+%     (or ~\runninglinenumbers~, ~\pagewiselinenumbers~, 
+%     ~\quotelinenumbers~) is printed regardless of the 
+%     modulo---yet `1' is printed only after (or \dots) 
+%     ~\firstlinenumber{1}~. 
+%     This also applies to the first line of a 
+%     ~{linenumbers}~ or respective environment. 
+%     See subsection_\ref{ss:Mod} for another explanation. 
+%     The behaviour may be unsatisfactory with pagewise 
+%     line-numbering. 
+%%                                                                (/New v4.31) 
+%%                                                                 (New v4.00)
+%                                                                        \item
+% [|\firstlinenumber]                                                   \ \par 
+%     ~\firstlinenumber{~<filino>~}~ brings about that 
+%     (after it) line numbers less than <filino> do 
+%     \emph{not} appear in the margin. Moreover, with 
+%     ~\modulolinenumbers[~<number>~]~, just the line 
+%     numbers which are <filino> plus a multiple of 
+%     <number> are printed.---If you had 
+%     ~\firstlinenumber{~<pos>~}~ with some $\mbox{<pos>}>0$ 
+%     and want to switch to printing multiples of, e.g., 
+%     4, you best do ~\modulolinenumbers[4]~ and 
+%     ~\firstlinenumber{0}~. (See subsection_\ref{ss:Mod} 
+%     for technical details.) 
+%%                                                                (/New v4.00) 
+%                                                                        \item
+% [|\linenumberdisplaymath]                                             \ \par
+%     Number the lines of a display math in a ~{linenomath}~
+%     environment, but do not in a ~{linenomath*}~
+%     environment.  This is used by the package option
+%     ~[mathlines]~. 
+%                                                                        \item
+% [|\nolinenumberdisplaymath]                                           \ \par
+%     Do not Number the lines of a display math in a
+%     ~{linenomath}~ environment, but do in a
+%     ~{linenomath*}~ environment.  This is the default.
+%                                                                        \item
+% [|\linelabel]                                                         \ \par
+%     Set a ~\linelabel{~<foo>~}~ to the line number where
+%     this commands is in.  Refer to it with the \LaTeX\
+%     referencing commands ~\ref{~<foo>~}~ and
+%     ~\pageref{~<foo>~}~.
+%                                                            \end{description}
+% The commands can be used globally, locally within groups
+% or as environments.  It is important to know that they 
+%%
+%%                                                %% TODO: \linelabel? others? 
+%%
+% take action only when the ~\par~ is executed.  The
+%%
+%%                     %% TODO: sure? ~\modulo...~, e.g.? well, in a sense ... 
+%%
+% ~\end{~<mode>~linenumbers}~ commands provide a ~\par~.
+% Examples:
+%                                                                \begin{verse}
+%   ~{\linenumbers~  <text> ~\par}~                                         \\
+%                                                                         \ \\
+%   ~\begin{linenumbers}~                                                   \\
+%       <text>                                                              \\
+%   ~\end{linenumbers}~                                                     \\
+%                                                                         \ \\
+%   <paragraph> ~{\linenumbers\par}~                                        \\
+%                                                                         \ \\
+%   ~\linenumbers~                                                          \\
+%     <text> ~\par~                                                         \\
+%   ~\nolinenumbers~                                                        \\
+%                                                                         \ \\
+%   ~\linenumbers~                                                          \\
+%   <paragraph> ~{\nolinenumbers\par}~                                      \\
+%                                                                  \end{verse}
+% (New v4.00) 
+% However, the examples containing <paragraph> show what you 
+% should \emph{not} do, at least if you use ~\pagebreak~, 
+% ~\nopagebreak~, ~\vspace~, ~\\*~ or 
+% ~\\[~<space>~]~---cf._section_\ref{s:MVadj}. 
+%
+% The same care should be applied to the ``wizard'' devices 
+% ~\ifLineNumbers~ (subsection_\ref{ss:OnOff}) and
+% ~\PostponeVadjust~ (section_\ref{ss:PVadj}). 
+%  (/New v4.00) 
+% 
+% (New v4.11) Oh, and the commands and environments of 
+% section_{s:Xt} are missing. Sorry, I am in a hurry now. 
+% May be next time.%                                             %% TODO v4.4+ 
+% ---And the  environments ~{linenomath}~ and ~{linenomath*}~should 
+% get an own paragraph. In short, each math display, equation, 
+% or ~{eqnarray}~ should be ``wrapped'' in one of ~{linenomath}~ 
+% and ~{linenomath*}~. 
+% 
+%                                                                \subsection{%
+%                 Customization hooks
+%                                                                     \unskip} 
+% 
+% There are several hooks to customize the appearance of the
+% line numbers, and some low level hooks for special
+% effects. 
+%                                                     \begin{description}\item
+% [|\thelinenumber]                                                     \ \par
+%     This macro should give the representation of the line
+%     number in the \LaTeX-counter ~linenumber~.  The
+%     default is provided by \LaTeX:                              \par$\qquad$
+%         ~\arabic{linenumber}~
+%                                                                        \item
+% [|\makeLineNumberLeft]                                                \ \par
+%     This macro is used to attach a line number to the left
+%     of the text page.  This macro should fill an ~\hbox to 0pt~ 
+%     which will be placed at the left margin of the
+%     page, with the reference point aligned to the line to
+%     which it should give a number.  Please use the macro
+%     ~\LineNumber~ to refer to the line number. 
+%
+%     The default definition is                                   \par$\qquad$
+%         ~\hss\linenumberfont\LineNumber\hskip\linenumbersep~
+%                                                                        \item
+% [|\makeLineNumberRight]                                               \ \par
+%     Like ~\makeLineNumberLeft~, but for line numbers on
+%     the right margin.
+%
+%     The default definition is                                   \par$\qquad$
+%        ~\linenumberfont\hskip\linenumbersep\hskip\textwidth~    \par$\qquad$
+%        ~\hbox to\linenumberwidth{\hss\LineNumber}\hss~
+%                                                                        \item
+% [|\linenumberfont]                                                    \ \par
+%     This macro is initialized to                                \par$\qquad$
+%         ~\normalfont\tiny\sffamily~
+%                                                                        \item
+% [|\linenumbersep]                                                     \ \par
+%     This dimension register sets the separation of the
+%     linenumber to the text. Default value is ~10pt~.
+%                                                                        \item
+% [|\linenumberwidth]                                                   \ \par
+%     This dimension register sets the width of the line
+%     number box on the right margin.  The distance of the
+%     right edge of the text to the right edge of the line
+%     number is ~\linenumbersep~ + ~\linenumberwidth~. The
+%     default value is ~10pt~.  
+%                                                                        \item
+% [|\theLineNumber] (for wizards)                                       \ \par
+%     This macro is called for printing a ~\newlabel~ entry
+%     to the aux-file.  Its definition depends on the mode.
+%     For running line numbers it's just ~\thelinenumber~,
+%     while in pagewise mode, the page offset subtraction
+%     is done in here.
+%                                                                        \item
+% [|\makeLineNumber] (for wizards)                                      \ \par
+%     This macro produces the line numbers.  The definition
+%     depends on the mode.  In the running line numbers
+%     mode it just expands ~\makeLineNumberLeft~.
+%                                                                        \item
+% [|\LineNumber] (for wizards)                                          \ \par
+%     This macro is called by ~\makeLineNumber~ to typeset
+%     the line number.  This hook is changed by the modulo
+%     mechanism 
+%%                                                                        %%%.
+%     and by ~\firstlinenumber~. 
+%%                                                                %% New v4.00 
+%                                                            \end{description}
+%% 
+%% TODO: \stepLineNumber---another wizard command!? 
+%% Not sure, may be retreated. 
+%                                                             \end{document}%D
+------------------------------------------------------------------------------
+                                                                       %SSTOPP
+%% TODO v4.4+:  Check for unwanted comment marks in new comments 
+%%             (resulting from manual aligning): search `New v4.2' 
+%%             and/or ` % '! 
+%% TODO v4.4+:  Check for missing comment marks where a paragraph 
+%%             should end/start. Also to prevent empty "code" lines. 
+%%             Especially, new comments at section ends must be 
+%%             followed by comment mark lines. 
+%%             And prevent ~\par~s from blank lines in definitions! 
+%%             See `visual space' above. 
+%%             For proper appearance in lineno.tex, note that a comment 
+%%             in a final code line changes behaviour. 
+%% TODO v4.4+:  Require README for redistribution? 
+%% TODO v4.4+:  Since discussions of code have increased so much, it 
+%%             would be appropriate not to give to this file 
+%%             extension `.sty' (e.g., `dty'!??). ?? Is quickly read though! 
+%%             A .sty extraction may be possible even if the present 
+%%             file is neither a .doc nor a .dtx. (!???) 
+%%             Use awk line below (etc.) for .doc at least; + .ins or so. 
+%%                 ^ must not be caps! To escape awk. 
+%% TODO v4.4+:  Underfull lines!? (due to long code quotations) 
+%% TODO v4.4+:  Sometimes paragraph indents may be appropriate. 
+%% TODO        Swap first line (`\iffalse...') with corresponding below. 
+               Or do *not* swap, maybe nawk is more reliable. 
+%% TODO v4.4+:  Ponder Stephan's mail from 2004/09/02. 
+%% TODO v4.4+: 
+%% use \@ET@makeLineNumber. 
+%% plus almost all `(UL)' 
+%% plus lots of bad boxes messages 
+%% change v4.3 TODOs when postponed 
+%% remove {old} environments. 
+
+------------------------------------------------------------------------------
+
+# awk command lines for v4.00, mixed with former ones: 
+
+echo "Don't bother about unknown 'iffalse'."                  # SHELL1 
+nawk '/A[W]K/' lineno.sty | nawk -f - lineno.sty >lineno.tex; # SHELL1
+latex lineno; latex lineno; latex lineno; latex lineno;       # SHELL1
+
+BEGIN{DOC=-1;                                     # AWK DOC A W K
+ BEGINCODE = "\\begin{code}\\begin{verbatim}";    # AWK
+ ENDCODE   = "\\end{verbatim}\n\\end{code}";   }  # AWK
+ BEGINCODE = "%    \\begin{macrocode}";           #     DOC A W K
+ ENDCODE   = "%    \\end{macrocode}";          }  #     DOC A W K
+/^[ \t]*$/ { ECNT++; next; }                      # AWK DOC A W K
+/\\documentclass/{ sub("article","ltxdoc") }      #     DOC A W K
+/%D$/      { sub("^%* *",""); sub("%D$","");      #     DOC A W K
+             print > "lineno.drv"; next        }  #     DOC A W K
+/^%%/      { next; }                              # AWK DOC A W K
+/^%/       { if (!DOC) { print ENDCODE; }         # AWK DOC A W K
+             DOC=1; ECNT=0;                       # AWK DOC A W K
+             sub("^% *","");                      # AWK
+             sub("^% *","% ");                    #     DOC A W K
+             print; next;                      }  # AWK DOC A W K
+/%VERSION/ { sub("%VERSION",""); print; next; }   # AWK 
+/%SSTOPP/  { exit }                               # AWK 
+DOC<0      { next }                               # AWK DOC A W K
+/^-+-$/    { if (!DOC) print ENDCODE; exit }      # AWK DOC A W K
+{ if (DOC) { ECNT=DOC=0; print BEGINCODE; }       # AWK DOC A W K
+  while (ECNT>0) { print " "; ECNT--; }           # AWK DOC A W K
+  print $0;                                    }  # AWK DOC A W K
+
+# New v4.00, UL: know nothing about awk; found present solution 
+# in hours of trial and error. 
+
+% Earlier (should be inhibited by %SSTOPP above and otherwise): 
+echo "expect errors for unknown commands 'iffalse' and 'fi'";# SHELL0 SHELL#1 
+awk '/A[W]K/' lineno.sty | awk -f - lineno.sty >lineno.tex;  # SHELL0
+latex lineno; latex lineno; latex lineno; latex lineno;      # SHELL0
+nawk '/A[W]K/' lineno4.sty | nawk -f - lineno4.sty >lineno4.tex;  # SHELL#1
+latex lineno4; latex lineno4; latex lineno4; latex lineno4;       # SHELL#1
+
+awk '/DOC A [W] K/' lineno.sty | awk -f - lineno.sty >lineno.doc; # DOC SH
+
+BEGIN{DOC=-1;                                     # A#WK DOC A W K
+ BEGINCODE = "\\begin{code}\\begin{verbatim}";    # A#WK
+ ENDCODE   = "\\end{verbatim}\n\\end{code}";   }  # A#WK
+ BEGINCODE = "%    \\begin{macrocode}";           #     DOC A W K
+ ENDCODE   = "%    \\end{macrocode}";          }  #     DOC A W K
+/^[ \t]*$/ { ECNT++; next; }                      # A#WK DOC A W K
+/\\documentclass/{ sub("article","ltxdoc") }      #     DOC A W K
+/%D$/      { sub("^%* *",""); sub("%D$","");      #     DOC A W K
+             print > "lineno.drv"; next        }  #     DOC A W K
+/^%%/      { next; }                              # A#WK DOC A W K
+/^%/       { if (!DOC) { print ENDCODE; }         # A#WK DOC A W K
+             DOC=1; ECNT=0;                       # A#WK DOC A W K
+             sub("^% *","");                      # A#WK
+             sub("^% *","% ");                    #     DOC A W K
+             print; next;                      }  # A#WK DOC A W K
+DOC<0      { next }                               # A#WK DOC A W K
+/^-+-$/    { if (!DOC) print ENDCODE; exit }      # A#WK DOC A W K
+{ if (DOC) { ECNT=DOC=0; print BEGINCODE; }       # A#WK DOC A W K
+  while (ECNT>0) { print " "; ECNT--; }           # A#WK DOC A W K
+  print $0;                                    }  # A#WK DOC A W K
+
+
+------------------------------------------------------------------------------
+
+If you are looking here because of the two top lines of the file: 
+
+A .tex documentation of this macro file can be obtained by 
+
+    sh lineno.sty 
+
+under UNIX.--You may find this hint little helpful. One 
+reason may be that the awk versions to which you have access 
+don't work suitably. Another reason may be that you don't have 
+access to UNIX (in some sense). However, a .tex, .dvi, or .pdf 
+version of such a documentation should be available from CTAN, 
+in the same folder as the present file. When we typed this, that 
+folder was /macros/latex/contrib/lineno. If this has changed in 
+the meantime, a CTAN search should lead you to a folder 
+containing such a documentation. Or you may get help from one of 
+the e-mail addresses above. 
+
+




