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