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