diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-09 00:44:40 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-09 00:44:40 +0000 |
commit | b4fc5f639874db951177ec539299d20908adb654 (patch) | |
tree | 52f08823ca58fffe3db6a9b075635038c567626c /Master/texmf-dist/doc/latex/lineno | |
parent | dec3d98ebe442d7ea93efbaa8dd2e2be8149a467 (diff) |
doc 4
git-svn-id: svn://tug.org/texlive/trunk@80 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/latex/lineno')
-rw-r--r-- | Master/texmf-dist/doc/latex/lineno/CHANGES.txt | 148 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/lineno/COPYING.txt | 24 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/lineno/README.txt | 192 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/lineno/lineno.pdf | bin | 0 -> 283385 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/lineno/lineno.tex | 3167 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/lineno/lnosuppl.pdf | bin | 0 -> 164167 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/lineno/lnosuppl.tex | 92 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/lineno/ulineno.pdf | bin | 0 -> 142217 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/lineno/ulineno.tex | 984 |
9 files changed, 4607 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/lineno/CHANGES.txt b/Master/texmf-dist/doc/latex/lineno/CHANGES.txt new file mode 100644 index 00000000000..b8e2ea69241 --- /dev/null +++ b/Master/texmf-dist/doc/latex/lineno/CHANGES.txt @@ -0,0 +1,148 @@ +CHANGES for lineno.sty v4.4 2005/10/27: + +1. Proper effective line depth at end of paragraphs. + The spacing bug was quite obvious in two-column mode + when a paragraph end was at a column bottom. + +2. Another bug concerning two-column mode that had been + introduced in v4.22 has been removed again. + +3. Support for \addvspace introduced more and more bugs + in versions of v4.32 and v4.33. The reasons seem to + be clear now, and v4.4 should be stable. + + +CHANGES for lineno.sty v4.32 2005/10/17: + +1. Support for \addvspace + (a math display or a list meets a heading -- or a sub-heading + follows a heading -- or the like) + +2. Clearly explained former option `displaymath' and its change + to a default. + + +CHANGES for lineno.sty v4.31 2005/10/01: + +1. \modulolinenumbers* and a package option `modulo*' for + printing first line number after interrupting editor's + text, regardless of the modulo. + +2. Improved explanation of \firstlinenumber and package + options. + + +CHANGES for lineno.sty v4.3 2005/05/16: + +1. Option `displaymath' (proper numbering at paragraphs + containing math displays) becomes default. + +2. Compatibility with hyperref now indeed (at least much more). + +3. Tidied up documentation: terrible confusion of \newcounter + vs. \stepcounter; sections on the same matter written at + different times; ... + +4. Additional internal improvements that perhaps hardly are + observable (no more spurious linenumbers in math displays + from vertical mode; some compatibity with packages that use + \holdinginserts; \linelabel in headings etc.). + + +CHANGES for lineno.sty v4.22 2005/05/09: + +1. Restored "global" version of numbering lines of a \parbox or + minipage or ... (I had missed and disabled this in taking + over lineno.sty), explained in documentation (lineno.pdf/dvi + subsec. 7.2). + +2. Enabled \flushbottom in two-column pagewise or switching + mode. + +3. Re-implemented modulo mode -- disabling certain users' tricks + see lineno.pdf sec. 5.5, also for a still supported + substituting trick. + +4. Tidied up setting the next line number globally vs. locally + (TeXbook p. 301). + +5. Tidied up discussions (in documentation) of possible changes + in implementation. + + +CHANGES for lineno.sty v4.21 2005/04/28: + +Removed serious flaws with math display, + something ... + + +CHANGES for lineno.sty v4.2 2005/04/26: + +1. Re-enabled package option `displaymath' (needed rearrangement + after sec. 5). + +2. New package option `addpageno' for adding page numbers to + line number references -- see sec. 6.1 of lineno.pdf. + +3. Improved support for \includeonly (and improved sec. 5.3, + p. 27). + +4. Improved compatibility with other packages that change \output + (tameflts.sty, e.g., for saving footnotes against \marginpar + and floats), added advice on this matter -- sec. 2.3, + pp. 7, 14f. + + +CHANGES for lineno.sty v4.11 2005/03/08: + +1. The `edtable' option now supports math environments like +`array'. This requires updating edtable.sty to v1.3. (The claim +in previous versions of edtable on this support simply was +wrong, sorry.) For how to make use of this support, we urge you +to read the usage instructions in edtable.sty (v1.3). These have +been extended very much, structured more clearly, and supplied +with examples. + +2. \linelabel now complains when appearing outside line +numbering mode. This counters Stephan Boettcher's original +intention, but I generalize from my own experience that it is +helpful to be told when you have forgotten to switch into line +numbering mode and (e.g.) wonder why all the line number +references are 1 ... ednotes.sty users profit as well (at least +I expect and hope that anybody profits, which, to be sure, does +not mean that I hope that anybody forgets to switch ...). + +3. The subsection on `edtable' in lineno.sty/tex/pdf was not +quite correct or complete -- corrected, improved. + +4. The final list of user commands in lineno.sty/tex/pdf has not +been complete. This has not changed, but it is briefly explained +what is missing and where it can be found. + + +CHANGE 2005/01/20: + +We have devised macros for indexing with line numbers, +yet we don't take the time to release them officially. +If you are interested, please ask via + + http://contact-ednotes.sty.de.vu + + +CHANGES for lineno.sty v4.1 2004/10/19: + +Extension packages from the Ednotes bundle for enabling +\linelabel in math mode and tabular environments are now +handled through new package options `mathrefs', `edtable', +`longtable', and `nolongtablepatch'. Two of these extension +packages moved from the ednotes folder to the lineno folder. +lineno.tex/pdf has been updated accordingly. + + +CHANGES for lineno.sty v4.00 2004/09/03: + +o incorporated earlier extension packages linenox0.sty, + linenox1.sty, lnopatch.sty (which belonged to the + Ednotes bundle before); + +o adopted LaTeX Project Public License v1.3. + diff --git a/Master/texmf-dist/doc/latex/lineno/COPYING.txt b/Master/texmf-dist/doc/latex/lineno/COPYING.txt new file mode 100644 index 00000000000..48dca4a88f7 --- /dev/null +++ b/Master/texmf-dist/doc/latex/lineno/COPYING.txt @@ -0,0 +1,24 @@ +% lineno.sty +% +% The files in this directory are +% +% Copyright 1995--2003 Stephan I. B"ottcher <boettcher@physik.uni-kiel.de>; +% Copyright 2002--2005 Uwe L"uck, http://contact-ednotes.sty.de.vu, +% for versions 4.x and code from former Ednotes +% bundle--author-maintained. +% +% The files can be redistributed and/or modified under +% the terms of the LaTeX Project Public License; either +% version 1.3a of the License, or any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% We did our best to help you, but there is NO WARRANTY. +% +% ============================================================================ +<- (UL) End of official declaration. + +History: +This file -> The files 2004/10/12 ul +$Id: COPYING,v 3.0.2.1 2004/09/13 20:15:47 stephan Exp $ +LPPL v1.3a 2004/10/26 + diff --git a/Master/texmf-dist/doc/latex/lineno/README.txt b/Master/texmf-dist/doc/latex/lineno/README.txt new file mode 100644 index 00000000000..5050f8dbd58 --- /dev/null +++ b/Master/texmf-dist/doc/latex/lineno/README.txt @@ -0,0 +1,192 @@ +README + lineno.sty v4.31 + + 2005-10-03 + +The LaTeX package lineno.sty provides line numbers on paragraphs. +After TeX has broken a paragraph into lines there will be line numbers +attached to them, with the possibility to make references through the +LaTeX \ref, \pageref cross reference mechanism. + +% Copyright 1995--2003 Stephan I. B"ottcher <boettcher@physik.uni-kiel.de>; +% Copyright 2002--2005 Uwe L"uck, http://www.contact-ednotes.sty.de.vu, +% for versions 4.x and code from former Ednotes +% bundle--author-maintained. +% +% The files listed below can be redistributed and/or modified under +% the terms of the LaTeX Project Public License; either +% version 1.3a of the License, or any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% We did our best to help you, but there is NO WARRANTY. + +** [ UL: A few festive words on history and responsibility ** +** are next preceding hard facts as to (see lower) ** +** o `Files' and ** +** o `Installation and usage'. ] ** + +2004-09-13 Uwe L"uck [(UL)] is new maintainer for lineno.sty. + +lineno.sty served the purpose for which I wrote it years ago. Uwe +L"uck uses lineno.sty with his Ednotes package, which required quite a +few changes and fixes. His package depends on lineno, therefore +Uwe agreed to take over the maintenance of lineno.sty. + +lineno.sty v4.0 includes most of the well tested changes that Uwe +needs for Ednotes. These changes blend well into the concepts of the +package, so I am happy to let it go. + +From here on it is Uwe's, and he may proceed to mangle it as he likes. +Expect some radical changes. You may find him to be quite a bit +friendlier towards the poor souls who still use Windows :-). +Currently, you need some kind of Unix environment to extract the +source documentation from the sty file. + +If some version 3 users run into difficulties with Uwe's newer +versions, but need a minor bug-fix in version 3, please do not +hesitate to ask me for help. But all requests for new features or +major changes shall go to Uwe. + +Cheers +Stephan + + +[ Thanks! And please let me know as well should + compatibility problems arise! The announced radical + changes are postponed again this time (v4.1). + --Ednotes is in CTAN:macros/latex/contrib/ednotes. + Uwe ] + + + +Changes: + + 2004-10-19 UL: package options for tabular and math + 2004-09-03 UL: merge Ednotes changes, taking over lineno.sty + + 2002 .. 2003 FMi, UL, SiB: bug fixes + 2001-08-04 SiB: linenomath wrapping for \[ \] + 2001-07-30 SiB: [hyperref] option obsolete. + 2001-01-17 SiB: LaTeX class option [twocolumn] support + 2001-01-04 SiB: LaTeX class option [fleqn] support + 2000-12-18 SiB: longtable compatibility + 2000-07-01 SiB: extra \newlabel items, [hyperref] option + 2000-03-10 SiB: indirect call of \output, to work with multicol. + 1999-08-28 SiB: fixed the footnote problem using \holdinginserts + 1999-06-11 SiB: included the extensions into lineno.sty + 1999-03-02 SIB: Added LPPL License + + +Files: + + README This file. (v4.1: UL) + CHANGES Differences to previous versions. (v4.1: UL) + COPYING The LPPL header. + lineno.sty The package itself, ready to use. + edtable.sty Module for tabular environments. (UL, v4.1) + ednmath0.sty Module for \linelabel in math mode. (UL, v4.1) + lineno.tex The source for the documentation. + lineno.pdf PDF deriving from the former. (v4.1: UL) + lnosuppl.pdf PDF listing of present non-PDF files + ulineno.tex The pathetic attempt of a users' manual. + [Describes v3.1 currently.] (UL, v4.1) + ulineno.pdf PDF of former. + vplref.sty Conditionally include page number in + line number references (UL, v4.2) + + As of version v3.00, the extension packages for lineno have all been + incorporated into lineno.sty itself. Except for itemrule.sty, + which was removed. + +Home: + + CTAN:macros/latex/contrib/lineno + +Authors: + + Uwe L"uck <http://contact-ednotes.sty@web.de> + Stephan I. B"ottcher <boettcher@physik.uni-kiel.de> + +Compatibility with other packages: + + wrapfig.sty works since v2.05 + + multicol.sty works partly since 3.02. + Do NOT use \linelabel. Do NOT put a multicol in + internal vertical mode {table}, {figure}, etc. + + hyperref.sty \ref to a \linelabel works since v3.03. + + longtable.sty broke with lineno.sty loaded, but not enabled. + This is fixed in v3.04. + +Installation and usage (UL, v4.1): + + For being able to use ALL the new lineno.sty options, the + following files must be "visible" to (La)TeX ("visible" + explained below for beginners): + + lineno.sty, edtable.sty, ednmath0.sty, ltabptch.sty + + as above ("Home", note that clicking on "entire directory" + suffices); + + longtable.sty -- from the standard LaTeX Tools bundle. + + Usage always starts with loading lineno.sty by \usepackage. + The remaining .sty files are loaded automatically on the + lineno.sty options (and we recommend not to load them through + [the mandatory argument of] \usepackage). + + For details, see lineno.tex/pdf and the .sty files mentioned + above--search especially for tabular and math mode. + (+ `print' below here). + + "Visible to (LaTeX)": Some users don't understand this + "visibility" for a while, and indeed it may be somewhat + non-trivial. These users may find help in + + CTAN:macros/latex/ednotes/visible.txt . + + E.g., former users of lineno.sty may just put all the .sty + files into the folder (at their workplace) where they had + placed lineno.sty before. (/UL, /v4.1) + +To print the documented source: + + Take the style-file `lineno.sty', and feed it to a Un*x shell. + (Or download the extracted source documentation `lineno.tex'.) + + csh> source ./lineno.sty + sh> . ./lineno.sty + + [ I.e., type `sh lineno.sty' (e.g.) as a UNIX command line. + Problems with awk may arise. I therefore switched to nawk + in lineno.sty v4.00, but this may trouble you as well. (UL) ] + + (Please ignore the error message at the beginning about the iffalse.) + + +Please have a look at a similar work of Michal Jaegermann and James +Fortune: + CTAN:macros/latex/contrib/numline/ + + + + + +============================================================================== +<- End of official README.txt (UL) + +Changes for v4.1 (Oct. 2004): minor fixes (removed `supported/', e.g.); +bracketed text; lines with `(UL)'; redistribution with README only. +Formerly: + + lineno.sty v4.0 + + $Id: README,v 3.6.2.1 2004/09/13 20:15:47 stephan Exp $ + + CTAN:macros/latex/contrib/supported/lineno + CTAN:macros/latex/contrib/supported/numline/ + + diff --git a/Master/texmf-dist/doc/latex/lineno/lineno.pdf b/Master/texmf-dist/doc/latex/lineno/lineno.pdf Binary files differnew file mode 100644 index 00000000000..6307ebe9773 --- /dev/null +++ b/Master/texmf-dist/doc/latex/lineno/lineno.pdf diff --git a/Master/texmf-dist/doc/latex/lineno/lineno.tex b/Master/texmf-dist/doc/latex/lineno/lineno.tex new file mode 100644 index 00000000000..428b5d5d8a5 --- /dev/null +++ b/Master/texmf-dist/doc/latex/lineno/lineno.tex @@ -0,0 +1,3167 @@ +\def\fileversion{v4.4} \def\filedate{2005/10/27} + +\title{\texttt{\itshape +lineno.sty \ \fileversion\ \filedate +\unskip}\\\ \\ +A \LaTeX\ package to attach +\\ line numbers to paragraphs +\unskip}\author{% +Stephan I. B\"ottcher +\\ Uwe L\"uck +\unskip}\date{% +boettcher@physik.uni-kiel.de +\\ http://contact-ednotes.sty.de.vu +\\} + +\documentclass[a4paper,12pt]{article}%D +\usepackage{lineno}%D +\catcode`\_\active\let_~ +\def~{\verb~} +\let\lessthan< +\catcode`\<\active +\def<#1>{$\langle${\itshape#1}\/$\rangle$} +\catcode`\|\active +\def|#1{\ttfamily\string#1} +\newenvironment{code} +{\par\runninglinenumbers +\modulolinenumbers[1]% +\linenumbersep.3em +\footnotesize +\def\linenumberfont +{\normalfont\tiny\itshape}} +{} +{\makeatletter \gdef\scs#1{\texttt +{\protect\@backslashchar#1}}} +\def\old{\par\footnotesize} +{\catcode`\/\active +\gdef\path{\begingroup\catcode`\/\active +\let/\slash\dopath} +\gdef\dopath#1{\slash\unpenalty#1\endgroup}} + +\begin{document}%D +\pagewiselinenumbers +\maketitle +\pagestyle{headings} +\tableofcontents +\sloppy + +\section{% +Introductions +\unskip} + +(New v4.00) Parts of former first section +have been rendered separate subsections for package +version_v4.00. (/New v4.00) + +\subsection{% +Introduction to versions $\textrm{v}\lessthan4$ +\unskip} + +This package provides line numbers on paragraphs. +After \TeX\ has broken a paragraph into lines there will +be line numbers attached to them, with the possibility to +make references through the \LaTeX\ ~\ref~, ~\pageref~ +cross reference mechanism. This includes four issues: +\begin{itemize} +\item attach a line number on each line, +\item create references to a line number, +\item control line numbering mode, +\item count the lines and print the numbers. +\end{itemize} +The first two points are implemented through patches to +the output routine. The third by redefining ~\par~, ~\@par~ +and ~\@@par~. The counting is easy, as long as you want +the line numbers run through the text. If they shall +start over at the top of each page, the aux-file as well +as \TeX s memory have to carry a load for each counted line. + +I wrote this package for my wife Petra, who needs it for +transcriptions of interviews. This allows her to +precisely refer to passages in the text. It works well +together with ~\marginpar~s, but not too well with displaymath. +~\footnote~s are a problem, especially when they +are split, but we may get there. +(New v4.00 UL) Version v4.00 overcomes the problem, I believe. +(/UL /New v4.00) + +lineno.sty works +surprisingly well with other packages, for +example, ~wrapfig.sty~. So please try if it +works with whatever you need, and if it does, +please tell me, and if it does not, tell me as +well, so I can try to fix it. + +\subsection{% +Introduction to versions v4.00ff. (UL) +\unskip} + +~lineno.sty~ has been maintained by Stephan until version_v3.14. +From version_v4.00 onwards, maintenance is shifting towards +Uwe L\"uck (UL), who is the author of v4\dots code and of v4\dots +changes in documentation. This came about as follows. + +Since late 2002, Christian Tapp and Uwe L\"uck have employed +~lineno.sty~ for their ~ednotes.sty~, a package supporting +critical editions---cf. +\[\mbox{\tt +http://ednotes.sty.de.vu +\unskip}\] +---while you find ~ednotes.sty~ and surrounding files in +CTAN folder \path{macros/latex/contrib/ednotes}. + +Soon, some weaknesses of ~lineno.sty~ showed up, mainly since +Christian's critical editions (using ~ednotes.sty~) needed lots +of ~\linelabel~s and footnotes. (These weaknesses are due to +weaknesses of \LaTeX's ~\marginpar~ mechanism that Stephan +used for ~\linelabel~.) So we changed some ~lineno.sty~ +definitions in some extra files, which moreover offered new +features. We sent these files to Stephan, hoping he would take +the changes into ~lineno.sty~. However, he was too short of time. + +Writing a TUGboat article on Ednotes in 2004, we hoped to +reduce the number of files in the Ednotes bundle and so asked +Stephan again. Now he generously offered maintenance to me, so +I could execute the changes on my own. + +The improvements are as follows: +\begin{itemize}\item +[(i)] Footnotes placement approaches intentions better +(footnotes formerly liked to pile up at late pages). +\item +[(ii)] The number of ~\linelabel~s in one paragraph is no longer +limited to 18. +\item +[(iii)] ~\pagebreak~, ~\nopagebreak~, ~\vspace~, and the star +and optional versions of ~\\~ work as one would expect +(section_\ref{s:MVadj}). %% Added for v4.1 +\item +[(iv)] A command is offered which chooses the first line number +to be printed in the margin +(subsection_\ref{ss:Mod}). %% Added for v4.1 +\item +[(v)] (New v4.1) \LaTeX\ tabular environments (optionally) +get line numbers as well, and you can refer to them in the +usual automatic way. (It may be considered a shortcoming that, +precisely, \emph{rows} are numbered, not lines.---See +subsection_\ref{ss:Tab}.) +\item +[(vi)] We are moving towards referring to math items +(subsection_\ref{ss:MathRef} and the hooks in +subsection_\ref{ss:LL}). +(/New v4.1) +\end{itemize} +(Thanks to Stephan for making this possible!) + + +Ednotes moreover profits from Stephan's offer with regard +to the documentation of our code which yielded these +improvements formerly. This documentation now becomes +printable, being part of the ~lineno.sty~ documentation. + +Of course, Stephan's previous ~lineno.sty~ versions were a great +and ingenious work and exhibit greatest \TeX pertise. I never +could have done this. I learnt a lot in studying the code when +Christian pointed out strange output results and error +messages, and there are still large portions of ~lineno.sty~ +which I don't understand (consider only pagewise numbering of +lines). Fortunately, Stephan has offered future help if +needed.---My code for attaching line numbers to \emph{tabular +environments} (as mentioned above, now still in +~edtable.sty~) %% %% TODO +developed from macros which Stephan and Christian experimented +with in December 2002. Stephan built the basics. +(However, I then became too proud to follow his advice only to +use and modify ~longtable.sty~.) + +There are some issues concerning use of counters on which I +don't agree with Stephan and where I would like to change the +code if ~lineno.sty~ is ``mine'' as Stephan offered. However, +Stephan is afraid of compatibility problems from which, in +particular, his wife could suffer in the near future. So he +demanded that I change as little as possible for my first +version. Instead of executing changes that I plan I just offer +my opinions at the single occasions. I hope to get in touch +this way with users who consider subtle features vital which I +consider strange. + +On the other hand, the sections on improvements of the +implementation have been blown up very much and may be tiring +and litte understandable for mere \emph{users}. These users +may profit from the present presentation just by jumping to +sections_\ref{s:Opts} and_\ref{s:UserCmds}. There is a user's +guide ulineno.tex which may be even more helpful, but it has +not been updated for a while. %% TODO + +\subsection{% +Availability +\unskip} + +In case you have found the present file otherwise than from +CTAN: A recent version and documentation of this package +should be available from CTAN folder +\path{macros/latex/contrib/lineno}. +Or mail to one of the addresses at top of file. + +\subsection{% +Introductory code +\unskip} + +This style option is written for \LaTeXe, November 1994 or later, +since we need the ~\protected@write~ macro. + +(New v4.00) And we use ~\newcommand*~ for +controlling length of user macro arguments, which has been +available since December 1994. +\begin{code}\begin{verbatim} +\NeedsTeXFormat{LaTeX2e}[1994/12/01] +\ProvidesPackage{lineno} + [\filedate\space line numbers on paragraphs \fileversion] +\end{verbatim} +\end{code} +(/New v4.00) + + +\section{% +Put the line numbers to the lines +\unskip} + +(New v4.00) This section contained the most +basic package code previously. For various purposes of +version_4\dots, much of these basics have been to be modified. +Much of my (UL's) reasoning on these modifications has been to +be reported. Sorry, the present section has been blown up +awfully thus and contains ramifications that may be difficult +to trace. We add some ~\subsection~ commands in order to cope +with the new situation. (/New v4.00) + +\subsection{% +Basic code of \texttt{lineno.sty} \scs{output} +\unskip}\label{ss:output} + +The line numbers have to be attached by the output +routine. We simply set the ~\interlinepenalty~ to $-100000$. +The output routine will be called after each line in the +paragraph, except the last, where we trigger by ~\par~. +The ~\linenopenalty~ is small enough to compensate a bunch of +penalties (e.g., with ~\samepage~). + +(New v3.04) Longtable uses +~\penalty~$-30000$. The lineno penalty range was +shrunk to $-188000 \dots -32000$. (/New v3.04) +(New v4.00) New values are listed below (11111f.). (/New v4.00) +\begin{code}\begin{verbatim} +\newcount\linenopenalty\linenopenalty=-100000 +\end{verbatim} +\end{code} +(UL) Hm. It is never needed below +that this is a counter. ~\def\linenopenalty{-100000\relax}~ +would do. (I guess this consumes more memory, but it +is more important to save counters than to save memory.) +I was frightened by ~-\linenopenalty~ below, but indeed +\TeX\ interprets the string ~--100000~ as 100000. +Has any user or extension package writer ever called +~\linenopenalty=xxx~, or could I really change this?---The +counter is somewhat faster than the macro. Together with the +compatibility question this seems to support keeping the +counter. (???) +(/UL) +\begin{code}\begin{verbatim} +\mathchardef\linenopenaltypar=32000 +\end{verbatim} +\end{code} +So let's make a hook to ~\output~, the direct way. The \LaTeX\ +macro ~\@reinserts~ puts the footnotes back on the page. + +(New v3.01) ~\@reinserts~ badly +screws up split footnotes. The bottom part is +still on the recent contributions list, and the +top part will be put back there after the bottom +part. Thus, since lineno.sty does not play well +with ~\inserts~ anyway, we can safely experiment +with ~\holdinginserts~, without making things +much worse. + +Or that's what I thought, but: Just activating +~\holdinginserts~ while doing the ~\par~ will +not do the trick: The ~\output~ routine may be +called for a real page break before all line +numbers are done, and how can we get control +over ~\holdinginserts~ at that point? + +Let's try this: When the ~\output~ routine is +run with ~\holdinginserts=3~ for a real page +break, then we reset ~\holdinginserts~ and +restart ~\output~. + +Then, again, how do we keep the remaining +~\inserts~ while doing further line numbers? + +If we find ~\holdinginserts~=$-3$ we activate it again +after doing ~\output~. (/New v3.01) + +(New v3.02) To work with +multicol.sty, the original output routine is now +called indirectly, instead of being replaced. +When multicol.sty changes ~\output~, it is a +toks register, not the real thing. (/New v3.02) + +(New v4.00) Two further complications are added. +\begin{itemize}\item +[(i)] Problems with footnotes formerly resulted from +\LaTeX's ~\@reinserts~ in ~\@specialoutput~ which Stephan's +~\linelabel~ called via the ~\marginpar~ mechanism. +\item +[(ii)] \LaTeX\ commands using ~\vadjust~ formerly didn't work +as one would have hoped. The problem is as follows: +Printing the line number results from +a box that the output routine inserts at the place of the +~\interlinepenalty~. ~\vadjust~ items appear \emph{above} the +~\interlinepenalty~ (\TeX book p._105). So ~\pagebreak~, e.g., +formerly sent the line number to the next page, while the +penalty from ~\nopagebreak~ could not tie the following line, +since it was screened off by the line number box.---Our trick +is putting the ~\vadjust~ items into a list macro from which +the output routine transfers them into the vertical list, +below the line number box. +\end{itemize} +In this case_(ii), like in case_(i), footnotes would suffer +if ~\holdinginserts~ were non-positive. Indeed, in both +cases_(i) and_(ii) we tackle the footnote problem by extending +that part of Stephan's output routine that is active when +~\holdinginserts~ is positive. This extension writes the line +number ~\newlabel~ to the .aux file (which was formerly done +under $~\holdinginserts~=-3$) and handles the ~\vadjust~ +items.---To trigger ~\output~ and its ~\linelabel~ or, resp., +~\vadjust~ part, the list of signal penalties started +immediately before is increased here (first for ~\linelabel~, +second for postponed ~\vadjust~ items): +\begin{code}\begin{verbatim} +\mathchardef\@Mllbcodepen=11111 +\mathchardef\@Mppvacodepen=11112 +\end{verbatim} +\end{code} +(/New v4.00) (New v4.2) David Kastrup urges to use a private +name instead of ~\the\output~ (LaTeX-L-list). Otherwise an +~\output~ routine loaded later and using ~\newtoks\output~ +again may get lost entirely. So we change use of ~\@LN@output~, +using it for the former purpose. Reference to what appeared +with the name of ~\output~ here lasts for a few lines and then +is given away. +\begin{code}\begin{verbatim} +\let\@tempa\output +\newtoks\output +\let\@LN@output\output +\output=\expandafter{\the\@tempa} +\end{verbatim} +\end{code} +Now we add two cases to Stephan's output routine. (New v4.00) +\begin{code}\begin{verbatim} +\@tempa={% +\end{verbatim} +\end{code} +(/New 4.2) +\begin{code}\begin{verbatim} + \LineNoTest + \if@tempswa +\end{verbatim} +\end{code} +(New v4.00) +We insert recognition of waiting ~\linelabel~ items--- +\begin{code}\begin{verbatim} + \ifnum\outputpenalty=-\@Mllbcodepen + \WriteLineNo +\end{verbatim} +\end{code} +---and of waiting ~\vadjust~ items: +\begin{code}\begin{verbatim} + \else + \ifnum\outputpenalty=-\@Mppvacodepen + \PassVadjustList + \else +\end{verbatim} +\end{code} +(/New v4.00) (New v4.2) Outsource ``Standard'' output +---which occurs so rarely---to subsection_\ref{ss:LLO}: +\begin{code}\begin{verbatim} + \LineNoLaTeXOutput +\end{verbatim} +\end{code} +(/New v4.2) (New v4.00) +Two new ~\fi~s for the ~\linelabel~ and ~\vadjust~ tests--- +\begin{code}\begin{verbatim} + \fi + \fi +\end{verbatim} +\end{code} +---and the remaining is +Stephan's code again: +(/New v4.00) +\begin{code}\begin{verbatim} + \else + \MakeLineNo + \fi + } +\end{verbatim} +\end{code} +(New v4.00) Our new macros +~\WriteLineNo~ and ~\PassVadjustList~ will be dealt with in +sections_\ref{s:LNref} and_\ref{ss:PVadj}. (/New v4.00) + +\subsection{% +\scs{LineNoTest} +\unskip} + +The float mechanism inserts ~\interlinepenalty~s during +~\output~. So carefully reset it before going on. Else +we get doubled line numbers on every float placed in +horizontal mode, e.g, from ~\linelabel~. + +Sorry, neither a ~\linelabel~ nor a ~\marginpar~ should +insert a penalty, else the following linenumber +could go to the next page. Nor should any other +float. So let us suppress the ~\interlinepenalty~ +altogether with the ~\@nobreak~ switch. + +Since (ltspace.dtx, v1.2p)[1996/07/26], the ~\@nobreaktrue~ does +it's job globally. We need to do it locally here. +\begin{code}\begin{verbatim} +\def\LineNoTest{% + \let\@@par\@@@par + \ifnum\interlinepenalty<-\linenopenaltypar + \advance\interlinepenalty-\linenopenalty + \@LN@nobreaktrue + \fi + \@tempswatrue + \ifnum\outputpenalty>-\linenopenaltypar\else + \ifnum\outputpenalty>-188000\relax + \@tempswafalse + \fi + \fi + } + +\def\@LN@nobreaktrue{\let\if@nobreak\iftrue} % renamed v4.33 +\end{verbatim} +\end{code} +(UL) I thought here were +another case of the save stack problem explained in \TeX book, +p._301, namely through both local and global changing +~\if@nobreak~. However, ~\@LN@nobreak~ is called during +~\@LN@output~ only, while ~\@nobreaktrue~ is called by \LaTeX's +~\@startsection~ only. The latter never happens during +~\@LN@output~. So there is no local value of ~\if@nobreak~ on +save stack when ~\@nobreaktrue~ acts, since ~\the\@LN@output~ +(where ~\@LN@output~ is a new name for the original ~\output~) +is executed within a group (\TeX book p._21). +(/UL) + +\subsection{% +Other output routines (v4.2) +\unskip}\label{ss:LLO} + +I had thought of dealing with bad interference of footnotes +(and ~\enlargethispage~) with (real) ~\marginpar~s and floats +\emph{here}. Yet this is done in +\[ +~http://~\mbox{[CTAN]} +~/macros/latex/contrib/tamefloats/tameflts.sty~ +\] +now, and I prefer striving for compatibility with the latter. +(See there for expanding on the problem.) +This requires returning the special absolute value of +~\holdinginserts~ that ~lineno.sty~ finds at the end of a newly +typeset paragraph---now done in subsection_\ref{ss:calls} +(~\linenumberpar~). +The former ~\LineNoHoldInsertsTest~ has been filled into here. +Note: when the following code is invoked, we have +~\if@tempswa~_ =_~\iftrue~. +WARNING: I am still not sure whether the present code is good +for cooperating with other packages that use ~\holdinginserts~. +\begin{code}\begin{verbatim} +\def\LineNoLaTeXOutput{% + \ifnum \holdinginserts=\thr@@ % v4.33 without \@tempswafalse + \global\holdinginserts-\thr@@ + \unvbox\@cclv + \ifnum \outputpenalty=\@M \else \penalty\outputpenalty \fi + \else + \if@twocolumn \let\@makecol\@LN@makecol \fi + \the\@LN@output % finally following David Kastrup's advice. + \ifnum \holdinginserts=-\thr@@ + \global\holdinginserts\thr@@ \fi + \fi +} +\end{verbatim} +\end{code} +\textit{More on dealing with output routines from other +packages:} +Since ~lineno.sty~'s output routine is called at least once +for each output line, I think it should be in \TeX's +original ~\output~, while output routines dealing with +building pages and with floats etc.\ should be filled into +registers addressed by ~\output~ after ~\newtoks\output~. +Therefore \begin{enumerate} +\item +~tameflts.sty~ should be loaded \emph{after} ~lineno.sty~; +\item +if a class changes ~\output~ (APS journal class revtex4, +e.g.), ~lineno.sty~ should be loaded by ~\RequirePackage~ +[here presumably following some options in +brackets]~{lineno}~ \emph{preceding} ~\documentclass~. +\item +If you actually maintain such a class, please consider +loading ~lineno.sty~ on some draft option. The bunch of +lineno's package options may be a problem, but perhaps the +purpose of your class is offering only very few of lineno's +options anyway, maybe just one. +\end{enumerate} +The latter may also be needed with classes that don't follow +David Kastrup's rule on changing ~\output~. + +\subsection{% +\scs{MakeLineNo}: Actually attach line number +\unskip}\label{ss:MLN} + +We have to return all the page to the current page, and +add a box with the line number, without adding +breakpoints, glue or space. The depth of our line number +should be equal to the previous depth of the page, in +case the page breaks here, and the box has to be moved up +by that depth. + +The ~\interlinepenalty~ comes after the ~\vadjust~ from a +~\linelabel~, so we increment the line number \emph{after} +printing it. The macro ~\makeLineNumber~ produces the +text of the line number, see section \ref{appearance}. + +(UL) I needed a while to understand +the sentence on incrementing. Correctly: writing the +~\newlabel~ to the .aux file is triggered by the signal +penalty that ~\end@float~ inserts via ~\vadjust~. +However, this could be changed by our new ~\PostponeVadjust~. +After ~\c@linenumber~ has been introduced as a \LaTeX\ +counter, it might be preferable that it behaved like standard +\LaTeX\ counters which are incremented shortly before printing. +But this may be of little practical relevance in this case, +as ~\c@linenumber~ is driven in a very non-standard +way.---However still, this behaviour of ~\c@linenumber~ +generates a problem with our ~edtable.sty~. +(/UL). + +Finally we put in the natural ~\interlinepenalty~, except +after the last line. + +(New v3.10) Frank Mittelbach points out that box255 may be +less deep than the last box inside, so he proposes to +measure the page depth with ~\boxmaxdepth=\maxdimen~. +(/New v3.10) + +(UL, New v4.00) We also resume the matter of +~\vadjust~ items that was started in section_\ref{ss:output}. + +\TeX\ puts only nonzero interline +penalties into the vertical list (\TeX book p._105), while +~lineno.sty~ formerly replaced the signal interline penalty by +something closing with an explicit penalty of the value that +the interline penalty would have without ~lineno.sty~. +This is usually 0. Now, explicit vertical penalties can be +very nasty with respect to ~\nopagebreak~, e.g., a low (even +positive) ~\widowpenalty~ may force a widow where you +explicitly tried to forbid it by ~\nopagebreak~ +(see explanation soon below). +The ~\nopagebreak~ we create here would never work if all +those zero penalties were present.---On +the other hand, we cannot just omit Stephan's zero penalties, +because \TeX\ puts a penalty of 10000 after what ~lineno.sty~ +inserts (\TeX book p._125). This penalty must be overridden +to allow page breaks between ordinary lines. To revive +~\nopagebreak~, we therefore replace those zero (or low) +penalties by penalties that the user demanded by +~\nopagebreak~.---This mechanism is not perfect and does not +exactly restore the original \LaTeX\ working of ~\pagebreak~ +and ~\nopagebreak~. Viz., if there are several vertical +penalties after a line which were produced by closely sitting +~\[no]pagebreak~s, without ~lineno.sty~ the lowest penalty would +be effective (cf._\TeX book exercise_14.10). Our mechanism, by +contrast, chooses the \emph{last} user-set penalty of the line +as the effective one. It would not be very difficult to come +more close to the original mechanism, but until someone urges +us we will cling to the present simple way. You may consider an +advantage of the difference between our mechanism and the +original one that the user here can actually override low +penalties by ~\nopagebreak~, which may be what a lay \LaTeX\ +user would expect. +(/UL, /New v4.00) +\begin{code}\begin{verbatim} +\def\MakeLineNo{% + \@LN@maybe@normalLineNumber % v4.31 + \boxmaxdepth\maxdimen\setbox\z@\vbox{\unvbox\@cclv}% + \@tempdima\dp\z@ \unvbox\z@ + \sbox\@tempboxa{\hb@xt@\z@{\makeLineNumber}}% +\end{verbatim} +\end{code} +(New v4.00) Previously, +\begin{old}\begin{verbatim} +% \stepcounter{linenumber}% +\end{verbatim} +\end{old} +followed. (Of course, there was no +comment mark; I put it there to make +reading the actual code easy.) + +(New v4.22: improved) Why not just +\[~\global\advance\c@linenumber\@ne~?\] +~\stepcounter~ additionally resets ``subordinate'' +counters, but which could these (usefully) be? +(New v4.4) I had forgotten v4.00, ``physical page counter'' +~\c@LN@truepage~ in section_\ref{ss:PW}! (/New v4.4) + +But then, our ~edtable.sty~ and its ~longtable~ option +should use it as well. So use a shorthand supporting +uniformity. You can even use it as a hook for choosing +~\global\advance\c@linenumber\@ne~ instead of our choice. +(/New v4.22) +\begin{code}\begin{verbatim} + \stepLineNumber +\end{verbatim} +\end{code} +(New v4.4) Now +\begin{code}\begin{verbatim} + \ht\@tempboxa\z@ \@LN@depthbox +\end{verbatim} +\end{code} +appends the box containing the line number without changing +~\prevdepth~---see end of section. +Now is the time for inserting the $\dots$ (/New v4.4) +~\vadjust~ items. We cannot do this much later, because +their right place is above the artificial interline +penalty which Stephan's code will soon insert +(cf._\TeX book p._105). The next command is just ~\relax~ +if no ~\vadjust~ items have been accumulated for the +current line. Otherwise it is a list macro inserting +the ~\vadjust~ items and finally resetting itself. +(This is made in section_\ref{ss:PVadj} below.) +If the final item is a penalty, it is stored so it can +compete with other things about page breaking. +\begin{code}\begin{verbatim} + \@LN@do@vadjusts + \count@\lastpenalty +\end{verbatim} +\end{code} +At this place, +\begin{old}\begin{verbatim} +% \ifnum\outputpenalty=-\linenopenaltypar\else +\end{verbatim} +\end{old} +originally followed. We need something \emph{before} the +~\else~: +\begin{code}\begin{verbatim} + \ifnum\outputpenalty=-\linenopenaltypar + \ifnum\count@=\z@ \else +\end{verbatim} +\end{code} +So final ~\pagebreak[0]~ or ~\nopagebreak[0]~ has no +effect---but this will make a difference after headings only, +where nobody should place such a thing anyway. +\begin{code}\begin{verbatim} + \xdef\@LN@parpgbrk{% + \penalty\the\count@ + \global\let\noexpand\@LN@parpgbrk + \noexpand\@LN@screenoff@pen}% v4.4 +\end{verbatim} +\end{code} +That penalty will replace former ~\kern\z@~ in +~\linenumberpar~, see subsection_\ref{ss:calls}.---A +few days earlier, I tried to send just a penalty value. +However, the ~\kern\z@~ in ~\linenumberpar~ is crucial, +as I then found out. See below.---The final penalty is +repeated, but this does no harm. (It would not be very +difficult to avoid the repeating, but it may even be +less efficient.) It may be repeated due to the previous +~\xdef~, but it may be repeated as well below in the +present macro where artificial interline penalty is to +be overridden. +\begin{code}\begin{verbatim} + \fi + \else +\end{verbatim} +\end{code} +(/New v4.00) +\begin{code}\begin{verbatim} + \@tempcnta\outputpenalty + \advance\@tempcnta -\linenopenalty +\end{verbatim} +\end{code} +(New v4.00) +\begin{old}\begin{verbatim} +% \penalty\@tempcnta +\end{verbatim} +\end{old} +followed previously. To give ~\nopagebreak~ a chance, +we do +\begin{code}\begin{verbatim} + \penalty \ifnum\count@<\@tempcnta \@tempcnta \else \count@ \fi +\end{verbatim} +\end{code} +instead.---In ~linenox0.sty~, the ~\else~ thing once was omitted. +Sergei Mariev's complaint (thanks!) showed that it is vital +(see comment before ~\MakeLineNo~). +The remaining ~\fi~ from previous package version closes the +~\ifnum\outputpenalty~\dots +(/New v4.00) +\begin{code}\begin{verbatim} + \fi + } +\end{verbatim} +\end{code} +(New v4.00) +\begin{code}\begin{verbatim} +\newcommand\stepLineNumber{\stepcounter{linenumber}} +\end{verbatim} +\end{code} +For reason, see use above. (/New v4.00) + +(New v4.4) The depth preserving trick is drawn here from +~\MakeLineNo~ because it will be used again in +section_\ref{ss:calls}. +\begin{code}\begin{verbatim} +\def\@LN@depthbox{% + \dp\@tempboxa=\@tempdima + \nointerlineskip \kern-\@tempdima \box\@tempboxa} +\end{verbatim} +\end{code} +(/New v4.4) + +\section{% +Control line numbering +\unskip} +\subsection{% +Inserting \scs{output} calls %% own subsec. v4.4. +\unskip}\label{ss:calls} +The line numbering is controlled via ~\par~. \LaTeX\ +saved the \TeX-primitive ~\par~ in ~\@@par~. We push it +one level further out, and redefine ~\@@par~ to insert +the ~\interlinepenalty~ needed to trigger the +line numbering. And we need to allow pagebreaks after a +paragraph. + +New (2.05beta): the prevgraf test. A paragraph that ends with a +displayed equation, a ~\noindent\par~ or ~wrapfig.sty~ produce empty +paragraphs. These should not get a spurious line number via +~\linenopenaltypar~. +\begin{code}\begin{verbatim} +\let\@@@par\@@par +\newcount\linenoprevgraf +\end{verbatim} +\end{code} +(UL) And needs ~\linenoprevgraf~ +to be a counter? Perhaps there may be a paragraph having +thousands of lines, so ~\mathchardef~ doesn't suffice (really??). +A macro ending on ~\relax~ might suffice, but would be +somewhat slow. I think I will use ~\mathchardef~ next time. +Or has any user used ~\linenoprevgraf~? (/UL) +\begin{code}\begin{verbatim} +\def\linenumberpar{% + \ifvmode \@@@par \else + \ifinner \@@@par \else + \xdef\@LN@outer@holdins{\the\holdinginserts}% v4.2 + \advance \interlinepenalty \linenopenalty + \linenoprevgraf \prevgraf + \global \holdinginserts \thr@@ + \@@@par + \ifnum\prevgraf>\linenoprevgraf + \penalty-\linenopenaltypar + \fi +\end{verbatim} +\end{code} +(New v4.00) +\begin{old}\begin{verbatim} +% \kern\z@ +\end{verbatim} +\end{old} +was here previously. What for? +According to \TeX book p._125, Stephan's +interline penalty is changed into 10000. At the end of a +paragraph, the ~\parskip~ would follow that penalty of 10000, +so there could be a page break neither at the +~\parskip~ nor at the ~\baselineskip~ (\TeX book p._110)---so +there could never be a page break between two paragraphs. +So something must screen off the 10000 penalty. +Indeed, the ~\kern~ is a place to break. +(Stephan once knew this: see `allow pagebreaks' above.) + +Formerly, I tried to replace ~\kern\z@~ by +\begin{old}\begin{verbatim} +% \penalty\@LN@parpgpen\relax +\end{verbatim} +\end{old} +---but this allows a page break after heading. So: +\begin{code}\begin{verbatim} + \@LN@parpgbrk +\end{verbatim} +\end{code} + +These and similar changes were formerly done by ~linenox1.sty~. +(/New v4.00) + +(New v4.4) +A ~\belowdisplayskip~ may precede the previous when the paragraph +ends on a display-math; or there may be a ~\topsep~ from a list, etc. +~\addvspace~ couldn't take account for it with ~\kern\z@~ +here. v4.32 therefore moved the space down -- with at least two +bad consequences. +Moreover, David Josef Dev observes that ~\kern\z@~ may +inappropriately yield column depth 0pt. +For these reasons, we introduce ~\@LN@screenoff@pen~ below. +(/New v4.4) +\begin{code}\begin{verbatim} + \global\holdinginserts\@LN@outer@holdins % v4.2 + \advance\interlinepenalty -\linenopenalty + \fi % from \ifinner ... \else + \fi} % from \ifvmode ... \else +\end{verbatim} +\end{code} +(New v4.00, v4.4) Initialize ~\@LN@parpgbrk~, accounting +for earlier space and for appropriate columndepth. +We use former ~\MakeLineNo~'s depth-preverving trick +~\@LN@depthbox~ again: +\begin{code}\begin{verbatim} +\def\@LN@screenoff@pen{% + \ifdim\lastskip=\z@ + \@tempdima\prevdepth \setbox\@tempboxa\null + \@LN@depthbox \fi} + +\global\let\@LN@parpgbrk\@LN@screenoff@pen +\end{verbatim} +\end{code} +(/New v4.4, v4.00) +\subsection{% +Turning on/off %% own subsec. v4.4. +\unskip}\label{ss:OnOff} +The basic commands to enable and disable line numbers. +~\@par~ and ~\par~ are only touched, when they are ~\let~ +to ~\@@@par~/~\linenumberpar~. The line number may be +reset to 1 with the star-form, or set by an optional +argument ~[~<number>~]~. + +(New v4.00) We add ~\ifLineNumbers~ etc.\ since +a number of our new adjustments need to know whether +linenumbering is active. This just provides a kind of +shorthand for ~\ifx\@@par\linenumberpar~; moreover it is +more stable: who knows what may happen to ~\@@par~?---A +caveat: ~\ifLineNumbers~ may be wrong. E.g., it may be +~\iffalse~ where it acts, while a ~\linenumbers~ a few +lines below---in the same paragraph---brings about that +the line where the ~\ifLineNumbers~ appears gets a +marginal number. +(New v4.3) Just noticed: Such tricks have been +disallowed with v4.11, see subsections_\ref{ss:LL} +and_\ref{ss:OnOff}.---Moreover, the switching between +meanings of ~\linelabel~ for a possible error message +as of v4.11 is removed. Speed is difficult to esteem +and also depends on applications. Just use the most +simple code you find. (/New v4.3) +\begin{code}\begin{verbatim} +\newif\ifLineNumbers \LineNumbersfalse +\end{verbatim} +\end{code} +(/New v4.00) +\begin{code}\begin{verbatim} +\def\linenumbers{% + \LineNumberstrue % v4.00 + \xdef\@LN@outer@holdins{\the\holdinginserts}% v4.3 +\end{verbatim} +\end{code} +(New v4.3) The previous line is for ~{linenomath}~ +in a first numbered paragraph. (/New v4.3) +\begin{code}\begin{verbatim} + \let\@@par\linenumberpar + % \let\linelabel\@LN@linelabel % v4.11, removed v4.3 + \ifx\@par\@@@par\let\@par\linenumberpar\fi + \ifx\par\@@@par\let\par\linenumberpar\fi + \@LN@maybe@moduloresume % v4.31 + \@ifnextchar[{\resetlinenumber}%] + {\@ifstar{\resetlinenumber}{}}% + } + +\def\nolinenumbers{% + \LineNumbersfalse % v4.00 + \let\@@par\@@@par + % \let\linelabel\@LN@LLerror % v4.11, removed v4.3 + \ifx\@par\linenumberpar\let\@par\@@@par\fi + \ifx\par\linenumberpar\let\par\@@@par\fi + } +\end{verbatim} +\end{code} +(New v4.00) Moreover, it is useful to switch to +~\nolinenumbers~ in ~\@arrayparboxrestore~. We postpone this +to section_\ref{ss:ReDef} where we'll have an appending macro +for doing this. (/New v4.00) + +What happens with a display math? Since ~\par~ is not executed, +when breaking the lines before a display, they will not get +line numbers. Sorry, but I do not dare to change +~\interlinepenalty~ globally, nor do I want to redefine +the display math environments here. +\begin{displaymath} +display \ math +\end{displaymath} +See the subsection below, for a wrapper environment to make +it work. But that requires to wrap each and every display +in your \LaTeX\ source %%. +(see option ~displaymath~ in subsections_\ref{ss:v3opts} +and_\ref{ss:display} for some relief [UL]). + +The next two commands are provided to turn on line +numbering in a specific mode. Please note the difference: +for pagewise numbering, ~\linenumbers~ comes first to +inhibit it from seeing optional arguments, since +re-/presetting the counter is useless. +\begin{code}\begin{verbatim} +\def\pagewiselinenumbers{\linenumbers\setpagewiselinenumbers} +\def\runninglinenumbers{\setrunninglinenumbers\linenumbers} +\end{verbatim} +\end{code} +Finally, it is a \LaTeX\ style, so we provide for the use +of environments, including the suppression of the +following paragraph's indentation. + +(UL) I am drawing the following +private thoughts of Stephan's to publicity so that others may +think about them---or to remind myself of them in an efficient +way. (/UL) +\begin{old}\begin{verbatim} +% TO DO: add \par to \linenumbers, if called from an environment. +% To DO: add an \@endpe hack if \linenumbers are turned on +% in horizontal mode. {\par\parskip\z@\noindent} or +% something. +\end{verbatim} +\end{old} +(UL) However, I rather think that ~\linenumbers~ and %% v4.31 +~\nolinenumbers~ should execute a ~\par~ already. (Then the +~\par~s in the following definitions should be removed.) (/UL) +\begin{code}\begin{verbatim} +\@namedef{linenumbers*}{\par\linenumbers*} +\@namedef{runninglinenumbers*}{\par\runninglinenumbers*} + +\def\endlinenumbers{\par\@endpetrue} +\let\endrunninglinenumbers\endlinenumbers +\let\endpagewiselinenumbers\endlinenumbers +\expandafter\let\csname endlinenumbers*\endcsname\endlinenumbers +\expandafter\let\csname endrunninglinenumbers*\endcsname\endlinenumbers +\let\endnolinenumbers\endlinenumbers +\end{verbatim} +\end{code} + +\subsection{% +Display math +\unskip}\label{ss:DM} + +Now we tackle the problem to get display math working. +There are different options. +\begin{enumerate}\item[ +1.] Precede every display math with a ~\par~. +Not too good. +\item[ +2.] Change ~\interlinepenalty~ and associates globally. +Unstable. +\item[ +3.] Wrap each display math with a ~{linenomath}~ +environment. +\end{enumerate} +We'll go for option 3. See if it works: +\begin{linenomath} +\begin{equation} +display \ math +\end{equation} +\end{linenomath} +The star form ~{linenomath*}~ should also number the lines +of the display itself, +\begin{linenomath*} +\begin{eqnarray} +multi && line \\ +display && math \\ +& +\begin{array}{c} +with \\ +array +\end{array} +& +\end{eqnarray} +\end{linenomath*} +including multline displays. + +First, here are two macros to turn +on linenumbering on paragraphs preceeding displays, with +numbering the lines of the display itself, or without. +The ~\ifx..~ tests if line numbering is turned on. It +does not harm to add these wrappers in sections that are +not numbered. Nor does it harm to wrap a display +twice, e.q, in case you have some ~{equation}~s wrapped +explicitely, and later you redefine ~\equation~ to do it +automatically. + +(New v4.3) To avoid the spurious line number above a +display in vmode, I insert ~\ifhmode~. (/New v4.3) +\begin{code}\begin{verbatim} +\newcommand\linenomathNonumbers{% + \ifLineNumbers + \ifnum\interlinepenalty>-\linenopenaltypar + \global\holdinginserts\thr@@ + \advance\interlinepenalty \linenopenalty + \ifhmode % v4.3 + \advance\predisplaypenalty \linenopenalty + \fi + \fi + \fi + \ignorespaces + } + +\newcommand\linenomathWithnumbers{% + \ifLineNumbers + \ifnum\interlinepenalty>-\linenopenaltypar + \global\holdinginserts\thr@@ + \advance\interlinepenalty \linenopenalty + \ifhmode % v4.3 + \advance\predisplaypenalty \linenopenalty + \fi + \advance\postdisplaypenalty \linenopenalty + \advance\interdisplaylinepenalty \linenopenalty + \fi + \fi + \ignorespaces + } +\end{verbatim} +\end{code} +The ~{linenomath}~ environment has two forms, with and +without a star. The following two macros define the +environment, where the stared/non-stared form does/doesn't number the +lines of the display or vice versa. +\begin{code}\begin{verbatim} +\newcommand\linenumberdisplaymath{% + \def\linenomath{\linenomathWithnumbers}% + \@namedef{linenomath*}{\linenomathNonumbers}% + } + +\newcommand\nolinenumberdisplaymath{% + \def\linenomath{\linenomathNonumbers}% + \@namedef{linenomath*}{\linenomathWithnumbers}% + } + +\def\endlinenomath{% + \ifLineNumbers % v4.3 + \global\holdinginserts\@LN@outer@holdins % v4.21 + \fi + \global % v4.21 support for LaTeX2e earlier than 1996/07/26. + \@ignoretrue +} +\expandafter\let\csname endlinenomath*\endcsname\endlinenomath +\end{verbatim} +\end{code} +The default is not to number the lines of a display. But +the package option ~mathlines~ may be used to switch +that behavior. +\begin{code}\begin{verbatim} +\nolinenumberdisplaymath +\end{verbatim} +\end{code} + +\section{% +Line number references +\unskip}\label{s:LNref} +\subsection{% +Internals %% New subsec. v4.3. +\unskip} +The only way to get a label to a line number in a +paragraph is to ask the output routine to mark it. + +(New v4.00) The following two paragraphs don't hold any +longer, see below. (/New v4.00) +\begin{old}\begin{verbatim} +% We use the marginpar mechanism to hook to ~\output~ for a +% second time. Marginpars are floats with number $-1$, we +% fake marginpars with No $-2$. Originally, every negative +% numbered float was considered to be a marginpar. +% +% The float box number ~\@currbox~ is used to transfer the +% label name in a macro called ~\@LNL@~<box-number>. +\end{verbatim} +\end{old} +A ~\newlabel~ is written to the aux-file. The reference +is to ~\theLineNumber~, \emph{not} ~\thelinenumber~. +This allows to hook in, as done below for pagewise line +numbering. + +(New v3.03) The ~\@LN@ExtraLabelItems~ are added for a hook +to keep packages like ~{hyperref}~ happy. (/New v3.03) + +(New v4.00) +We fire the ~\marginpar~ mechanism, so we leave \LaTeX's +~\@addmarginpar~ untouched. +\begin{old}\begin{verbatim} +% \let\@LN@addmarginpar\@addmarginpar +% \def\@addmarginpar{% +% \ifnum\count\@currbox>-2\relax +% \expandafter\@LN@addmarginpar +% \else +% \@cons\@freelist\@currbox +% \protected@write\@auxout{}{% +% \string\newlabel +% {\csname @LNL@\the\@currbox\endcsname}% +% {{\theLineNumber}{\thepage}\@LN@ExtraLabelItems}}% +% \fi} +\end{verbatim} +\end{old} +OK, we keep Stephan's ~\@LN@ExtraLabelItems~: +(/New v4.00) +\begin{code}\begin{verbatim} +\let\@LN@ExtraLabelItems\@empty +\end{verbatim} +\end{code} +(New v4.00) +We imitate the ~\marginpar~ mechanism without using the +~\@freelist~ boxes. ~\linelabel~ will indeed place a signal +penalty (~\@Mllbcodepen~, new), and it will put a label into +some list macro ~\@LN@labellist~. A new part of the output +routine will take the labels from the list and will write +~\newlabel~s to the .aux file. + +The following is a version of \LaTeX's ~\@xnext~. +\begin{code}\begin{verbatim} +\def\@LN@xnext#1\@lt#2\@@#3#4{\def#3{#1}\gdef#4{#2}} +\end{verbatim} +\end{code} +This takes an item ~#1~ from a list ~#4~ into ~#3~; +to be used as ~\expandafter\@LN@xnext#4\@@#3#4~. +Our lists use ~\@lt~ after each item for separating. +Indeed, there will be another list macro which can +appear as argument ~#4~, this will be used for moving +~\vadjust~ items (section_\ref{ss:PVadj}). +The list for ~\linelabel~s is the following: +\begin{code}\begin{verbatim} +\global\let\@LN@labellist\@empty +\end{verbatim} +\end{code} +The next is the new part of the output routine writing the +~\newlabel~ to the .aux file. Since it is no real page output, +the page is put back to top of the main vertical list. +\begin{code}\begin{verbatim} +\def\WriteLineNo{% + \unvbox\@cclv + \expandafter \@LN@xnext \@LN@labellist \@@ + \@LN@label \@LN@labellist + \protected@write\@auxout{}{\string\newlabel{\@LN@label}% + {{\theLineNumber}{\thepage}\@LN@ExtraLabelItems}}% +} +\end{verbatim} +\end{code} +(/New v4.00) + +\subsection{% +The \scs{linelabel} command +\unskip}\label{ss:LL} +To refer to a place in line ~\ref{~<foo>~}~ at page +~\pageref{~<foo>~}~ you place a ~\linelabel{~<foo>~}~ at +that place. + +\linelabel{demo} +\marginpar{\tiny\raggedright +See if it works: This paragraph +starts on page \pageref{demo}, line +\ref{demo}. +\unskip}% +(New v4.11) +\begin{old}\begin{verbatim} +% If you use this command outside a ~\linenumbers~ +% paragraph, you will get references to some bogus +% line numbers, sorry. But we don't disable the command, +% because only the ~\par~ at the end of a paragraph may +% decide whether to print line numbers on this paragraph +% or not. A ~\linelabel~ may legally appear earlier than +% ~\linenumbers~. +\end{verbatim} +\end{old} +This trick is better not allowed---see subsections_\ref{ss:LL} +and_\ref{ss:OnOff}. +(/New v4.11) + +~\linelabel~ +\begin{old}\begin{verbatim} +%, via a fake float number $-2$, %% new mechanism v4.00 +\end{verbatim} +\end{old} +puts a +~\penalty~ into a ~\vadjust~, which triggers the +pagebuilder after putting the current line to the main +vertical list. A ~\write~ is placed on the main vertical +list, which prints a reference to the current value of +~\thelinenumber~ and ~\thepage~ at the time of the +~\shipout~. + +A ~\linelabel~ is allowed only in outer horizontal mode. +In outer vertical mode we start a paragraph, and ignore +trailing spaces (by fooling ~\@esphack~). + +(New v4.00) We aim at relaxing the previous condition. +We insert a hook ~\@LN@mathhook~ and a shorthand +~\@LN@postlabel~ to support the ~mathrefs~ option which +allows ~\linelabel~ in math mode. + +The next paragraph is no longer valid. +\begin{old}\begin{verbatim} +% The argument of ~\linelabel~ is put into a macro with a +% name derived from the number of the allocated float box. +% Much of the rest is dummy float setup. +\end{verbatim} +\end{old} +(/New v4.00) + +(New v4.11) +\begin{old}\begin{verbatim} +% \def\linelabel#1{% +\end{verbatim} +\end{old} +I forgot ~\linenumbers~ today, costed me hours or so. +\begin{code}\begin{verbatim} +\def\@LN@LLerror{\PackageError{lineno}{% + \string\linelabel\space without \string\linenumbers}{% + Just see documentation. (New feature v4.11)}\@gobble} +\end{verbatim} +\end{code} +(New v4.3) Here some things have changed for v4.3. +The previous ~#1~ has been replaced by ~\@gobble~. +Ensuing, the ~\linelabel~ error message is re-implemented. +I find it difficult to compare efficiency of slight +alternatives---so choose an easy one. Explicit switching +in ~\linenumbers~ and ~\nolinenumbers~ is an additional +command that may better be avoided. +\begin{code}\begin{verbatim} +\newcommand\linelabel{% + \ifLineNumbers \expandafter \@LN@linelabel + \else \expandafter \@LN@LLerror \fi} + +\gdef\@LN@linelabel#1{% +\end{verbatim} +\end{code} +~\gdef~ for hyperref ``symbolically''. (/New v4.11) +\begin{code}\begin{verbatim} + \ifx\protect\@typeset@protect +\end{verbatim} +\end{code} +$\gets$ And a ~\linelabel~ should never be replicated in a +mark or a TOC entry. (/New v4.3) +\begin{code}\begin{verbatim} + \ifvmode + \ifinner \else + \leavevmode \@bsphack \@savsk\p@ + \fi + \else + \@bsphack + \fi + \ifhmode + \ifinner + \@parmoderr + \else +\end{verbatim} +\end{code} +(New v4.00) +\begin{code}\begin{verbatim} + \@LN@postlabel{#1}% +\end{verbatim} +\end{code} +\begin{old}\begin{verbatim} +% \@floatpenalty -\@Mii +% \@next\@currbox\@freelist +% {\global\count\@currbox-2% +% \expandafter\gdef\csname @LNL@\the\@currbox\endcsname{#1}}% +% {\@floatpenalty\z@ \@fltovf \def\@currbox{\@tempboxa}}% +% \begingroup +% \setbox\@currbox \color@vbox \vbox \bgroup \end@float +% \endgroup +% \@ignorefalse \@esphack +\end{verbatim} +\end{old} +(/New v4.00) +\begin{code}\begin{verbatim} + \@esphack +\end{verbatim} +\end{code} +(New v4.00) +The ~\@ignorefalse~ was appropriate before because the +~\@Esphack~ in ~\end@float~ set ~\@ignoretrue~. Cf._\LaTeX's +~\@xympar~. (/New v4.00) +\begin{code}\begin{verbatim} + \fi + \else +\end{verbatim} +\end{code} +(New v4.00) +\begin{code}\begin{verbatim} + \@LN@mathhook{#1}% +\end{verbatim} +\end{code} +\begin{old}\begin{verbatim} +% \@parmoderr +\end{verbatim} +\end{old} +Instead of complaining, you may just do your job. +(/New v4.00) +\begin{code}\begin{verbatim} + \fi + \fi + } +\end{verbatim} +\end{code} +(New v4.00) The shorthand just does what happened +with ~linenox0.sty~ before ~ednmath0.sty~ (New v4.1: +now ~mathrefs~ option) appeared, and +the hook is initialized to serve the same purpose. +So errors come just where Stephan had built them in, +and this is just the \LaTeX\ ~\marginpar~ behaviour. +\begin{code}\begin{verbatim} +\def\@LN@postlabel#1{\g@addto@macro\@LN@labellist{#1\@lt}% + \vadjust{\penalty-\@Mllbcodepen}} +\def\@LN@mathhook#1{\@parmoderr} +\end{verbatim} +\end{code} +(/New v4.00) + +\modulolinenumbers[3] +\firstlinenumber{1} +\section{% +The appearance of the line numbers +\unskip}\label{appearance} +\subsection{% +Basic code %% own subsec. v4.2. +\unskip} + +The line numbers are set as ~\tiny\sffamily\arabic{linenumber}~, +$10pt$ left of the text. With options to place it +right of the text, or . . . + +. . . here are the hooks: +\begin{code}\begin{verbatim} +\def\makeLineNumberLeft{% + \hss\linenumberfont\LineNumber\hskip\linenumbersep} + +\def\makeLineNumberRight{% + \linenumberfont\hskip\linenumbersep\hskip\columnwidth + \hb@xt@\linenumberwidth{\hss\LineNumber}\hss} + +\def\linenumberfont{\normalfont\tiny\sffamily} + +\newdimen\linenumbersep +\newdimen\linenumberwidth + +\linenumberwidth=10pt +\linenumbersep=10pt +\end{verbatim} +\end{code} +Margin switching requires ~pagewise~ numbering mode, but +choosing the left or right margin for the numbers always +works. +\begin{code}\begin{verbatim} +\def\switchlinenumbers{\@ifstar + {\let\makeLineNumberOdd\makeLineNumberRight + \let\makeLineNumberEven\makeLineNumberLeft}% + {\let\makeLineNumberOdd\makeLineNumberLeft + \let\makeLineNumberEven\makeLineNumberRight}% + } + +\def\setmakelinenumbers#1{\@ifstar + {\let\makeLineNumberRunning#1% + \let\makeLineNumberOdd#1% + \let\makeLineNumberEven#1}% + {\ifx\c@linenumber\c@runninglinenumber + \let\makeLineNumberRunning#1% + \else + \let\makeLineNumberOdd#1% + \let\makeLineNumberEven#1% + \fi}% + } + +\def\leftlinenumbers{\setmakelinenumbers\makeLineNumberLeft} +\def\rightlinenumbers{\setmakelinenumbers\makeLineNumberRight} + +\leftlinenumbers* +\end{verbatim} +\end{code} +~\LineNumber~ is a hook which is used for the modulo stuff. +It is the command to use for the line number, when you +customize ~\makeLineNumber~. Use ~\thelinenumber~ to +change the outfit of the digits. + + +We will implement two modes of operation: +\begin{itemize} +\item numbers ~running~ through (parts of) the text +\item ~pagewise~ numbers starting over with one on top of +each page. +\end{itemize} +Both modes have their own count register, but only one is +allocated as a \LaTeX\ counter, with the attached +facilities serving both. +\begin{code}\begin{verbatim} +\newcounter{linenumber} +\newcount\c@pagewiselinenumber +\let\c@runninglinenumber\c@linenumber +\end{verbatim} +\end{code} +Only the running mode counter may be reset, or preset, +for individual paragraphs. The pagewise counter must +give a unique anonymous number for each line. + +(New v4.3) ~\newcounter{linenumber}~ +was the only ~\newcounter~ in the whole package, and +formerly I was near using ~\newcount~ instead. Yet +~\newcounter~ may be quite useful for ~\includeonly~. +It also supports resetting ``subcounters'', but what +could these be? Well, ~edtable~ might introduce a +subcounter for columns. +(Note that \LaTeX's setting commands would work with +~\newcount\c@linenumber~ already, apart from this. +And perhaps sometimes ~\refstepcounter{linenumber}~ +wouldn't work---cf._my discussion of ~\stepcounter~ in +subsection_\ref{ss:MLN}, similarly ~\refstep...~ would +be quite useless. +Even the usual redefinitions of ~\thelinenumber~ would +work. It is nice, on the other hand, that +~\thelinenumber~ is predefined here. \LaTeX's +initialization of the value perhaps just serves making +clear \LaTeX\ counters should always be changed +globally.---Shortened and improved the discussion here.) +(/New v4.3) + +(New v4.22) +~\c@linenumber~ usually is---globally---incremented by +~\stepcounter~ (at present), so resetting it locally would +raise the save stack problem of \TeX book p._301, moreover +it would be is useless, there is no hope of keeping the +values local (but see subsection_\ref{ss:ILN}). So I insert +~\global~: (/New v4.22) +\begin{code}\begin{verbatim} +\newcommand*\resetlinenumber[1][\@ne]{% + \global % v4.22 + \c@runninglinenumber#1\relax} +\end{verbatim} +\end{code} +(New v4.00) +\begin{old}\begin{verbatim} +% \newcommand\resetlinenumber[1][1]{\c@runninglinenumber#1} +\end{verbatim} +\end{old} +Added ~\relax~, being quite sure that this does no harm +and is quite important, as with ~\setcounter~ etc. +I consider this a bug fix (although perhaps no user has +ever had a problem with this). (/New v4.00) + +(v4.22: I had made much fuss about resetting subordinate +counters here---removed, somewhat postponed.) + + +\subsection{% +Running line numbers +\unskip} + +Running mode is easy, ~\LineNumber~ and ~\theLineNumber~ +produce ~\thelinenumber~, which defaults to +~\arabic{linenumber}~, using the ~\c@runninglinenumber~ +counter. This is the default mode of operation. +\begin{code}\begin{verbatim} +\def\makeRunningLineNumber{\makeLineNumberRunning} + +\def\setrunninglinenumbers{% + \def\theLineNumber{\thelinenumber}% + \let\c@linenumber\c@runninglinenumber + \let\makeLineNumber\makeRunningLineNumber + } + +\setrunninglinenumbers\resetlinenumber +\end{verbatim} +\end{code} + +\subsection{% +Pagewise line numbers +\unskip}\label{ss:PW} + +Difficult, if you think about it. The number has to be +printed when there is no means to know on which page it +will end up, except through the aux-file. My solution +is really expensive, but quite robust. + +With version ~v2.00~ the hashsize requirements are +reduced, because we do not need one controlsequence for +each line any more. But this costs some computation time +to find out on which page we are. + +~\makeLineNumber~ gets a hook to log the line and page +number to the aux-file. Another hook tries to find out +what the page offset is, and subtracts it from the counter +~\c@linenumber~. Additionally, the switch +~\ifoddNumberedPage~ is set true for odd numbered pages, +false otherwise. +\begin{code}\begin{verbatim} +\def\setpagewiselinenumbers{% + \let\theLineNumber\thePagewiseLineNumber + \let\c@linenumber\c@pagewiselinenumber + \let\makeLineNumber\makePagewiseLineNumber + } + +\def\makePagewiseLineNumber{\logtheLineNumber\getLineNumber + \ifoddNumberedPage + \makeLineNumberOdd + \else + \makeLineNumberEven + \fi + } +\end{verbatim} +\end{code} +Each numbered line gives a line to the aux file +\begin{verse} +~\@LN{~<line>~}{~<page>~}~ +\end{verse} +very similar to the ~\newlabel~ business, except that we need +an arabic representation of the page number, not what +there might else be in ~\thepage~. +\begin{code}\begin{verbatim} +\def\logtheLineNumber{\protected@write\@auxout{}{% +\end{verbatim} +\end{code} +(New v4.00) (UL) +As Daniel Doherty observed, the earlier line +\begin{old}\begin{verbatim} +% \string\@LN{\the\c@linenumber}{\noexpand\the\c@page}}} +\end{verbatim} +\end{old} +here may lead into an infinite loop when the user resets +the page number (think of ~\pagenumbering~, e.g.). +Stephan and I brief\/ly discussed the matter and decided +to introduce a ``physical''-page counter to which +~\logtheLineNumber~ refers. It was Stephan's idea to use +~\cl@page~ for reliably augmenting the ``physical''-page +counter. However, this relies on the output routine once +doing ~\stepcounter{page}~. Before Stephan's +suggestion, I had thought of appending the stepping to +\LaTeX's ~\@outputpage~.---So the macro definition ends +as follows. +\begin{code}\begin{verbatim} + \string\@LN{\the\c@linenumber}{% +\end{verbatim} +\end{code} +(New v4.2) +The `truepage' counter must start with ~\c@~ so it works +with ~\include~, and the ~\@addtoreset~ below is needed +for the same purpose. +\begin{code}\begin{verbatim} + \noexpand\the\c@LN@truepage}}} + +\newcount\c@LN@truepage +\g@addto@macro\cl@page{\global\advance\c@LN@truepage\@ne} +\@addtoreset{LN@truepage}{@ckpt} +\end{verbatim} +\end{code} +(/New v4.2) I had thought of offering more +features of a \LaTeX\ counter. However, the user should +better \emph{not} have access to this counter. ~\c@page~ +should suffice as a pagewise master counter.---To be sure, +along the present lines the user \emph{can} manipulate +~\c@LN@truepage~ by ~\stepcounter{page}~. E.g., she might +do this in order to manually insert a photograph. Well, +seems not to harm. + +The above usage of ~\g@addto@macro~ and ~\cl@page~ may be +not as stable as Stephan intended. His proposal used +~\xdef~ directly. But he used ~\cl@page~ as well, and who +knows \dots{} And as to ~\g@addto@macro~, I have introduced +it for list macros anyway. +(/UL) (/New v4.00) + +From the aux-file we get one macro ~\LN@P~<page> for each +page with line numbers on it. This macro calls four other +macros with one argument each. These macros are +dynamically defined to do tests and actions, to find out +on which page the current line number is located. + +We need sort of a pointer to the first page with line +numbers, initiallized to point to nothing: +\begin{code}\begin{verbatim} +\def\LastNumberedPage{first} +\def\LN@Pfirst{\nextLN\relax} +\end{verbatim} +\end{code} +The four dynamic macros are initiallized to reproduce +themselves in an ~\xdef~ +\begin{code}\begin{verbatim} +\let\lastLN\relax % compare to last line on this page +\let\firstLN\relax % compare to first line on this page +\let\pageLN\relax % get the page number, compute the linenumber +\let\nextLN\relax % move to the next page +\end{verbatim} +\end{code} +During the end-document run through the aux-files, we +disable ~\@LN~. I may put in a check here later, to give +a rerun recommendation. +\begin{code}\begin{verbatim} +\AtEndDocument{\let\@LN\@gobbletwo} +\end{verbatim} +\end{code} +Now, this is the tricky part. First of all, the whole +definition of ~\@LN~ is grouped, to avoid accumulation +on the save stack. Somehow ~\csname~<cs>~\endcsname~ pushes +an entry, which stays after an ~\xdef~ to that <cs>. + +If ~\LN@P~<page> is undefined, initialize it with the +current page and line number, with the +\emph{pointer-to-the-next-page} pointing to nothing. And +the macro for the previous page will be redefined to point +to the current one. + +If the macro for the current page already exists, just +redefine the \emph{last-line-number} entry. + +Finally, save the current page number, to get the pointer to the +following page later. +\begin{code}\begin{verbatim} +\def\@LN#1#2{{\expandafter\@@LN + \csname LN@P#2C\@LN@column\expandafter\endcsname + \csname LN@PO#2\endcsname + {#1}{#2}}} + +\def\@@LN#1#2#3#4{\ifx#1\relax + \ifx#2\relax\gdef#2{#3}\fi + \expandafter\@@@LN\csname LN@P\LastNumberedPage\endcsname#1% + \xdef#1{\lastLN{#3}\firstLN{#3}% + \pageLN{#4}{\@LN@column}{#2}\nextLN\relax}% + \else + \def\lastLN##1{\noexpand\lastLN{#3}}% + \xdef#1{#1}% + \fi + \xdef\LastNumberedPage{#4C\@LN@column}} +\end{verbatim} +\end{code} +The previous page macro gets its pointer to the +current one, replacing the ~\relax~ with the cs-token +~\LN@P~<page>. +\begin{code}\begin{verbatim} +\def\@@@LN#1#2{{\def\nextLN##1{\noexpand\nextLN\noexpand#2}% + \xdef#1{#1}}} +\end{verbatim} +\end{code} +Now, to print a line number, we need to find the page, +where it resides. This will most probably be the page where +the last one came from, or maybe the next page. However, it can +be a completely different one. We maintain a cache, +which is ~\let~ to the last page's macro. But for now +it is initialized to expand ~\LN@first~, where the poiner +to the first numbered page has been stored in. +\begin{code}\begin{verbatim} +\def\NumberedPageCache{\LN@Pfirst} +\end{verbatim} +\end{code} +To find out on which page the current ~\c@linenumber~ is, +we define the four dynamic macros to do something usefull +and execute the current cache macro. ~\lastLN~ is run +first, testing if the line number in question may be on a +later page. If so, disable ~\firstLN~, and go on to the +next page via ~\nextLN~. +\begin{code}\begin{verbatim} +\def\testLastNumberedPage#1{\ifnum#1<\c@linenumber + \let\firstLN\@gobble + \fi} +\end{verbatim} +\end{code} +Else, if ~\firstLN~ finds out that we need an earlier +page, we start over from the beginning. Else, ~\nextLN~ +will be disabled, and ~\pageLN~ will run +~\gotNumberedPage~ with four arguments: the first line +number on this column, the page number, the column +number, and the first line on the page. +\begin{code}\begin{verbatim} +\def\testFirstNumberedPage#1{\ifnum#1>\c@linenumber + \def\nextLN##1{\testNextNumberedPage\LN@Pfirst}% + \else + \let\nextLN\@gobble + \def\pageLN{\gotNumberedPage{#1}}% + \fi} +\end{verbatim} +\end{code} +We start with ~\pageLN~ disabled and ~\nextLN~ defined to +continue the search with the next page. +\begin{code}\begin{verbatim} +\long\def \@gobblethree #1#2#3{} + +\def\testNumberedPage{% + \let\lastLN\testLastNumberedPage + \let\firstLN\testFirstNumberedPage + \let\pageLN\@gobblethree + \let\nextLN\testNextNumberedPage + \NumberedPageCache + } +\end{verbatim} +\end{code} +When we switch to another page, we first have to make +sure that it is there. If we are done with the last +page, we probably need to run \TeX\ again, but for the +rest of this run, the cache macro will just return four +zeros. This saves a lot of time, for example if you have +half of an aux-file from an aborted run, in the next run +the whole page-list would be searched in vain again and +again for the second half of the document. + +If there is another page, we iterate the search. +\begin{code}\begin{verbatim} +\def\testNextNumberedPage#1{\ifx#1\relax + \global\def\NumberedPageCache{\gotNumberedPage0000}% + \PackageWarningNoLine{lineno}% + {Linenumber reference failed, + \MessageBreak rerun to get it right}% + \else + \global\let\NumberedPageCache#1% + \fi + \testNumberedPage + } +\end{verbatim} +\end{code} +\linelabel{demo2} +\marginpar{\tiny\raggedright +Let's see if it finds the label +on page \pageref{demo}, +line \ref{demo}, and back here +on page \pageref{demo2}, line +\ref{demo2}. +\unskip}% +To separate the official hooks from the internals there is +this equivalence, to hook in later for whatever purpose: +\begin{code}\begin{verbatim} +\let\getLineNumber\testNumberedPage +\end{verbatim} +\end{code} +So, now we got the page where the number is on. We +establish if we are on an odd or even page, and calculate +the final line number to be printed. +\begin{code}\begin{verbatim} +\newif\ifoddNumberedPage +\newif\ifcolumnwiselinenumbers +\columnwiselinenumbersfalse + +\def\gotNumberedPage#1#2#3#4{\oddNumberedPagefalse + \ifodd \if@twocolumn #3\else #2\fi\relax\oddNumberedPagetrue\fi + \advance\c@linenumber\@ne + \ifcolumnwiselinenumbers + \subtractlinenumberoffset{#1}% + \else + \subtractlinenumberoffset{#4}% + \fi + } +\end{verbatim} +\end{code} +You might want to run the pagewise mode with running line +numbers, or you might not. It's your choice: +\begin{code}\begin{verbatim} +\def\runningpagewiselinenumbers{% + \let\subtractlinenumberoffset\@gobble + } + +\def\realpagewiselinenumbers{% + \def\subtractlinenumberoffset##1{\advance\c@linenumber-##1\relax}% + } + +\realpagewiselinenumbers +\end{verbatim} +\end{code} +For line number references, we need a protected call to +the whole procedure, with the requested line number stored +in the ~\c@linenumber~ counter. This is what gets printed +to the aux-file to make a label: +\begin{code}\begin{verbatim} +\def\thePagewiseLineNumber{\protect + \getpagewiselinenumber{\the\c@linenumber}}% +\end{verbatim} +\end{code} +And here is what happens when the label is refered to: +\begin{code}\begin{verbatim} +\def\getpagewiselinenumber#1{{% + \c@linenumber #1\relax\testNumberedPage + \thelinenumber + }} +\end{verbatim} +\end{code} +% +A summary of all per line expenses: +\begin{description}\item +[CPU:] The ~\output~ routine is called for each line, +and the page-search is done. +\item +[DISK:] One line of output to the aux-file for each +numbered line +\item +[MEM:] One macro per page. Great improvement over v1.02, +which had one control sequence per line in +addition. It blew the hash table after some five +thousand lines. +\end{description} + +\subsection{% +Twocolumn mode (New v3.06) +\unskip} + +Twocolumn mode requires another patch to the ~\output~ +routine, in order to print a column tag to the .aux +file. +\begin{code}\begin{verbatim} +\AtBeginDocument{% v4.2, revtex4.cls (e.g.). + % <- TODO v4.4+: Or better in \LineNoLaTeXOutput!? + \let\@LN@orig@makecol\@makecol} +\def\@LN@makecol{% + \@LN@orig@makecol + \setbox\@outputbox \vbox{% + \boxmaxdepth \@maxdepth + \protected@write\@auxout{}{% + \string\@LN@col{\if@firstcolumn1\else2\fi}% + }% + \box\@outputbox + }% \vbox +} %% TODO cf. revtexln.sty. + +\def\@LN@col{\def\@LN@column} % v4.22, removed #1. +\@LN@col{1} +\end{verbatim} +\end{code} + +\subsection{% +Numbering modulo $m$, starting at $f$ +\unskip}\label{ss:Mod} + +Most users want to have only one in five lines numbered. +~\LineNumber~ is supposed to produce the outfit of the +line number attached to the line, while ~\thelinenumber~ +is used also for references, which should appear even if +they are not multiples of five. + +(New v4.00) Moreover, some users want to +control which line number should be printed first. Support +of this is now introduced here---see ~\firstlinenumber~ +below.---~numline.sty~ by Michael Jaegermann and +James Fortune offers controlling which \emph{final} +line numbers should not be printed. What is +it good for? We ignore this here until some user demands +it.---Peter Wilson's ~ledmac.sty~ offers much different +choices of line numbers to be printed, due to Wayne Sullivan. +(/New v4.00) + +(New v4.22) ~\c@linenumbermodulo~ is rendered a +fake counter, as discussed since v4.00. So it can +no longer be set by ~\setcounter~. ~\modulolinenumbers~ +serves this purpose. Well, does anybody want to do +what worked with ~\addtocounter~? (Then please tell +me.)---At least, ~\value~ still works. For the same +purpose I rename the fake `firstlinenumber' counter +~\n@...~ to ~\c@...~. (/New v4.22) +\begin{old}\begin{verbatim} +% \newcount\c@linenumbermodulo % removed for v4.22 +\end{verbatim} +\end{old} + + +(New v4.00) \par +~\themodulolinenumber~ waits for being declared +~\LineNumber~ by ~\modulolinenumbers~. (This has +been so before, no change.) Here is how it +looked before: +\begin{old}\begin{verbatim} +% \def\themodulolinenumber{{\@tempcnta\c@linenumber +% \divide\@tempcnta\c@linenumbermodulo +% \multiply\@tempcnta\c@linenumbermodulo +% \ifnum\@tempcnta=\c@linenumber\thelinenumber\fi +% }} +\end{verbatim} +\end{old} +(UL) This was somewhat slow. This arithmetic +happens at every line. This time I tend to declare an extra +line counter (as opposed to my usual recommendations to use +counters as rarely as possible) which is stepped every line. +It could be incremented in the same way as ~\c@LN@truepage~ +is incremented via ~\cl@page~! This is another point in favour +of ~{linenumber}~ being a \LaTeX\ counter! +When this new counter equals ~\c@linenumbermodulo~, it is reset, +and ~\thelinenumber~ is executed.---It gets much slower by my +support of controlling the first line number below. I should +improve this.---On +the other hand, time expense means very little nowadays, +while the number of \TeX\ counters still is limited. + +For the same purpose, moreover, attaching the line number +box could be intercepted earlier (in ~\MakeLineNo~), +without changing ~\LineNumber~. However, this may be +bad for the latter's announcement as a wizard interface +in section_\ref{s:UserCmds}. +(/UL) + +Here is the new code. It is very near to my ~lnopatch.sty~ +code which introduced the first line number feature +before.---I add starting with a ~\relax~ which is so often +recommended---without understanding this really. At least, +it will not harm.---Former group braces appear as +~\begingroup~/~\endgroup~ here. +\begin{code}\begin{verbatim} +\def\themodulolinenumber{\relax + \ifnum\c@linenumber<\c@firstlinenumber \else + \begingroup + \@tempcnta\c@linenumber + \advance\@tempcnta-\c@firstlinenumber + \divide\@tempcnta\c@linenumbermodulo + \multiply\@tempcnta\c@linenumbermodulo + \advance\@tempcnta\c@firstlinenumber + \ifnum\@tempcnta=\c@linenumber \thelinenumber \fi + \endgroup + \fi +} +\end{verbatim} +\end{code} +(/New v4.00) + +The user command to set the modulo counter: +(New v4.31) \dots\ a star variant is introduced to implement +Hillel Chayim Yisraeli's idea to print the first line number +after an interruption of the edited text by some editor's +text, regardless of the modulo. If it is 1, it is printed only +with ~\firstlinenumber{1}~. I.e., you use ~\modulolinenumbers*~ +for the new feature, without the star you get the simpler +behaviour that we have had so far. And you can switch back +from the refined behaviour to the simple one by using +~\modulolinenumbers~ without the star.---This enhancement +is accompanied by a new package option ~modulo*~ which just +executes ~\modulolinenumbers*~ +(subsection_\ref{ss:v3opts}).---`With ~\firstlinenumber{1}~' +exactly means: `1' is printed if and only if the last +~\firstlinenumber~ before or in the paragraph that follows +the ``interruption'' has argument `1' (or something +\emph{expanding} to `1', or (to) something that \TeX\ +``reads'' as 1, e.g.: a \TeX\ count register storing +1).---At present, this behaviour may be unsatisfactory with +pagewise line-numbering $\dots$ I'll make an experimental +extra package if someone complains \dots +\begin{code}\begin{verbatim} +\newcommand\modulolinenumbers{% + \@ifstar + {\def\@LN@maybe@moduloresume{% + \global\let\@LN@maybe@normalLineNumber + \@LN@normalLineNumber}% + \@LN@modulolinenos}% + {\let\@LN@maybe@moduloresume\relax \@LN@modulolinenos}% +} + +\global\let\@LN@maybe@normalLineNumber\relax +\let\@LN@maybe@moduloresume\relax +\gdef\@LN@normalLineNumber{% + \ifnum\c@linenumber=\c@firstlinenumber \else + \ifnum\c@linenumber>\@ne + \def\LineNumber{\thelinenumber}% + \fi + \fi +\end{verbatim} +\end{code} +~\def~ instead of ~\let~ enables taking account of a +redefinition of ~\thelinenumber~ in a present numbering +environment (e.g.). +\begin{code}\begin{verbatim} + \global\let\@LN@maybe@normalLineNumber\relax} +\end{verbatim} +\end{code} +Instead of changing ~\LineNumber~ directly by +~LN@moduloresume~, these tricks enable ~\modulolinenumbers*~ +to act as locally as I can make it. I don't know how to +avoid that the output routine switches back to the normal +modulo behaviour by a global change. (An ~\aftergroup~ may +fail in admittedly improbable cases.) +\begin{code}\begin{verbatim} +\newcommand*\@LN@modulolinenos[1][\z@]{% +\end{verbatim} +\end{code} +The definition of this macro is that of the former +~\modulolinenumbers~. (/New v4.31) +\begin{code}\begin{verbatim} + \let\LineNumber\themodulolinenumber + \ifnum#1>\@ne + \chardef % v4.22, note below + \c@linenumbermodulo#1\relax + \else\ifnum#1=\@ne +\end{verbatim} +\end{code} +\begin{old}\begin{verbatim} +% \def\LineNumber{\thelinenumber}% +\end{verbatim} +\end{old} +(New v4.00) I am putting something here to enable +~\firstlinenumber~ with $~\c@linenumbermodulo~=1$. +With ~lnopatch.sty~, a trick was offered for this purpose. +It is now obsolete. + +\begin{code}\begin{verbatim} + \def\LineNumber{\@LN@ifgreat\thelinenumber}% +\end{verbatim} +\end{code} +(/New v4.00) +\begin{code}\begin{verbatim} + \fi\fi + } +\end{verbatim} +\end{code} +(New v4.00) The default of ~\@LN@ifgreat~ is +\begin{code}\begin{verbatim} +\let\@LN@ifgreat\relax +\end{verbatim} +\end{code} +The previous changes as soon as ~\firstlinenumber~ is used: +\begin{code}\begin{verbatim} +\newcommand*\firstlinenumber[1]{% + \chardef\c@firstlinenumber#1\relax +\end{verbatim} +\end{code} +No counter, little values allowed only---OK?---(UL) +The change is local---OK? The good thing is that +~\global\firstlinenumber{~<number>~}~ works. Moreover, +~\modulolinenumbers~ acts locally as well. (/UL) + +(New v4.31) +\begin{code}\begin{verbatim} + \let\@LN@ifgreat\@LN@ifgreat@critical} + +\def\@LN@ifgreat@critical{% + \ifnum\c@linenumber<\c@firstlinenumber + \expandafter \@gobble + \fi}% +\end{verbatim} +\end{code} +(/New v4.31) + +The default +value of ~\c@firstlinenumber~ %% v4.31 +is 0. This is best for what one would expect from modulo +printing. +\begin{code}\begin{verbatim} +\let\c@firstlinenumber=\z@ +\end{verbatim} +\end{code} + +For usage and effects of ~\modulolinenumbers~ and %% v4.31 +~\firstlinenumbers~, please consult section_\ref{s:UserCmds}. +Two details on ~\firstlinenumbers~ here: +(i)_~\firstlinenumber~ acts on a paragraph if and only if +(a)_the paragraph is broken into lines ``in line-numbering +mode'' (after ~\linenumbers~, e.g.); +(b)_it is the last occurrence of a ~\firstlinenumbers~ +before or in the paragraph. +(The practical applications of this that I can imagine +don't seem appealing to me.) +Cf._the explanation above of how ~\modulolinenumbers~ and +~\firstlinenumbers~ interact---for this and for (ii), +which is concerned with possible arguments for +~\firstlinenumbers~. + +Note that the line numbers of the present section +demonstrate the two devices. (/New v4.00) +\begin{code}\begin{verbatim} +\chardef\c@linenumbermodulo=5 % v4.2; ugly? +\modulolinenumbers[1] +\end{verbatim} +\end{code} +(New v4.22) The new implementation through ~\chardef~ +decreases the functionality and raises certain compatibility +problems. I face this without fear. The maximum modulo value +is now ~255~. I expect that this suffices for usual applications. +However, some users have ``abused'' ~lineno.sty~ to get +~ednotes.sty~ features without line numbers, so have set the +modulo to a value beyond the total number of lines in their +edition. This ought to be replaced by +~\let\makeLineNumber\relax~. (/New v4.22) + +\section{% +Package options +\unskip}\label{s:Opts} + +(New v4.1) +The last heading formerly was the heading of what is now +subsection_\ref{ss:v3opts}. The options declared there were +said to execute user commands only. This was wrong already +concerning ~displaymath~ and ~hyperref~. At least, however, +these options were no or almost no occasion to skip definitions +or allocations. This is different with the options that we now +insert. + + +\subsection{% +Extended referencing to line numbers. (v4.2) +\unskip} +This subsection explains and declares package option ~addpageno~. %% v4.31 + +If a line to whose number you refer by ~\ref~ is not on the +present page, it may be useful to add the number of the page +on which the line occurs---and perhaps it should not be added +otherwise. In general, you could use the Standard \LaTeX\ +package varioref for this. However, the latter usually +produces verbose output like `on the preceding page'--- +unless costumized---, while in critical editions, e.g., one +may prefer just adding the page number and some mark on the +left of the line number, irrespectively of how far the page is +apart etc. To support this, package option ~addpageno~ +provides a command ~\vpagelineref~ to be used in place of +~\ref~. This produces, e.g., `34.15' when referring to line_15 +on page_34 while the present page is not 34. You can customize +the outcome, see the package file ~vplref.sty~ where the code +and further details are. You may conceive of +~\vpagelineref~ as a certain customization of varioref's +~\vref~. + +This implies that option ~addpageno~ requires the files +~vplref.sty~ and ~varioref.sty~. ~addpageno~ automatically +loads both of them. Yet you can also load ~varioref.sty~ +on your own to use its package options. + +Of course, you might better introduce a shorter command name +for ~\vpagelineref~ for your work, while we cannot predict +here what shorthand will fit your work. E.g., +~\newcommand{\lref}{\vpagelineref}~. + +If you really want to add the page number in \emph{any} case, +use, e.g., some ~\myref~ instead of ~\ref~, after +\[~newcommand*{\myref}{\pageref{#1}.\ref{#1}}~\] +or what you like. You don't need the ~addpageno~ option in +this case. + +~addpageno~ is due to a suggestion by Sergei Mariev. +\begin{code}\begin{verbatim} +\DeclareOption{addpageno}{% + \AtEndOfPackage{\RequirePackage{vplref}[2005/04/25]}} +\end{verbatim} +\end{code} +\subsection{% +\scs{linelabel} in math mode +\unskip}\label{ss:MathRef} + +We have made some first steps towards allowing ~\linelabel~ in +math mode. Because our code for this is presently experimental, +we leave it to the user to decide for the experiment by calling +option ~mathrefs~. We are in a hurry now and thus leave the +code, explanations, and discussion in the separate package +~ednmath0.sty~. Maybe we later find the time to improve the +code and move the relevant content of ~ednmath0.sty~ to here. +The optimal situation would be to define ~\linelabel~ from +the start so it works in math mode, omitting the ~mathrefs~ +option. + +Actually, this package even provides adjustments for analogously +allowing ~ednotes.sty~ commands in math mode. Loading the package +is postponed to ~\AtBeginDocument~ when we know whether these +adjustments are needed. +\begin{code}\begin{verbatim} +\DeclareOption{mathrefs}{\AtBeginDocument + {\RequirePackage{ednmath0}[2004/08/20]}} +\end{verbatim} +\end{code} + +\subsection{% +Arrays, tabular environments (Revised v4.11) +\unskip}\label{ss:Tab} + +This subsection explains and declares package options %% v4.31 +~edtable~, ~longtable~, and ~nolongtablepatch~. + +The standard \LaTeX\ tabular environments come as single +boxes, so the ~lineno.sty~ versions before v4.00 treated them as +(parts of) single lines, printing (at most) one line number +beside each and stepping the line number counter once only. +Moreover, ~\linelabel~s got lost. Of course, tables are +usually so high that you will want to treat each row like a +line. (Christian Tapp even desires that the lines of table +entries belonging to a single row are treated like ordinary +lines.) Footnotes get lost in such environments as well, which +was bad for ~ednotes.sty~. + +We provide adjustments to count lines, print their numbers +etc.\ as desired at least for \emph{some} \LaTeX\ tabular +environments. (Like with other details, ``some'' is to some +extent explained in ~edtable.sty~.) We do this similarly as +with option ~mathrefs~ before. We leave code +and explanations in the separate package ~edtable.sty~. +(For wizards: this package provides adjustments for +~ednotes.sty~ as well. However, in the present case we don't try +to avoid them unless ~ednotes.sty~ is loaded.) +Package option ~edtable~ +defines---by loading ~edtable.sty~---an environment ~{edtable}~ +which is able to change some \LaTeX\ tabular environments +with the desired effects. (v4.11: ~edtable.sty~ v1.3 counts +\LaTeX's ~{array}~ [etc.\@] as a ``tabular environment'' as +well.) + +The ~{edtable}~ environment doesn't help with ~longtable.sty~, +however. To make up for this, ~{longtable}~ is adjusted in a +different way---and this happens only when another ~lineno.sty~ +option ~longtable~ is called. In this case, option ~edtable~ +needn't be called explicitly: option ~longtable~ works as if +~edtable~ had been called. + +Now, we are convinced that vertical spacing around +~{longtable}~ works wrongly---see \LaTeX\ bugs database +tools/3180 and 3485, or see explanations in the package +~ltabptch.sty~ (which is to be obtained from CTAN folder +\path{macros/latex/ltabptch}). Our conviction is so strong +that the ~longtable~ option loads---after ~longtable.sty~---the +patch package ~ltabptch.sty~. If the user doesn't want this +(maybe preferring her own arrangement with the vertical +spacing), she can forbid it by calling ~nolongtablepatch~. + +The following code just collects some choices, which are +then executed in section_\ref{ss:ExOpt}. We use an ~\if...~ +without ~\newif~ since ~\if...true~ and ~\if...false~ +would occur at most two times and only within the present +package. (~\AtEndOfClass{\RequirePackage{edtable}}~ +could be used instead, I just overlooked this. Now I don't +change it because it allows to change the version requirement +at one place only.) +\begin{code}\begin{verbatim} +\let\if@LN@edtable\iffalse + +\DeclareOption{edtable}{\let\if@LN@edtable\iftrue} + +\DeclareOption{longtable}{\let\if@LN@edtable\iftrue + \PassOptionsToPackage{longtable}{edtable}} + +\DeclareOption{nolongtablepatch}{% + \PassOptionsToPackage{nolongtablepatch}{edtable}} +\end{verbatim} +\end{code} +(/New v4.1) + +\subsection{% +Switch among settings +\unskip}\label{ss:v3opts} + +There is a bunch of package options that execute %% v4.2 +user commands only. + +Options ~left~ (~right~) put the line numbers on the left +(right) margin. This works in all modes. ~left~ is the +default. +\begin{code}\begin{verbatim} +\DeclareOption{left}{\leftlinenumbers*} + +\DeclareOption{right}{\rightlinenumbers*} +\end{verbatim} +\end{code} +Option ~switch~ (~switch*~) puts the line numbers on the +outer (inner) margin of the text. This requires running +the pagewise mode, but we turn off the page offset +subtraction, getting sort of running numbers again. The +~pagewise~ option may restore true pagewise mode later. +\begin{code}\begin{verbatim} +\DeclareOption{switch}{\setpagewiselinenumbers + \switchlinenumbers + \runningpagewiselinenumbers} + +\DeclareOption{switch*}{\setpagewiselinenumbers + \switchlinenumbers*% + \runningpagewiselinenumbers} +\end{verbatim} +\end{code} +In twocolumn mode, we can switch the line numbers to +the outer margin, and/or start with number 1 in each +column. Margin switching is covered by the ~switch~ +options. +\begin{code}\begin{verbatim} +\DeclareOption{columnwise}{\setpagewiselinenumbers + \columnwiselinenumberstrue + \realpagewiselinenumbers} +\end{verbatim} +\end{code} +The options ~pagewise~ and ~running~ select the major +linenumber mechanism. ~running~ line numbers refer to a real +counter value, which can be reset for any paragraph, +even getting multiple paragraphs on one page starting +with line number one. ~pagewise~ line numbers get a +unique hidden number within the document, but with the +opportunity to establish the page on which they finally +come to rest. This allows the subtraction of the page +offset, getting the numbers starting with 1 on top of each +page, and margin switching in twoside formats becomes +possible. The default mode is ~running~. + +The order of declaration of the options is important here +~pagewise~ must come after ~switch~, to overide running +pagewise mode. ~running~ comes last, to reset the running +line number mode, e.g, after selecting margin switch mode +for ~pagewise~ running. Once more, if you specify all +three of the options ~[switch,pagewise,running]~, the +result is almost nothing, but if you later say +~\pagewiselinenumbers~, you get margin switching, with +real pagewise line numbers. + +\begin{code}\begin{verbatim} +\DeclareOption{pagewise}{\setpagewiselinenumbers + \realpagewiselinenumbers} + +\DeclareOption{running}{\setrunninglinenumbers} +\end{verbatim} +\end{code} +The option ~modulo~ causes only those linenumbers to be +printed which are multiples of five. +\begin{code}\begin{verbatim} +\DeclareOption{modulo}{\modulolinenumbers\relax} +\end{verbatim} +\end{code} +Option ~modulo*~ modifies ~modulo~ in working like +~\modulolinenumbers*~---see section_\ref{s:UserCmds}. +\begin{code}\begin{verbatim} +\DeclareOption{modulo*}{\modulolinenumbers*\relax} +\end{verbatim} +\end{code} +The package option ~mathlines~ switches the behavior of +the ~{linenomath}~ environment with its star-form. +Without this option, the ~{linenomath}~ environment does +not number the lines of the display, while the star-form +does. With this option, its just the opposite. + +\begin{code}\begin{verbatim} +\DeclareOption{mathlines}{\linenumberdisplaymath} +\end{verbatim} +\end{code} +~displaymath~ now calls for wrappers of the standard +\LaTeX\ display math environment. This was previously +done by ~mlineno.sty~. + +(New v4.3) Option `displaymath' becomes default according +to Erik \mbox{Luijten}'s suggestion. I was finally convinced +of this as soon as I discovered how to avoid a spurious line +number above ~\begin{linenomath}~ (subsection_\ref{ss:DM}). +~\endlinenomath~ provides ~\ignorespaces~, so what could go +wrong now? +\begin{code}\begin{verbatim} +\DeclareOption{displaymath}{\PackageWarningNoLine{lineno}{% + Option [displaymath] is obsolete -- default now!}} +\end{verbatim} +\end{code} +(/New v4.3) + +\subsection{% +Compatibility with \texttt{hyperref} %% own subsec. v4.3. +\unskip} +The ~hyperref~ package, via ~nameref~, requires three more +groups in the second argment of a ~\newlabel~. Well, why +shouldn't it get them? (New v3.07) The presence of the +~nameref~ package is now detected automatically +~\AtBeginDocument~. (/New v3.07) (Fixed in v3.09) We try +to be smart, and test ~\AtBeginDocument~ if the ~nameref~ +package is loaded, but ~hyperref~ postpones the loading of +~nameref~ too, so this is all in vain. + +(New v4.3) But we can also test at the first ~\linelabel~. +Regarding the error-message for misplaced ~\linelabel~ from v4.11: +previously, ~\linenumbers~ rendered ~\linelabel~ the genuine +version of ~\linelabel~ from the start on. This doesn't work +now, since ~\@LN@linelabel~ may change its meaning after the +first ~\linenumbers~ and before a next one (if there is some). +(/New v4.3) +\begin{code}\begin{verbatim} +\DeclareOption{hyperref}{\PackageWarningNoLine{lineno}{% + Option [hyperref] is obsolete. + \MessageBreak The hyperref package is detected automatically.}} + +\AtBeginDocument{% + \@ifpackageloaded{nameref}{% +\end{verbatim} +\end{code} +(New v4.3) ``Global'' is merely ``symbolic'' ~\AtBeginDoc...~. +If ~nameref~ is not detected here, the next ~\@LN@linelabel~ +will do almost the same, then globally indeed. +\begin{code}\begin{verbatim} + \gdef\@LN@ExtraLabelItems{{}{}{}}% + }{% + \global\let\@LN@@linelabel\@LN@linelabel + \gdef\@LN@linelabel{% +\end{verbatim} +\end{code} +~\@ifpackageloaded~ is ``preamble only'', its---very +internal---preamble definition is replicated here: +\begin{code}\begin{verbatim} + \expandafter + \ifx\csname ver@nameref.sty\endcsname\relax \else + \gdef\@LN@ExtraLabelItems{{}{}{}}% + \fi +\end{verbatim} +\end{code} +Now aim at the ``usual'' behaviour: +\begin{code}\begin{verbatim} + \global\let\@LN@linelabel\@LN@@linelabel + \global\let\@LN@@linelabel\relax + \@LN@linelabel + }% + }% +} +\end{verbatim} +\end{code} +(/New v4.3) + +(New v4.1) +\subsection{% +A note on calling so many options +\unskip} + +The number of package options may stimulate worrying about how to +\emph{enter} all the options that one would like to use---they may +not fit into one line. Fortunately, you can safely break code lines +after the commas separating the option names in the ~\usepackage~ +command (no comment marks needed). + +\subsection{% +Execute options +\unskip}\label{ss:ExOpt} + +We stop declaring options and execute the ones that are +called by the user. (/New v4.1) +\begin{code}\begin{verbatim} +\ProcessOptions +\end{verbatim} +\end{code} +(New v4.1) Now we know whether ~edtable.sty~ is wanted +and (if it is) with which options it is to be called. +\begin{code}\begin{verbatim} +\if@LN@edtable \RequirePackage{edtable}[2005/03/07] \fi +\end{verbatim} +\end{code} +(/New v4.1) + +\section{% +Former package extensions +\label{s:Xt}\unskip} + +The extensions in this section were previously supplied +in separate ~.sty~ files. + +\subsection{% +$display math$ +\unskip}\label{ss:display} +(New v4.3) From now on, you no longer need to type +the ~{linenomath}~ environment with the ~\[~, ~{equation}~, +and ~{eqnarray}~ environments---and you no longer need to +use the former package option ~displaymath~ for this feature. +(/New v4.3) + +The standard \LaTeX\ display math environments are +wrapped in a ~{linenomath}~ environment. + +(New 3.05) The ~[fleqn]~ option of the standard +\LaTeX\ classes defines the display math +environments such that line numbers appear just +fine. Thus, we need not do any tricks when +~[fleqn]~ is loaded, as indicated by presents of +the ~\mathindent~ register. (/New 3.05) + +(New 3.05a) for ~{eqnarray}~s we rather keep the +old trick. (/New 3.05a) + +(New 3.08) Wrap ~\[~ and ~\]~ into ~{linenomath}~, +instead of ~{displaymath}~. Also save the definition +of ~\equation~, instead of replicating the current +\LaTeX\ definition. (/New 3.08) +\begin{code}\begin{verbatim} + \@ifundefined{mathindent}{ + + \let\LN@displaymath\[% + \let\LN@enddisplaymath\]% + \renewcommand\[{\begin{linenomath}\LN@displaymath}% + \renewcommand\]{\LN@enddisplaymath\end{linenomath}}% +\end{verbatim} +\end{code} + +\begin{code}\begin{verbatim} + \let\LN@equation\equation + \let\LN@endequation\endequation + \renewenvironment{equation}% + {\linenomath\LN@equation}% + {\LN@endequation\endlinenomath}% + + }{}% \@ifundefined{mathindent} -- 3rd arg v4.2, was \par! + + \let\LN@eqnarray\eqnarray + \let\LN@endeqnarray\endeqnarray + \renewenvironment{eqnarray}% + {\linenomath\LN@eqnarray}% + {\LN@endeqnarray\endlinenomath}% +\end{verbatim} +\end{code} +(UL) Indeed. The \LaTeX\ macros are saved for +unnumbered mode, which is detected by ~\linenomath~. +(/UL) + +\subsection{% +Line numbers in internal vertical mode +\unskip}\label{ss:ILN} + +The command ~\internallinenumbers~ adds line numbers in +internal vertical mode, but with limitations: we assume +fixed baseline skip. + +(v4.22) v3.10 provided a global (~\global\advance~) +as well as a local version (star-form, using +~\c@internallinenumber~). ~\resetlinenumbers~ acted +locally and was here used with the global version---save +stack danger, \TeX book p._301---in v4.00 I +disabled the global version therefore. Now I find that +it is better to keep a global version, and the now global +~\resetlinenumbers~ is perfect for this. The global version +allows continuing the ``internal'' numbers in the ensuing +``external'' text, and---unless reset by brackets +argument---continuing the above series of line numbers. +As with v3.10, the local version always starts with +line number one. A new ~\@LN@iglobal~ steps ~\global~ly +in the global version, otherwise it is ~\relax~. +(I also remove all my stupid discussions as of v4.00. +And I use ~\newcommand~.) (v4.22) +\begin{code}\begin{verbatim} +\let\@LN@iglobal\global % v4.22 + +\newcommand\internallinenumbers{\setrunninglinenumbers + \let\@@par\internallinenumberpar + \ifx\@par\@@@par\let\@par\internallinenumberpar\fi + \ifx\par\@@@par\let\par\internallinenumberpar\fi + \ifx\@par\linenumberpar\let\@par\internallinenumberpar\fi + \ifx\par\linenumberpar\let\par\internallinenumberpar\fi + \@ifnextchar[{\resetlinenumber}%] + {\@ifstar{\let\c@linenumber\c@internallinenumber + \let\@LN@iglobal\relax % v4.22 + \c@linenumber\@ne}{}}% + } + +\let\endinternallinenumbers\endlinenumbers +\@namedef{internallinenumbers*}{\internallinenumbers*} +\expandafter\let\csname endinternallinenumbers*\endcsname\endlinenumbers + +\newcount\c@internallinenumber +\newcount\c@internallinenumbers + +\newcommand\internallinenumberpar{% + \ifvmode\@@@par\else\ifinner\@@@par\else\@@@par + \begingroup + \c@internallinenumbers\prevgraf + \setbox\@tempboxa\hbox{\vbox{\makeinternalLinenumbers}}% + \dp\@tempboxa\prevdepth + \ht\@tempboxa\z@ + \nobreak\vskip-\prevdepth + \nointerlineskip\box\@tempboxa + \endgroup + \fi\fi + } + +\newcommand\makeinternalLinenumbers{% + \ifnum\c@internallinenumbers>\z@ % v4.2 + \hb@xt@\z@{\makeLineNumber}% + \@LN@iglobal % v4.22 + \advance\c@linenumber\@ne + \advance\c@internallinenumbers\m@ne + \expandafter\makeinternalLinenumbers\fi + } + % TODO v4.4+: star: line numbers right!? cf. lnocapt.sty +\end{verbatim} +\end{code} + +\subsection{% +Line number references with offset +\unskip} + +This extension defines macros to refer to line +numbers with an offset, e.g., to refer to a line +which cannot be labeled directly (display math). +This was formerly knows as ~rlineno.sty~. + +To refer to a pagewise line number with offset: +\begin{quote} +~\linerefp[~<OFFSET>~]{~<LABEL>~}~ +\end{quote} +To refer to a running line number with offset: +\begin{quote} +~\linerefr[~<OFFSET>~]{~<LABEL>~}~ +\end{quote} +To refer to a line number labeled in the same mode as currently +selected: +\begin{quote} +~\lineref[~<OFFSET>~]{~<LABEL>~}~ +\end{quote} +\begin{code}\begin{verbatim} +\newcommand\lineref{% + \ifx\c@linenumber\c@runninglinenumber + \expandafter\linerefr + \else + \expandafter\linerefp + \fi +} + +\newcommand*\linerefp[2][\z@]{{% + \let\@thelinenumber\thelinenumber + \edef\thelinenumber{\advance\c@linenumber#1\relax + \noexpand\@thelinenumber}% + \ref{#2}% +}} +\end{verbatim} +\end{code} +This goes deep into \LaTeX's internals. +\begin{code}\begin{verbatim} +\newcommand*\linerefr[2][\z@]{{% + \def\@@linerefadd{\advance\c@linenumber#1}% + \expandafter\@setref\csname r@#2\endcsname + \@linerefadd{#2}% +}} + +\newcommand*\@linerefadd[2]{\c@linenumber=#1\@@linerefadd\relax + \thelinenumber} +\end{verbatim} +\end{code} + +\subsection{% +Numbered quotation environments +\unskip} + +The ~{numquote}~ and ~{numquotation}~ +environments are like ~{quote}~ and +~{quotation}~, except there will be line +numbers. + +An optional argument gives the number to count +from. A star ~*~ (inside or outside the closing +~}~) prevent the reset of the line numbers. +Default is to count from one. + +(v4.22: A local version using ~\c@internallinenumber~ +might be useful, see subsection_\ref{ss:ILN}.) %% TODO v4.4+ +\begin{code}\begin{verbatim} +\newcommand\quotelinenumbers + {\@ifstar\linenumbers{\@ifnextchar[\linenumbers{\linenumbers*}}} + +\newdimen\quotelinenumbersep +\quotelinenumbersep=\linenumbersep +\let\quotelinenumberfont\linenumberfont + +\newcommand\numquotelist + {\leftlinenumbers + \linenumbersep\quotelinenumbersep + \let\linenumberfont\quotelinenumberfont + \addtolength{\linenumbersep}{-\@totalleftmargin}% + \quotelinenumbers + } + +\newenvironment{numquote} {\quote\numquotelist}{\endquote} +\newenvironment{numquotation} {\quotation\numquotelist}{\endquotation} +\newenvironment{numquote*} {\quote\numquotelist*}{\endquote} +\newenvironment{numquotation*}{\quotation\numquotelist*}{\endquotation} +\end{verbatim} +\end{code} + +\subsection{% +Frame around a paragraph +\unskip} + +The ~{bframe}~ environment draws a frame around +some text, across page breaks, if necessary. + +This works only for plain text paragraphs, +without special height lines. All lines must be +~\baselineskip~ apart, no display math. +\begin{code}\begin{verbatim} +\newenvironment{bframe} + {\par + \@tempdima\textwidth + \advance\@tempdima 2\bframesep + \setbox\bframebox\hb@xt@\textwidth{% + \hskip-\bframesep + \vrule\@width\bframerule\@height\baselineskip\@depth\bframesep + \advance\@tempdima-2\bframerule + \hskip\@tempdima + \vrule\@width\bframerule\@height\baselineskip\@depth\bframesep + \hskip-\bframesep + }% + \hbox{\hskip-\bframesep + \vrule\@width\@tempdima\@height\bframerule\@depth\z@}% + \nointerlineskip + \copy\bframebox + \nobreak + \kern-\baselineskip + \runninglinenumbers + \def\makeLineNumber{\copy\bframebox\hss}% + } + {\par + \kern-\prevdepth + \kern\bframesep + \nointerlineskip + \@tempdima\textwidth + \advance\@tempdima 2\bframesep + \hbox{\hskip-\bframesep + \vrule\@width\@tempdima\@height\bframerule\@depth\z@}% + } + +\newdimen\bframerule +\bframerule=\fboxrule + +\newdimen\bframesep +\bframesep=\fboxsep + +\newbox\bframebox +\end{verbatim} +\end{code} + + +\section{% +Move \scs{vadjust} items (New v4.00) +\unskip}\label{s:MVadj} + +This section completes reviving ~\pagebreak~, ~\nopagebreak~, +~\vspace~, and the star and optional form of ~\\~. This was +started in section_\ref{ss:output} and resumed in +section_\ref{ss:MLN} and subsection_\ref{ss:calls}. +The problem was explained in section_\ref{ss:output}: +~\vadjust~ items come out at a bad position, and the +\LaTeX\ commands named before work with ~\vadjust~ indeed. +Our solution was sketched there as well. + +According to the caveat in subsection_\ref{ss:OnOff} concerning +~\ifLineNumbers~, the \LaTeX\ commands enumerated may go +wrong if you switch line numbering inside or at the end of +a paragraph. + +\subsection{% +Redefining \scs{vadjust} +\unskip}\label{ss:PVadj} + +~\vadjust~ will temporarily be changed into the following +command. +\begin{code}\begin{verbatim} +\def\PostponeVadjust#1{% + \global\let\vadjust\@LN@@vadjust +\end{verbatim} +\end{code} +This undoes a ~\global\let\vadjust\PostponeVadjust~ which will +start each of the refined \LaTeX\ commands. The ~\global~s +are most probably superfluous. They might be useful should one +~\vadjust~ appear in a group starting after the change of +~\vadjust~ into ~\PostponeVadjust~. +(UL) Even the undoing may be superfluous, cf._discussion +in section_\ref{ss:ReDef} below. (UL) +\begin{code}\begin{verbatim} + \vadjust{\penalty-\@Mppvacodepen}% + \g@addto@macro\@LN@vadjustlist{#1\@lt}% +} +\let\@LN@@vadjust\vadjust +\global\let\@LN@vadjustlist\@empty +\global\let\@LN@do@vadjusts\relax +\end{verbatim} +\end{code} +These ~\global~s are just to remind that +all the changes of the strings after ~\let~ should be +~\global~ (\TeX book p._301). ~\@LN@vadjustlist~ collects +the ~\vadjust~ items of a paragraph. ~\PassVadjustList~ +tears one ~\vadjust~ item for the current line out of +~\@LN@vadjustlist~ and puts it into ~\@LN@do@vadjusts~. +The latter is encountered each line in ~\MakeLineNo~ +(section_\ref{ss:MLN}), while those \LaTeX\ ~\vadjust~ +commands will come rather rarely. So I decided that +~\@LN@do@vadjust~ is ~\relax~ until a ~\vadjust~ item +is waiting. In the latter case, ~\@LN@do@vadjusts~ +is turned into a list macro which resets itself to +~\relax~ when the other contents have been placed in +the vertical list.---~\PassVadjustList~ is invoked by +the output routine (section_\ref{ss:output}), so the +~\box255~ must be put back. +\begin{code}\begin{verbatim} +\def\PassVadjustList{% + \unvbox\@cclv + \expandafter \@LN@xnext \@LN@vadjustlist \@@ + \@tempa \@LN@vadjustlist + \ifx\@LN@do@vadjusts\relax + \gdef\@LN@do@vadjusts{\global\let\@LN@do@vadjusts\relax}% + \fi + \expandafter \g@addto@macro \expandafter \@LN@do@vadjusts + \expandafter {\@tempa}% +} +\end{verbatim} +\end{code} + +\subsection{% +Redefining the \LaTeX\ commands +\unskip}\label{ss:ReDef} + +Now we change ~\pagebreak~ etc.\ +so that they use ~\PostponeVadjust~ in place of ~\vadjust~. +We try to do this as independently as possible of the +implementation of the \LaTeX\ commands to be redefined. +Therefore, we don't just copy macro definition code from any +single implementation (say, latest \LaTeX) and insert our +changes, but attach a conditional +~\global\let\vadjust\PostponeVadjust~ +to their left ends in a way which should work rather +independantly of their actual code. +However, ~\vadjust~ should be the primitive again after +execution of the command. So the ~\global\let...~ may be used +only if it's guaranteed that a ~\vadjust~ is near.---(UL) +Sure? In line numbering mode, probably each ~\vadjust~ +coming from a \LaTeX\ command should be ~\PostponeVadjust~. +~\marginpar~s and floats seem to be the only cases which +are not explicitly dealt with in the present section. +This would be a way to avoid ~\@LN@nobreaktrue~! +Of course, the ~\vadjust~s that the present package uses +then must be replaced by ~\@LN@@vadjust~.---Maybe +next time. (/UL) + +The next command and something else will be added to the +\LaTeX\ commands we are concerned with here. +\begin{code}\begin{verbatim} +\DeclareRobustCommand\@LN@changevadjust{% + \ifvmode\else\ifinner\else + \global\let\vadjust\PostponeVadjust + \fi\fi +} +\end{verbatim} +\end{code} +(UL) What about math mode? Math display? Warn? (/UL) + +~\@tempa~ will now become a two place macro which adds first +argument (single token), enclosed by ~\ifLineNumbers~\,\dots +~\fi~ to the left of second argument. As long as we need it, +we can't use the star form of ~\DeclareRobustCommand~ or +the like, because AMS-\LaTeX\ uses ~\@tempa~ for ~\@ifstar~. +\begin{code}\begin{verbatim} +\def\@tempa#1#2{% + \expandafter \def \expandafter#2\expandafter{\expandafter + \ifLineNumbers\expandafter#1\expandafter\fi#2}% +} +\end{verbatim} +\end{code} +(UL) This ~\ifLineNumber~ can be fooled by +~\linenumbers~ ahead etc. It might be better to place +a signal penalty in any case and let the output routine +decide what to do. +(/UL) + +We use the occasion to switch off linenumbers where they +don't work anyway and where we don't want them, +especially in footnotes: +\begin{code}\begin{verbatim} +\@tempa\nolinenumbers\@arrayparboxrestore +\end{verbatim} +\end{code} +We hope this suffices $\dots$ let's check one thing +at least: +\begin{code}\begin{verbatim} +\CheckCommand*\@parboxrestore{\@arrayparboxrestore\let\\\@normalcr} +\end{verbatim} +\end{code} +Now for the main theme of the section. +The next lines assume that ~\vspace~, ~\pagebreak~, and +~\nopagebreak~ use ~\vadjust~ whenever they occur outside +vertical mode; moreover, that they don't directly read +an argument. Indeed ~\pagebreak~ and ~\nopagebreak~ first +call something which tests for a left bracket ahead, +while ~\vspace~ first tests for a star. +\begin{code}\begin{verbatim} +\@tempa\@LN@changevadjust\vspace +\@tempa\@LN@changevadjust\pagebreak +\@tempa\@LN@changevadjust\nopagebreak +\end{verbatim} +\end{code} +~\\~, however, uses ~\vadjust~ only in star or optional form. +We relax independency of implementation in assuming +that ~\@normalcr~ is the fragile version of ~\\~ +(and we use ~\@ifstar~!). +(Using a copy of ~\\~ would be safer, but an ugly repetition +of ~\protect~.) +\begin{code}\begin{verbatim} +\DeclareRobustCommand\\{% + \ifLineNumbers + \expandafter \@LN@cr + \else + \expandafter \@normalcr + \fi +} +\def\@LN@cr{% + \@ifstar{\@LN@changevadjust\@normalcr*}% + {\@ifnextchar[{\@LN@changevadjust\@normalcr}\@normalcr}% +} +\end{verbatim} +\end{code} +Moreover we hope that ~\newline~ never leads to a ~\vadjust~, +although names of some commands invoked by ~\\~ contain +~newline~. At last, this seems to have been OK since 1989 or +even earlier. + +\modulolinenumbers[1] +\firstlinenumber{0} +Let's have a few tests.\vspace*{.5\baselineskip} +Testing ~\pagebreak~ and ~\nopagebreak~ would be too expensive +here, but---oops!---we have just experienced a successful +~\vspace*{.5\baselineskip}~. A +~\\*[.5\baselineskip]~\\*[.5\baselineskip] may look even more +drastical, but this time we are happy about it. Note that the +line numbers have moved with the lines. Without our changes, +one line number\vadjust{\kern.5\baselineskip} would have +``anticipated'' the move of the next line, just as you can +observe it now. +(/New v4.00) + +\switchlinenumbers + +\subsection{% +Reminder on obsoleteness +\unskip} + +(New v4.1) We have completed inclusion of the earlier +extension packages ~linenox0.sty~, ~linenox1.sty~, and +~lnopatch.sty~. If one of them is loaded, though, +we produce an error message before something weird happens. +We avoid ~\newif~ because the switchings occur so rarely. +\begin{code}\begin{verbatim} +\AtBeginDocument{% + \let\if@LN@obsolete\iffalse + \@ifpackageloaded{linenox0}{\let\if@LN@obsolete\iftrue}\relax + \@ifpackageloaded{linenox1}{\let\if@LN@obsolete\iftrue}\relax + \@ifpackageloaded{lnopatch}{\let\if@LN@obsolete\iftrue}\relax + \if@LN@obsolete + \PackageError{lineno}{Obsolete extension package(s)}{% + With lineno.sty version 4.00 or later,\MessageBreak + linenox0/linenox1/lnopatch.sty must no longer be loaded.}% + \fi +} +\end{verbatim} +\end{code} + +\modulolinenumbers[1] +\section{% +The final touch +\unskip} + +There is one deadcycle for each line number. +\begin{code}\begin{verbatim} +\advance\maxdeadcycles 100 + +\endinput +\end{verbatim} +\end{code} + +\section{% +The user commands +\unskip}\label{s:UserCmds} + +The user commands to turn on and off line numbering +are +\begin{description}\item +[|\linenumbers] \ \par +Turn on line numbering in the current mode. + +\item +[|\linenumbers*] \ \par$\qquad$ +and reset the line number to 1. +\def\NL{<number>]}\item +[|\linenumbers[\NL] \ \par$\qquad$ +and start with <number>. +\item +[|\nolinenumbers] \ \par +Turn off line numbering. +\item +[|\runninglinenumbers*[\NL] \ \par +Turn on ~running~ line numbers, with the same optional +arguments as ~\linenumbers~. The numbers are running +through the text over pagebreaks. When you turn +numbering off and on again, the numbers will continue, +except, of cause, if you ask to reset or preset the +counter. +\item +[|\pagewiselinenumbers] \ \par +Turn on ~pagewise~ line numbers. The lines on each +page are numbered beginning with one at the first +~pagewise~ numbered line. +\item +[|\resetlinenumber[\NL] \ \par +Reset ~[~Set~]~ the line number to 1 +~[~<number>~]~. +\item +[|\setrunninglinenumbers] \ \par +Switch to ~running~ line number mode. Do \emph{not} +turn it on or off. +\item +[|\setpagewiselinenumbers] \ \par +Switch to ~pagewise~ line number mode. Do \emph{not} +turn it on or off. +\item +[|\switchlinenumbers*] \ \par +Causes margin switching in pagewise modes. With the +star, put the line numbers on the inner margin. +\item +[|\leftlinenumbers*] \ \par +\item +[|\rightlinenumbers*] \ \par +Set the line numbers in the left/right margin. With the +star this works for both modes of operation, without +the star only for the currently selected mode. +\item +[|\runningpagewiselinenumbers] \ \par +When using the pagewise line number mode, do not +subtract the page offset. This results in running +line numbers again, but with the possibility to switch +margins. Be careful when doing line number +referencing, this mode status must be the same while +setting the paragraph and during references. +\item +[|\realpagewiselinenumbers] \ \par +Reverses the effect of ~\runningpagewiselinenumbers~. +\item +[|\modulolinenumbers[\NL] \ \par +Give a number only to lines which are multiples of +~[~<number>~]~. If <number> is not specified, the +current value in the counter ~linenumbermodulo~ is +retained. <number>=1 turns this off without changing +~linenumbermodulo~. The counter is initialized to 5. +\item +[|\modulolinenumbers*[\NL] \ \par +Like ~\modulolinenumbers~, the only difference being +that the first line number after a ~\linenumbers~ +(or ~\runninglinenumbers~, ~\pagewiselinenumbers~, +~\quotelinenumbers~) is printed regardless of the +modulo---yet `1' is printed only after (or \dots) +~\firstlinenumber{1}~. +This also applies to the first line of a +~{linenumbers}~ or respective environment. +See subsection_\ref{ss:Mod} for another explanation. +The behaviour may be unsatisfactory with pagewise +line-numbering. +\item +[|\firstlinenumber] \ \par +~\firstlinenumber{~<filino>~}~ brings about that +(after it) line numbers less than <filino> do +\emph{not} appear in the margin. Moreover, with +~\modulolinenumbers[~<number>~]~, just the line +numbers which are <filino> plus a multiple of +<number> are printed.---If you had +~\firstlinenumber{~<pos>~}~ with some $\mbox{<pos>}>0$ +and want to switch to printing multiples of, e.g., +4, you best do ~\modulolinenumbers[4]~ and +~\firstlinenumber{0}~. (See subsection_\ref{ss:Mod} +for technical details.) +\item +[|\linenumberdisplaymath] \ \par +Number the lines of a display math in a ~{linenomath}~ +environment, but do not in a ~{linenomath*}~ +environment. This is used by the package option +~[mathlines]~. +\item +[|\nolinenumberdisplaymath] \ \par +Do not Number the lines of a display math in a +~{linenomath}~ environment, but do in a +~{linenomath*}~ environment. This is the default. +\item +[|\linelabel] \ \par +Set a ~\linelabel{~<foo>~}~ to the line number where +this commands is in. Refer to it with the \LaTeX\ +referencing commands ~\ref{~<foo>~}~ and +~\pageref{~<foo>~}~. +\end{description} +The commands can be used globally, locally within groups +or as environments. It is important to know that they +take action only when the ~\par~ is executed. The +~\end{~<mode>~linenumbers}~ commands provide a ~\par~. +Examples: +\begin{verse} +~{\linenumbers~ <text> ~\par}~ \\ +\ \\ +~\begin{linenumbers}~ \\ +<text> \\ +~\end{linenumbers}~ \\ +\ \\ +<paragraph> ~{\linenumbers\par}~ \\ +\ \\ +~\linenumbers~ \\ +<text> ~\par~ \\ +~\nolinenumbers~ \\ +\ \\ +~\linenumbers~ \\ +<paragraph> ~{\nolinenumbers\par}~ \\ +\end{verse} +(New v4.00) +However, the examples containing <paragraph> show what you +should \emph{not} do, at least if you use ~\pagebreak~, +~\nopagebreak~, ~\vspace~, ~\\*~ or +~\\[~<space>~]~---cf._section_\ref{s:MVadj}. + +The same care should be applied to the ``wizard'' devices +~\ifLineNumbers~ (subsection_\ref{ss:OnOff}) and +~\PostponeVadjust~ (section_\ref{ss:PVadj}). +(/New v4.00) + +(New v4.11) Oh, and the commands and environments of +section_{s:Xt} are missing. Sorry, I am in a hurry now. +May be next time.% %% TODO v4.4+ +---And the environments ~{linenomath}~ and ~{linenomath*}~should +get an own paragraph. In short, each math display, equation, +or ~{eqnarray}~ should be ``wrapped'' in one of ~{linenomath}~ +and ~{linenomath*}~. + +\subsection{% +Customization hooks +\unskip} + +There are several hooks to customize the appearance of the +line numbers, and some low level hooks for special +effects. +\begin{description}\item +[|\thelinenumber] \ \par +This macro should give the representation of the line +number in the \LaTeX-counter ~linenumber~. The +default is provided by \LaTeX: \par$\qquad$ +~\arabic{linenumber}~ +\item +[|\makeLineNumberLeft] \ \par +This macro is used to attach a line number to the left +of the text page. This macro should fill an ~\hbox to 0pt~ +which will be placed at the left margin of the +page, with the reference point aligned to the line to +which it should give a number. Please use the macro +~\LineNumber~ to refer to the line number. + +The default definition is \par$\qquad$ +~\hss\linenumberfont\LineNumber\hskip\linenumbersep~ +\item +[|\makeLineNumberRight] \ \par +Like ~\makeLineNumberLeft~, but for line numbers on +the right margin. + +The default definition is \par$\qquad$ +~\linenumberfont\hskip\linenumbersep\hskip\textwidth~ \par$\qquad$ +~\hbox to\linenumberwidth{\hss\LineNumber}\hss~ +\item +[|\linenumberfont] \ \par +This macro is initialized to \par$\qquad$ +~\normalfont\tiny\sffamily~ +\item +[|\linenumbersep] \ \par +This dimension register sets the separation of the +linenumber to the text. Default value is ~10pt~. +\item +[|\linenumberwidth] \ \par +This dimension register sets the width of the line +number box on the right margin. The distance of the +right edge of the text to the right edge of the line +number is ~\linenumbersep~ + ~\linenumberwidth~. The +default value is ~10pt~. +\item +[|\theLineNumber] (for wizards) \ \par +This macro is called for printing a ~\newlabel~ entry +to the aux-file. Its definition depends on the mode. +For running line numbers it's just ~\thelinenumber~, +while in pagewise mode, the page offset subtraction +is done in here. +\item +[|\makeLineNumber] (for wizards) \ \par +This macro produces the line numbers. The definition +depends on the mode. In the running line numbers +mode it just expands ~\makeLineNumberLeft~. +\item +[|\LineNumber] (for wizards) \ \par +This macro is called by ~\makeLineNumber~ to typeset +the line number. This hook is changed by the modulo +mechanism +and by ~\firstlinenumber~. +\end{description} +\end{document}%D diff --git a/Master/texmf-dist/doc/latex/lineno/lnosuppl.pdf b/Master/texmf-dist/doc/latex/lineno/lnosuppl.pdf Binary files differnew file mode 100644 index 00000000000..d41d5364e56 --- /dev/null +++ b/Master/texmf-dist/doc/latex/lineno/lnosuppl.pdf diff --git a/Master/texmf-dist/doc/latex/lineno/lnosuppl.tex b/Master/texmf-dist/doc/latex/lineno/lnosuppl.tex new file mode 100644 index 00000000000..eb3889fb7bb --- /dev/null +++ b/Master/texmf-dist/doc/latex/lineno/lnosuppl.tex @@ -0,0 +1,92 @@ +%% LNoSuppl.tex -- U.L. +\title{\LARGE \bf Supplementary files belonging \\ + to the \textit{lineno.sty} distribution \\[1ex] + \normalfont \Large + Lazy \texttt{ASCII}$\to$\texttt{PDF} listings} +\author{Uwe L\"uck} +\documentclass[10pt]{article} +\usepackage{verbatim} +\pagestyle{headings} +\newcommand*{\cs}[1]{\texttt{\char"5C#1}} +\newcommand*{\lcurl}[1]{\[\texttt{CTAN:/macros/latex/contrib/#1}\]} +\makeatletter +\newcommand*{\notinaux}[1]{% + \ifx\protect\@typeset@protect #1% + \else + \ifdim\lastskip>\z@\ignorespaces\fi + \fi} +\makeatother +\begin{document} +\maketitle +\section*{Preface} + +\texttt{lineno.sty} is a macro package made by +Stephan~I.~B\"ottcher for attaching line numbers to +\LaTeX\ documents. Some people have used it for revising +submittings in collaboration with referees or co-authors. +Documentations are nowadays preferred to be in +Adobe's \texttt{PDF}---so \texttt{lineno.sty}'s +documentation is \lcurl{lineno/lineno.pdf\,.} + +\texttt{ednotes.sty} uses \texttt{lineno.sty} for critical +editions, combining it with Alexander~I.~Rozhenko's +\texttt{manyfoot.sty}---this was Christian Tapp's idea, +who then hired me for adding the \TeX nical details. +In doing this, I had to change some internals of +\texttt{lineno.sty}, so Stephan transferred maintenance +to me; then some of my macro files that I originally had +made for \texttt{ednotes.sty} wandered into the +\texttt{lineno} directory of CTAN---because they turned +out not to need \texttt{ednotes.sty}, +just to work as extensions of \texttt{lineno.sty}\,. + +Now, I haven't had the time for making \texttt{.dtx} versions +of the \texttt{.sty} files for \texttt{ednotes}. +Therefore, ordinary \texttt{.pdf} documentation for +the remaining \texttt{.sty} files of \lcurl{lineno/} +is missing. +What you see here is nothing but a somewhat structured listing +of the additional \texttt{.txt} and \texttt{.sty} files in +\texttt{PDF}, deriving from the \texttt{verbatim} package and +its \cs{verbatiminput} command. I hope the high quality +(scalable) output is worth it. + +\leavevmode\hfill \textit{U.\,L.} + +\newpage +\tableofcontents + +\section{The \texttt{.txt} files} +\subsection{\texttt{README.txt}} +\verbatiminput{README.txt} +\subsection{\texttt{COPYING.txt}} +\verbatiminput{COPYING.txt} +\subsection{\texttt{CHANGES.txt}} +\verbatiminput{CHANGES.txt} + +\section{Tabular and array environments} +\texttt{lineno.sty}'s package options \texttt{edtable}, +\texttt{longtable}, and \texttt{nolongtablepatch} +redefine \LaTeX\ tabular and array environments +such that \texttt{lineno} and \texttt{ednotes} commands +can be used inside. The code for these options resides +in separate files at present. We are listing them here. +\subsection{\texttt{edtable.sty}} +\verbatiminput{edtable.sty} +\subsection{\texttt{ltabptch.sty}} +\verbatiminput{ltabptch.sty} + +\section{\cs{linelabel} and notes from \textit{math} mode: + \notinaux{\\} \texttt{ednmath0.sty}} +\verbatiminput{ednmath0.sty} + +\section{Extended line number references: \texttt{vplref.sty}} +\texttt{vplref.sty} is input through the \texttt{lineno} +package option \texttt{addpageno}. This adds page numbers +to line number references to distant sides---using the +\texttt{varioref} package from the \LaTeX\ distribution. +\verbatiminput{vplref.sty} + +\end{document} + +end of LNoSuppl.tex diff --git a/Master/texmf-dist/doc/latex/lineno/ulineno.pdf b/Master/texmf-dist/doc/latex/lineno/ulineno.pdf Binary files differnew file mode 100644 index 00000000000..2d2a407647d --- /dev/null +++ b/Master/texmf-dist/doc/latex/lineno/ulineno.pdf diff --git a/Master/texmf-dist/doc/latex/lineno/ulineno.tex b/Master/texmf-dist/doc/latex/lineno/ulineno.tex new file mode 100644 index 00000000000..458a3366f2c --- /dev/null +++ b/Master/texmf-dist/doc/latex/lineno/ulineno.tex @@ -0,0 +1,984 @@ +% Copyright 1995--1999 Stephan I. B"ottcher <stephan@nevis1.columbia.edu> +% +% This program can be redistributed and/or modified under the terms +% of the LaTeX Project Public License Distributed from CTAN +% archives in directory macros/latex/base/lppl.txt; either +% version 1 of the License, or any later version. +% +% $Id: ulineno.tex,v 3.1 2001/08/03 03:29:19 stephan Exp $ +% +% 1999-06-11 SiB: updated for lineno.sty v3.00 + +\documentclass[12pt,a4paper,titlepage]{article} + + \date{\def\$##1: ##2 ##3${##2}%$ + Version + \$Revision: 3.1 $, + \$Date: 2001/08/03 03:29:19 $ + } + \def\lineno.sty{\texttt{\itshape lineno.sty}} + + +\title{ \lineno.sty +\\ Users Manual +} +\author{ Stephan I. B\"ottcher +} + +\usepackage{lineno} +\usepackage{url} + +\def~{\verb~} +\catcode`\<\catcode`\~ +\def<#1>{$\langle${\itshape#1}\/$\rangle$} +\catcode`\|\catcode`\~ +\def|#1{{\ttfamily\string#1}} +\def\NL{<number>]} + +\begin{document} +\begin{runninglinenumbers} +\renewcommand\linenumberfont{\normalfont\small\bfseries} +\setlength\linenumbersep{1cm} +\maketitle +\thispagestyle{empty} +\resetlinenumber +\tableofcontents +\clearpage +\setcounter{page}{1} +\pagewiselinenumbers + +\section{When to use \lineno.sty} + +The primary use of \lineno.sty is to get line numbers in your LaTeX +document. \lineno.sty directly supports line numbers in various +modes, and if you have any wishes that are not directly supported, +chances are good that \lineno.sty can be adapted to do it. And if it +turns out to be difficult with \lineno.sty, then it will be even more +difficult without. + +There is one class of cases however, where \lineno.sty is not the most +appropriate tool. When your text already comes in lines, like source +listings, tables, poetry, then \lineno.sty will propably do the job, +but other tools could do it much more efficiently. + +\lineno.sty can only number lines in the main text. Lines in any kind +of boxes cannot be numbered. But see section \ref{sec:ilineno} below. + +\lineno.sty is especially useful when the text is broken into lines by +\TeX\ itself. In this case, the task to attach line numbers is not +easy, and a tool like \lineno.sty has good chances to break when used +together with other packages. + +On the other hand, \lineno.sty proved to be quite stable, and I did +not get any reports of complete failure yet. + +With \lineno.sty, you can refer to the line numbers via \LaTeX s +~\ref~ and ~\pageref~ macros. + +There are other applications, not directly related to line numbering. +Whenever you want to attach something to your text, after a paragraph +was broken into lines, across pagebreaks, lineno may do the job. + +\begin{bframe} + Say, you need a frame around some text, but the text should be able + to break across pages, \lineno.sty can be used to draw rules on both + margins, which can be completed at the top and bottom by some + special environment, see section\,\,\ref{sec:bframe}. +\end{bframe} + +There may be cases, where other packages do a better job, e.g., +\url{CTAN:macros/latex/contrib/supported/numline}. + + +\section{Where to get \lineno.sty} + +\lineno.sty is available on the \emph{Comprehensive TeX Archive + Network} (CTAN), e.g, \url{ftp:// ftp.tex.ac.uk/ tex-archive/ + macros/ latex/ contrib/ supported/ lineno/ lineno.sty}. + +The home of \lineno.sty is \url{http:// www.nevis.columbia.edu/ + ~stephan/ tex/ #lineno}. Here you can get the latest version. + +\end{runninglinenumbers} + +\section{How to use \lineno.sty} + +As any other \LaTeXe\ package, you need to load it with +\begin{quote} + ~\usepackage[~<options>~]{lineno}~ +\end{quote} + +\subsection{Package options} + +The available <options> are: +\begin{description} + +\item[\texttt{[left]}:] Put the line numbers into the left margin + (default). + +\item[\texttt{[right]}:] Put the line numbers into the right margin. + +\item[\texttt{[switch]}:] Put the line numbers into the outer margin + (left on even numbered pager, right on odd numbered pages). + +\item[\texttt{[switch*]}:] Put the line numbers into the inner + margin. + +\item[\texttt{[pagewise]}:] Number the lines from 1 on each page. + +\item[\texttt{[running]}:] Continuously number the lines (default). + +\item[\texttt{[modulo]}:] Print line numbers only if they are + multiples of five. + +\item[\texttt{[mathlines]}:] When using the ~{linenomath}~ + environment for display math, put line numbers also on the lines of + the display. + +\item[\texttt{[displaymath]}:] Automatically wrap the standard LaTeX + display math environments in ~{linenomath}~. + + \begin{itshape} + Change from v2 to v3: ~[mathlines]~ was called ~[displaymath]~ + before, and ~[displaymath]~ was ~\usepacke{mlineno}~. + \end{itshape} + +\end{description} +All effects of these option can also be obtained by calling certain +macros later in the document, except for ~[displaymath]~. + +\subsection{How to turn on line numbering} + +The line numbering is not activated by default. If you want line +numbers, you have to turn it on. The simplest way is to say +\begin{quote} + ~\linenumbers~ +\end{quote} +This will turn on line numbers within the current group, according to +the currently selected mode. If you do it right at the beginning, the +whole document will be numbered. + +~\linenumbers~ takes effect only when a paragraph is finished. This +is important if you use ~\linenumbers~ for a single paragraph only. +This will \emph{not} work: +\begin{quote}\obeylines + ~\begingroup~\\% + ~\linenumbers~ + Text of your paragraph. + ~\endgroup~ +\end{quote} +because the ~\endgroup~ terminates the effect of ~\linenumbers~ before +the paragraph is finished. The solution is to insert an empty line, +or an explicit ~\par~ before the ~\endgroup~. + +The prefered solution is to use an enviroment: +\begin{quote}\obeylines + ~\begin{linenumbers}~ + Text of your paragraph. + ~\end{linenumbers}~ +\end{quote} +~\end{linenumbers}~ terminates the paragraph for you. It will also +make sure that the next paragraph is not indented, if there is no +empty line in between. + +This form will not finish any preceeding paragraph. If you do not +leave an empty line before ~\begin{linenumbers}~, the previous + paragraph may also get line numbers (this is not true after a list + environment). + +A quite esoteric form to number a single paragraph is: +\begin{quote}\obeylines + Text of your paragraph. + ~{\linenumbers\par}~ +\end{quote} +Here, the ~\linenumbers~ is turned on in a group that just executes +the ~\par~ to terminate the previous paragraph. Only this paragraph +will have line numbers. (~\par~ is exactly equivalent to an empty +line). + + +\subsection{How to turn off line numbering} + +You do not usualy turn of line numbering explicitly, but rather +restrict line numbering to a group or an environment. However, you +can turn it off with the command +\begin{quote} + ~\nolinenumbers~ +\end{quote} +This macro can also be used as an environment. The same restrictions +apply as for ~\linenumbers~. + + +\section{Numbering modes} + +Attaching line numbers after \TeX\ has broken the paragraph into lines +is already quite a difficult job for \TeX. Why? Because \TeX\ does +not normally give you any control after line breaking. \lineno.sty +does it by pretending that the current page ends after each and every +line. This keeps \TeX\ quite busy, but works. + +Often, you want the line numbers to depend on the page they finally end +up. E.g., you want the numbers to start with~ ~1 one each new page, +or you want them to appear on the outer margins in twoside mode. This +is an almost impossible demand, but \lineno.sty can do it, at some +cost, in terms of computing time, memory, and disk space. \lineno.sty +needs to write a note into the auxiliary file for each line in the +numbered part of the text, and \TeX\ keeps some memory for each page, +and all that takes some computation time to figure out on which page +the line was in the last \LaTeX\ run. + +Thus, there are two basic numbering modes +\begin{enumerate} + +\item \emph{Running} line numbers. The numbers run continuously along + the document, without considering page breaks. + + The line numbers can be reset, or preset at any point in the + document (except within a paragraph). Margin switching (or any + other dependence on the page breaks) is not possible. + +\item \emph{Pagewise} line numbers. The lines on each page are + numbered from one. Automatic margin switching is possible. + + \emph{Running} mode can be simulated in pagewise mode, to get + automatic margin switching with continuous line numbers, but without + the ability to reset/preset the line numbers anywhere in the + document. + + Any feature that depends on the page breaks must use this mode. + +\end{enumerate} + +\begin{runninglinenumbers*} + +\subsection{\emph{Running} line numbers} + +This is the default mode of operation. The lines of your text are +numbered continuously across page breaks. + +You cannot get automatic margin switching in this mode, because at the +time when the line numbers are attached, it is not yet decided on +which page the line will end up. However, you can simulate continuous +line numbers in \emph{pagewise} mode (see below), where margin +switching becomes possible. + +You get this mode by +\begin{itemize}\raggedright +\item \emph{not} specifying any of the package options + ~[switch,pagewise]~, +\item specifying the package option ~[running]~, +\item give the command ~\setrunninglinenumbers~ in the document, or +\item turn on line numbering with ~\runninglinenumbers~ or + ~\begin{runninglinenumbers}~. +\end{itemize} + +\subsubsection{Reseting or setting the line number} + +You can reset the line number with +\begin{quote} + ~\resetlinenumber[~<number>~]~ +\end{quote} +where the default is to reset the line number to one. + +Alternatively, you can give the line number in an optional argument to +any command that turns on the line numbering in this mode: +\begin{quote}\obeylines + ~\linenumbers[~<number>~]~ + ~\runninglinenumbers[~<number>~]~ + ~\begin{linenumbers}[~<number>~]~ + ~\begin{runninglinenumbers}[~<number>~]~ +\end{quote} +or reset the line number to 1 with any of the following: +\begin{quote}\obeylines + ~\linenumbers*~ + ~\runninglinenumbers*~ + ~\begin{linenumbers*}~ + ~\begin{linenumbers}*~ + ~\begin{runninglinenumbers*}~ + ~\begin{runninglinenumbers}*~ +\end{quote} +This section of the manual is enclosed in +\begin{quote}\obeylines + ~\begin{runninglinenumbers*}~ + ~\end{runninglinenumbers*}~ +\end{quote} +\end{runninglinenumbers*} + + +\begin{pagewiselinenumbers} + +\subsection{\emph{Pagewise} line numbers} + +Basically, this mode prints line numbers starting with 1 on top of +each page, counting only lines where this mode is active. If you +turn on this mode in the middle of a page, the numbers start with 1 +at that point. + +The \emph{pagewise} mode of operation is quite a bit more work for +\TeX. When the line numbers are printed, \TeX\ does not know on which +page the current line will go. To get \emph{pagewise} mode working, +\LaTeX\ has to remember on which page the line went in a previous run. +This information is written into the ~.aux~ file, and like a table of +contents, you will not see the numbers until you run \LaTeX\ at least +twice on the document. Sometimes the information in the ~.aux~ file +becomes invalid in a way that causes \lineno.sty to hang. In such a +case you'll have to delete all ~.aux~ files of the document to get it +going again. + +You get this mode by +\begin{itemize}\raggedright +\item specifying the package option + ~[pagewise]~, but not ~[running]~, +\item give the command ~\setpagewiselinenumbers~ in the document, or +\item turn on line numbering with ~\pagewiselinenumbers~ or + ~\begin{pagewiselinenumbers}~. +\end{itemize} + +You cannot reset or preset the line numbers in \emph{pagewise} mode. +This mode uses a different counter than \emph{running} mode. You can +switch between the mode, and the \emph{running} numbers will continue +where they left of, unless you reset the counter. + +\subsubsection{Margin switching} + +As a side effect of all the business to find out on which page the lines +end up, margin switching becomes possible. It is now possible to +print the line number differently on odd and even pages. The command +\begin{quote} + ~\switchlinenumbers~ +\end{quote} +will cause the line numbers to be printed on the outer margins, on the +right side for odd pages, and on the left side for even numbered +pages. If you add a star, the numbers go on the inner margins +\begin{quote} + ~\switchlinenumbers*~ +\end{quote} +You can achieve the same effect by specifying the package +option ~[switch]~ or ~[switch*]~ together with ~[pagewise]~. + +Margin switching is independent of any ~[twoside]~ option of the +document class. + +\subsubsection{\emph{Running} mode with margin switching} + +Margin switching is not possible in \emph{running} mode, but you can +abuse the pagewise mode to produce continuous line numbers. This mode +is activated with the command +\begin{quote} + ~\runningpagewiselinenumbers~ +\end{quote} +It is not possible to reset the line number counter for this mode, the +lines will be numbered starting from one at the beginning of the +document, and continue. You can switch back to real pagewise mode with +\begin{quote} + ~\realpagewiselinenumbers~ +\end{quote} +but when you resume \emph{running-pagewise}, the numbers will not +continue where they left off, but jump by the number of lines that +were numbered \emph{real-pagewise}. + +The package options ~[switch]~ and ~[switch*]~ will turn on +\emph{running pagewise} mode with margin switching, unless you also +specify ~[pagewise]~. + +Finally, if you give these options together with ~[running]~, like +\begin{quote} + ~\usepackage[switch,pagewise,running]{lineno}~ +\end{quote} +the mode is set to plain \emph{running} line numbers, but later in +your document, if you say ~\pagewiselinenumbers~, the setings of the +~[switch]~ and ~[pagewise]~ options will take effect. + +\subsubsection{Page numbers} + +Any pages that contain \emph{pagewise} numbered lines must have a +different page number. This may cause trouble with titlepages or +simmilar fudging with the page number counter in the document. (I am +talking about ~\c@page~ or ~\count 0~ here, not ~\thepage~). + +If you get strange errors, like \emph{``the use of} ~\nextLN~ +\emph{does not match its definition''}, you should first delete all +~.aux~ files, and rerun \LaTeX\ several times. If the error does not +reappear, fine, else check your page numbers, including those that are +not printed. You may use \emph{running} line numbers on your +titlepages, since the page boundaries are predefined, usually. + +\end{pagewiselinenumbers} + +\begin{linenumbers*} + +\subsection{Margin selection} + +In any mode you can select a fixed margin on which the numbers shall +be printed. You can either give a package option ~[left]~ or +~[right]~, or change the margin within the document with +\begin{quote}\obeylines + ~\leftlinenumbers~ +\rightlinenumbers + ~\rightlinenumbers~ +\end{quote} +\rightlinenumbers +Neither of these commands actually turns on line numbering. The +margin setting is changed for the currently selected mode +\emph{running} or \emph{pagewise}. If you want to set the margin for +both modes, append a star +\begin{quote}\obeylines + ~\leftlinenumbers*~ + ~\rightlinenumbers*~ +\end{quote} +The default is ~\leftlinenumbers*~. + +\end{linenumbers*} + + +\subsection{Summary of mode selection commands} + +The following commands change the major line numbering mode. +\begin{description}\itemsep=0pt\parskip=0pt +\item [|\setrunninglinenumbers] +\item [|\setpagewiselinenumbers] \leavevmode\\ + set the current mode, without activating or deactivating line + numbering. +\item [|\runninglinenumbers\texttt{*[\NL}] +\item [|\pagewiselinenumbers] \leavevmode\\ + set the current mode and activate line numbering, optionally reset + (~*~), or set the line number for \emph{running} mode. +\end{description} +The following commands do not change the major mode, but modify the +the behaviour of \emph{pagewise} mode +\begin{description}\itemsep=0pt\parskip=0pt +\item [|\realpagewiselinenumbers] +\item [|\runningpagewiselinenumbers] \leavevmode\\ + select if \emph{pagewise} mode should number continuously, or really + pagewise. +\end{description} + + +\subsection{Summary of margin selection commands} + +The following command select into which margin the numbers should be +printed +\begin{description}\itemsep=0pt\parskip=0pt +\item [|\leftlinenumbers\texttt*] +\item [|\rightlinenumbers\texttt*] \leavevmode\\ + put the line numbers in the left/right margin in both modes. +\item [|\leftlinenumbers] +\item [|\rightlinenumbers] \leavevmode\\ + put the line number into the left/right margin in the currently + selected mode. +\item [|\switchlinenumbers] \leavevmode\\ + put the line numbers into the outer margin, when using + \emph{pagewise} mode. +\item [|\switchlinenumbers\texttt*] \leavevmode\\ + put the line numbers into the inner margin, when using + \emph{pagewise} mode. +\end{description} + +\begin{linenumbers*} +\modulolinenumbers[2] + +\subsection{Numbering only one in five lines} + +You can ask lineno to print the line numbers only if they devide by +<n>, by saying +\begin{quote} + ~\modulolinenumbers[~<n>~]~ +\end{quote} +If you omit the optional argument, it will be every fifth line, or +whatever you used last (the current value of the counter +~linenumbermodulo~). You get the same effect by giving the package +option ~[modulo]~. + +If you set <n> to 1, the modulo value is not changed, but modulo +numbering is turned off. + +Changing the counter ~linenumbermodulo~ does not turn on modulo +numbering, it just changes the modulo, if it is turned on without the +optional argument. + +This section of the manual is enclosed in +\begin{quote} + ~\begin{linenumbers*}~ \\ + ~\modulolinenumbers[2]~ + + ~\end{linenumbers*}~ +\end{quote} + +\end{linenumbers*} + +\begin{pagewiselinenumbers} +\switchlinenumbers + +\subsection{How the line numbers look like} + +This section of the manual is enclosed in +\begin{quote} + ~\begin{pagewiselinenumbers}~ \\ + ~\switchlinenumbers~ + + ~\end{pagewiselinenumbers}~ +\end{quote} +By default, the line numbers are set in +\begin{quote} + ~\normalfont\tiny\sffamily~ +\end{quote} +right justified to 10\,pt left of the nominal left edge of the text. +If the number is to appear on the right margin, it is right justified +to 20\,pt right of the nominal right edge of the text. + +You can easily change that, of course. The font is defined by the +macro +\begin{quote} + ~\linenumberfont~ +\end{quote} +You can redefine it to make the numbers appear in a differnt font +(with ~\renewcommand~). I'll say right here in this manual +\renewcommand\linenumberfont{\normalfont\bfseries\small} +\begin{quote} + ~\renewcommand\linenumberfont{\normalfont\bfseries\small}~ +\end{quote} +The distance on the left margin can be changed with +\begin{quote} + ~\setlength\linenumbersep{~<distance>~}~ +\end{quote} +The distance on the right margin is ~\linenumbersep~ plus +~\linenumberwidth~, both are set to 10\,pt by default. +Let's do right here +\setlength\linenumberwidth{1cm} +\begin{quote} + ~\setlength\linenumbersep{1cm}~ +\end{quote} +I put the command at the end of the paragraph, but it effects the +whole paragraph, because that is where everything happens: at the end +of the paragraphs. + +The line numbers are printed as arabic numerals, as defined in the +macro +\begin{quote} + ~\thelinenumber~ +\end{quote} +for the \LaTeX\ counter ~{linenumber}~. You can redefine that, as +for any other \LaTeX\ counter. E.g., +\renewcommand\thelinenumber{\roman{linenumber}} +\begin{quote} + ~\renewcommand\thelinenumber{\roman{linenumber}}~ +\end{quote} +(For heavy duty line numbering, you should use \LaTeX s internal +format, e.g., ~\@roman\c@linenumber~.) + +\subsubsection{Deeper customization} + +The line number is attached to the line by the macro +\begin{quote} + ~\makeLineNumber~ +\end{quote} +which is expanded inside a zero width ~\hbox~ alligned to the +origin of the current line (left edge, baselines alligned). You can +do anything in this macro. Let's assume you do not want line numbers +at all, but just attach something else to each line of text: this is +the macro to modify. You can refer to the line number by the macro +~\LineNumber~, which prints the current value of the counter +~{linenumber}~, or nothing if \emph{modulo} mode is active, and the +number does not divide by ~{linenumbermodulo}~. You should not modify +this macro when using any form of \emph{pagewise} mode. At the end of +this paragraph I put the following +\begin{runninglinenumbers} +\renewcommand\makeLineNumber + {\hss$\rightarrow$\ \rlap{\hskip\textwidth\ $\leftarrow$}} +\end{runninglinenumbers} +\begin{quote} + ~\begin{runninglinenumbers}~\\ + ~\renewcommand\makeLineNumber~\\ + ~ {\hss$\rightarrow$\ \rlap{\hskip\textwidth\ $\leftarrow$}}~\\ + ~\end{runninglinenumbers}~ +\end{quote} + +Redefining ~\makeLineNumber~ cuts deep into the linenumber mode +setting. If you still want to use the basic modes \emph{running} and +\emph{pagewise} you should go one level up and modify one of the +following macros, which are called by (or assigned to) +~\makeLineNumber~ depending on the current mode, and with the counter +~{linenumber}~ allready adjusted for the current page when using +\emph{pagewise} mode. +\begin{quote}\obeylines + ~\makeLineNumberRunning~ + ~\makeLineNumberOdd~ + ~\makeLineNumberEven~ +\end{quote} +The first is used in \emph{running} mode, the other two in +\emph{pagewise} mode. If you modify those, you cut into the +margin selection mechanism as advertised above. You will have to call +a mode selection command after changing these macros, to make them take +effect (at least for ~\makeLineNumberRunning~). + +You can go up one more step. The margin selection commands redefine +the above macros by making them equivalent (~\let~) to one of the +following macros +\begin{quote}\obeylines + ~\makeLineNumberLeft~ + ~\makeLineNumberRight~ +\end{quote} +You may redefine these, and afterwards issue a margin selection +command followed by a mode selection command. The default definitions +are +\begin{quote} + ~\def\makeLineNumberLeft~\\ + ~ {\hss\linenumberfont\LineNumber\hskip\linenumbersep}~ +\end{quote} +and +\begin{quote} + ~\def\makeLineNumberRight~\\ + ~ {\linenumberfont\hskip\linenumbersep\hskip\textwidth~\\ + ~ \hbox to\linenumberwidth{\hss\LineNumber}\hss}~ +\end{quote} +Whatever you do, use ~\LineNumber~ to print the digits. This ensures +that the modulo mode setting is acknowledged. If you want to +customize that as well, this is the macro to change. ~\LineNumber~ +eventually refers to ~\thelinenumber~, which is the place to customize +the numerals themselves. At the end of this paragraph I said +\renewcommand\LineNumber{\ifodd\value{linenumber} \thelinenumber)\fi} +\begin{quote} + ~\renewcommand\LineNumber~\\ + ~ {\ifodd\value{linenumber} \thelinenumber)\fi}~ +\end{quote} +Line number references are not affected by ~\LineNumber~, but you +should keep track of ~\thelinenumber~. Look at the following +reference +\begin{quote} + The setion title of the next section is on page \pageref{ll1}, line + \ref{ll1}. +\end{quote} +There is a mismatch in the definition of ~\thelinenumber~, from the +point of the refered line to the reference here. +\end{pagewiselinenumbers} + +\begin{pagewiselinenumbers} + +\section[Line number references] + {Line number references\linelabel{ll1}} + +\lineno.sty allows to refer to a line number with ~\ref{~<label>~}~. +The label is set by ~\linelabel{~<label>~}~, anywhere in a paragraph +that gets line numbers. If you put a ~\linelabel~ somewhere else, the +line number it refers to is pretty meaningless, but no error message +is issued. (This section begins on line \ref{ll1}, page +\pageref{ll1} and ends on line \ref{ll2}, page \pageref{ll2}.) + +References work both in \emph{running} and \emph{pagewise} modes. +However, you have to be very careful when using both \emph{real + pagewise} mode and \emph{running pagewise} mode: The mode setting +must be the same during reference as during labeling. + +The restrictions on placing a ~\linelabel~ are the same as for a +~\marginpar~. (In fact, they are implemented as fake ~\marginpar~s.) +E.g., the linelabel on the section header of this chapter could not be +placed in the straight forward way, because it would cause an error in +the table of contents. (It should be disabled during \emph{toc} +processing.) Instead, I typed +\begin{quote} + ~\section[Line number references]~\\ + ~ {Line number references\linelabel{ll1}}~ +\end{quote} +This works fine, with the standard \LaTeX\ ~{article}~ document +style. If more generic markup is required, you should avoid things +like this (you should avoid \lineno.sty altogether, in that case). + +~\linelabel~ does not work in display math. (Why, you do not use +equation numbers?) + +The ~\linelabel~ command starts a new paragraph if it is issued after +an empty line. It will properly ignore further whitespace before the +first word of text. Thus you can easily get a label to the first line +of a paragraph. + +Furthermore, ~\linelabel~ uses \LaTeX s standart tricks to avoid +unnecessary spaces if you place is between two words with spaces +around, but you should not do that anyway, if you want to make sure +that the label applies to a certain word in the text. You should +attach the line label to the word in question without intervening +spaces, either before of after the word. If you leave spaces both +before and after the ~\linelabel~ command, the current implemenation +attaches the line label to the following word (by ignoring the +trailing space). + +Special care should be taken at the end of a paragraph. You better +put the line label without intervening spaces behind the period, like +this +\begin{quote} + ~This is the end of this section.%~\\ + ~\linelabel{ll2}~ +\end{quote} +This is the end of this section.% +\linelabel{ll2} + +\end{pagewiselinenumbers} + +\begin{linenumbers*} + + +\section{Known incompatibilities} + +This section will expand whenever somebody discovers problems when +using \lineno.sty together with other \LaTeX\ packages. + +\subsection{\texttt{wrapfig.sty}} + +\lineno.sty used to have problems with \texttt{wrapfig.sty}, but this +is solved but \lineno.sty, version 2.05. + + +\section{Extension packages} + +The extension packages were abolished with version v3.00 of +\lineno.sty. One package, ~itemrule.sty~, was dropped, the others +were put directly into the the main \lineno.sty package file. + +\subsection{Display math, \texttt{\itshape mlineno}} + +\lineno.sty does not work well with display math. The parts of a +paragraph preceeding a display math will not get line numbers. The +reason is that the paragraph is not finished, but the part above the +display is broken into lines anyway. + +Let me demonstrate the effect. This paragraph contains a +~{displaymath}~ environment. The part before the Formula does not get +line numbers. Here comes the Formula +\begin{displaymath} + \mathrm{6\,H_2O + 6\,CO_2 \ \rightarrow\ C_6H_{12}O_6 + 6\,O_2} +\end{displaymath} +which makes the line numbers disappear. The trailing part of the +paragraph does get line numbers. + +There are several means to solve the problem, but none of them is +fully satisfactory. \lineno.sty defines a ~{linenomath}~ environment, +which can be wrapped around a display math to make the line numbering +work. This will work with any kind of display math, even if you use +explicit ~$$~ pairs. There is a ~*~-form ~{linenomath*}~ which also +numbers the lines of the display itself, as good as it can. Here +comes an example use of ~{linenomath*}~ +\begin{linenomath*} +\begin{eqnarray*} + b_1 &=& a_{11}x_1 + a_{12}x_2 \\ + b_2 &=& a_{21}x_1 + a_{22}x_2 +\end{eqnarray*} +\end{linenomath*} +wrapping an ~{egnarray*}~ like this +\begin{quote} + ~\begin{linenomath*}~\\ + ~ \begin{eqnarray*}~\\ + ~ b_1 &=& a_{11}x_1 + a_{12}x_2 \\~\\ + ~ b_2 &=& a_{21}x_1 + a_{22}x_2~\\ + ~ \end{eqnarray*}~\\ + ~\end{linenomath*}~ +\end{quote} +Specifying the package option ~[mathlines]~, causes the +~{linenomath}~ environment to switch its function with its *-form. +This allows you to later decide if you want the numbers on the formulas +or not, without putting in stars everywhere (as long as you have been +consistent). + +The ~{linenomath}~ wrapper does nothing if line numbering is not +activated. You do not need to remove them if you decide to omit the +line numbering later (although you still have to load \lineno.sty). + +The \texttt{\itshape mlineno} extension redefines the standard \LaTeX\ +display math environments to wrap themselves automatically into +~{linenomath}~: +\begin{quote}\obeylines + ~\[~ ~\]~ + ~{displaymath}~ + ~{equation}~ + ~{eqnarray}~ + ~{eqnarray*}~ +\end{quote} +As of version 3.00 you can activate this by the package option +~[displaymath]~. You can keep existing explicit ~{linenomath}~ +wrappers without harm. + +This will probably not work with AMSmath. + +Other solutions to make \lineno.sty work with display math are either +ugly or less stable. The ugly possibility is to precede every display +math with an empty line, or better with +\begin{quote} + ~{\par\nobreak\noindent}~ +\end{quote} +but this gains you nothing compared to using the ~{linenomath}~ +environment, since you still have to modify your document. + +\end{linenumbers*} + + +\subsection{\texttt{\itshape rlineno}} + +\begin{runninglinenumbers} +It is currently not possible to put a ~\linelabel~ into math mode. +This should not impose problems with inline math, since you can attach +the label just outside the math shift, like\linelabel{rll1} +\begin{quote} + ~... \linelabel{~<label>~}$x=f(y)$ ...~ +\end{quote} +but to refer to a line in display math, you cannot label it directly. +\end{runninglinenumbers} + +\begin{pagewiselinenumbers} +The extension \texttt{\itshape rlineno} offers a solution, +allowing to refer to a line number with an offset. + +This extension is now available with plain \lineno.sty v3.00. + +You put the ~\linelabel~ at the end of the preceeding line, and refer +to that number, plus 1 or, in case of multiline displays, by any other +offset.\linelabel{rll2} +\begin{quote} + ~...\linelabel{~<label>~}~ \\ + ~\begin{equation}~ \\ + ~ y=f'(x)~ \\ + ~\end{equation}~ \\ + ~... the formula in line \lineref[+1]{~<label>~}~ +\end{quote} +The offset calculation is different for pagewise or running line +numbers, and you will have to make sure the right method is used. +\end{pagewiselinenumbers} + +The macro ~\lineref[~<offset>~]{~<label>~}~ uses the method of the +currently selected mode (line numbering need not be activated). To +specify the mode explicitly, use ~\linerefr~ or ~\linerefp~ for +running or pagewise mode respectively. + +For example, the manual sets a ~\linelabel{rll1}~ at the end of the +line preceeding the single line quote environment at +line\,\linerefr[+1]{rll1} in the first paragraph of this chapter, and +refered to it via +\begin{quote} + ~\linerefr[+1]{rll1}~ +\end{quote} +and another one preceeding the quote environment in the second +paragraph of this chapter, with the central line +numbered\,\linerefp[+3]{rll2}, which I just refered to via +\begin{quote} + ~\linerefp[+3]{rll2}~ +\end{quote} +\begin{runninglinenumbers} +If the correct mode is selected (e.g., ~\setrunninglinenumbers~), +you can use ~\lineref[+1]{rll1}~ to refer to +line\,\lineref[+1]{rll1}. +\end{runninglinenumbers} + + +\subsection{\texttt{\itshape numquote}} + +This extension defines two environments, each of them with a *-form or +alternatively an optional argument. +\begin{quote}\obeylines + ~\begin{numquote}~ + ~\end{numquote}~ +\end{quote} +is like ~{quote}~, +\begin{quote}\obeylines + ~\begin{numquotation}~ + ~\end{numquotation}~ +\end{quote} +is like ~{quotation}~, but with the lines numbered. Numbering +restarts with 1 each time it is used, except you use the *-form, or +specify the line number to start with in an optional argument. +\begin{numquote} +The line numbers set to the left of the text, indented by the same +amount as the quote or quotation. This works as expected even if the +quote appears in a nested list. +\end{numquote} +To customize the distance from the text or the shape of the +numbers, you can modify the macros ~\quotelinenumbersep~ and +~\quotelinenumberfont~ respectively. + +As of version 3.00, this is available directly with \lineno.sty. + +\clearpage + +\subsection{\texttt{\itshape ilineno}} +\label{sec:ilineno} + +\begin{center} +\noindent\fbox{\parbox{0.8\textwidth}{ + \internallinenumbers \resetlinenumber[13] + Sometimes you need line numbers within a |\parbox\ or figure. This + extension can do that, if the text is simple enough. It works by + drawing a ladder of numbers next to the paragraph, each number + vertically separated by |\baselineskip\ from the other. This + obviously dose not work nicely with anything but straight text. + Extra high lines (like this: $\displaystyle x=\frac AB$) will + disturb the alignment. The power of \lineno.sty is not necessary to + achieve this, but you may need both in one document with a somewhat + coherent interface, and some of the necessary infrastructure from + \lineno.sty is actually useful. +}}\end{center} +% Why is the v-spacing wrong here? + +The preceding paragraph was set like this: +\begin{quote} + ~\begin{center}\fbox{\parbox{0.8\textwidth}{~ \\ + ~\internallinenumbers~ \\ + ~\resetlinenumber[13]~ \\ + ~ ~ Sometimes you need \dots \\ + ~}}\end{center}~ +\end{quote} + +\subsection{\texttt{\itshape itemrule.sty}} + +Somebody asked me if he can get a rule next to an itemized item, from +the bullet downwards. This style did that. It was unstable and of +little interest, so it is gone from the \lineno.sty distribution. + +\subsection{\texttt{\itshape bframe}} +\label{sec:bframe} + +\setlength\bframesep{10pt} +\begin{bframe} +\lineno.sty can be used for unexpected purposes. The environment +\begin{quote}\obeylines + ~\begin{bframe}~ + ~\end{bframe}~ +\end{quote} +draws boxes around some text, even across page breaks. At a page +break, the box is open (it is difficult to fix that). There are two +parameters: +\begin{description}\itemsep=0pt\parskip=0pt +\item [|\bframesep] \leavevmode\\ + defines the separation of the box from the text. +\item [|\bframerule] \leavevmode\\ + defines the thickness of the lines around the text. +\end{description} + +It works by asking \lineno.sty to draw small rules left and right to +the lines. The total height of the rules is ~\baselineskip~ plus +~\bframesep~. This leaves some extra space for extra high lines. + +The current version is very preliminary. In a future version there +may be a possibility to move the vertical lines inwards for indented +text. The box may optionally be closed at page breaks. It will not +likely be possible to have a colored background in the box, at least +not with a graphics driver that cannot put a background behind +existing foreground (Postscript cannot, I've been told). Tell me how +to make a gray background, like block dots on transparent, and I can +do shaded boxes. + +\end{bframe} + +\section{How to print the documented source} + +\begin{bframe} +\lineno.sty is written in three programming languages: \TeX, sh, +and awk. + +The file can be loaded as a \LaTeXe\ package as it is. However, if +you feed it into a Unix shell, like +\begin{quote} + ~csh> source ./lineno.sty~ +\end{quote} +it will produce the files ~lineno.tex~ and ~lineno.dvi~, which is the +documented source of \lineno.sty. If you want to learn how it works, +or you need to adapt \lineno.sty for some special requirements, you +should read that document. +\end{bframe} + +\end{document} |