Annotation of ttbar/p20_taujets_note/lineno.sty, revision 1.1.1.1

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>