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