Annotation of ttbar/p20_taujets_note/lineno.tex, revision 1.1

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

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