51
|
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 |
|