3485 lines
148 KiB
TeX
3485 lines
148 KiB
TeX
\iffalse; awk '/S[H]ELL1/' lineno.sty|sh;exit;
|
||
... see bottom for .tex documentation ...
|
||
|
||
Macro file lineno.sty for LaTeX: attach line numbers, refer to them.
|
||
\fi
|
||
\def\fileversion{v4.41} \def\filedate{2005/11/02} %VERSION
|
||
|
||
%%% Copyright 1995--2003 Stephan I. B"ottcher <boettcher@physik.uni-kiel.de>;
|
||
%%% Copyright 2002--2005 Uwe L"uck, http://www.contact-ednotes.sty.de.vu
|
||
%%% for version 4 and code from former Ednotes bundle
|
||
%%% --author-maintained.
|
||
%%%
|
||
%%% This file can be redistributed and/or modified under
|
||
%%% the terms of the LaTeX Project Public License; either
|
||
%%% version 1.3a of the License, or any later version.
|
||
%%% The latest version of this license is in
|
||
%%% http://www.latex-project.org/lppl.txt
|
||
%%% We did our best to help you, but there is NO WARRANTY.
|
||
%
|
||
%%% $Id: lineno.sty,v 3.14.2.2 2004/09/13 19:30:39 stephan Exp $ %% was v4.00.
|
||
% \title{\texttt{\itshape
|
||
%% %% (UL 2004/10/09:) Italic TT is evil
|
||
%% %% ... or nice front page layout!?
|
||
%%
|
||
% lineno.sty \ \fileversion\ \filedate
|
||
% \unskip}\\\ \\
|
||
% A \LaTeX\ package to attach
|
||
% \\ line numbers to paragraphs
|
||
% \unskip}\author{%
|
||
% Stephan I. B\"ottcher
|
||
% \\ Uwe L\"uck
|
||
% \unskip}\date{%
|
||
% boettcher@physik.uni-kiel.de
|
||
% \\ http://contact-ednotes.sty.de.vu
|
||
%% \\ stephan@nevis.columbia.edu
|
||
%% \\ Stephan.Boettcher@cern.ch
|
||
% \\}
|
||
%
|
||
% \documentclass[a4paper,12pt]{article}%D
|
||
% \usepackage{lineno}%D
|
||
%% %% (New v4.00)
|
||
% \catcode`\_\active\let_~
|
||
%% %% Beware math!? (/New v4.00)
|
||
% \def~{\verb~}
|
||
% \let\lessthan<
|
||
% \catcode`\<\active
|
||
% \def<#1>{$\langle${\itshape#1}\/$\rangle$}
|
||
% \catcode`\|\active
|
||
%% (New v4.1: \tt star; in box anyway.)
|
||
% \def|#1{\ttfamily\string#1}
|
||
%% \def|#1{{\ttfamily\string#1}}
|
||
%% (/New v4.1)
|
||
% \newenvironment{code}
|
||
% {\par\runninglinenumbers
|
||
% \modulolinenumbers[1]%
|
||
% \linenumbersep.3em
|
||
% \footnotesize
|
||
% \def\linenumberfont
|
||
% {\normalfont\tiny\itshape}}
|
||
% {}
|
||
%% %% (New v4.00)
|
||
% {\makeatletter \gdef\scs#1{\texttt
|
||
% {\protect\@backslashchar#1}}}
|
||
% \def\old{\par\footnotesize}
|
||
%% %% (/New v4.00)
|
||
%% %% (New v4.1)
|
||
% {\catcode`\/\active
|
||
% \gdef\path{\begingroup\catcode`\/\active
|
||
% \let/\slash\dopath}
|
||
% \gdef\dopath#1{\slash\unpenalty#1\endgroup}}
|
||
%% %% (/New v4.1)
|
||
%
|
||
% \begin{document}%D
|
||
%% \DocInput{lineno}%D
|
||
% \pagewiselinenumbers
|
||
% \maketitle
|
||
% \pagestyle{headings}
|
||
% \tableofcontents
|
||
% \sloppy
|
||
%
|
||
%% %% New v4.00: `...section{%' + \unskip
|
||
% \section{%
|
||
% Introductions
|
||
%% %% New v4.00: `s'
|
||
% \unskip}
|
||
%
|
||
% (New v4.00) Parts of former first section
|
||
% have been rendered separate subsections for package
|
||
% version_v4.00. (/New v4.00)
|
||
%
|
||
% \subsection{%
|
||
% Introduction to versions $\textrm{v}\lessthan4$
|
||
% \unskip}
|
||
%
|
||
% This package provides line numbers on paragraphs.
|
||
% After \TeX\ has broken a paragraph into lines there will
|
||
% be line numbers attached to them, with the possibility to
|
||
% make references through the \LaTeX\ ~\ref~, ~\pageref~
|
||
% cross reference mechanism. This includes four issues:
|
||
% \begin{itemize}
|
||
% \item attach a line number on each line,
|
||
% \item create references to a line number,
|
||
% \item control line numbering mode,
|
||
% \item count the lines and print the numbers.
|
||
% \end{itemize}
|
||
% The first two points are implemented through patches to
|
||
% the output routine. The third by redefining ~\par~, ~\@par~
|
||
% and ~\@@par~. The counting is easy, as long as you want
|
||
% the line numbers run through the text. If they shall
|
||
% start over at the top of each page, the aux-file as well
|
||
% as \TeX s memory have to carry a load for each counted line.
|
||
%
|
||
% I wrote this package for my wife Petra, who needs it for
|
||
% transcriptions of interviews. This allows her to
|
||
% precisely refer to passages in the text. It works well
|
||
% together with ~\marginpar~s, but not too well with displaymath.
|
||
% ~\footnote~s are a problem, especially when they
|
||
% are split, but we may get there.
|
||
% (New v4.00 UL) Version v4.00 overcomes the problem, I believe.
|
||
% (/UL /New v4.00)
|
||
%
|
||
% lineno.sty works
|
||
% surprisingly well with other packages, for
|
||
% example, ~wrapfig.sty~. So please try if it
|
||
% works with whatever you need, and if it does,
|
||
% please tell me, and if it does not, tell me as
|
||
% well, so I can try to fix it.
|
||
%
|
||
% \subsection{%
|
||
% Introduction to versions v4.00ff. (UL)
|
||
% \unskip}
|
||
%
|
||
% ~lineno.sty~ has been maintained by Stephan until version_v3.14.
|
||
% From version_v4.00 onwards, maintenance is shifting towards
|
||
% Uwe L\"uck (UL), who is the author of v4\dots code and of v4\dots
|
||
% changes in documentation. This came about as follows.
|
||
%
|
||
% Since late 2002, Christian Tapp and Uwe L\"uck have employed
|
||
% ~lineno.sty~ for their ~ednotes.sty~, a package supporting
|
||
% critical editions---cf.
|
||
% \[\mbox{\tt
|
||
% http://ednotes.sty.de.vu
|
||
% \unskip}\]
|
||
% ---while you find ~ednotes.sty~ and surrounding files in
|
||
% CTAN folder \path{macros/latex/contrib/ednotes}.
|
||
%
|
||
% Soon, some weaknesses of ~lineno.sty~ showed up, mainly since
|
||
% Christian's critical editions (using ~ednotes.sty~) needed lots
|
||
% of ~\linelabel~s and footnotes. (These weaknesses are due to
|
||
% weaknesses of \LaTeX's ~\marginpar~ mechanism that Stephan
|
||
% used for ~\linelabel~.) So we changed some ~lineno.sty~
|
||
% definitions in some extra files, which moreover offered new
|
||
% features. We sent these files to Stephan, hoping he would take
|
||
% the changes into ~lineno.sty~. However, he was too short of time.
|
||
%
|
||
% Writing a TUGboat article on Ednotes in 2004, we hoped to
|
||
% reduce the number of files in the Ednotes bundle and so asked
|
||
% Stephan again. Now he generously offered maintenance to me, so
|
||
% I could execute the changes on my own.
|
||
%
|
||
% The improvements are as follows:
|
||
% \begin{itemize}\item
|
||
% [(i)] Footnotes placement approaches intentions better
|
||
% (footnotes formerly liked to pile up at late pages).
|
||
% \item
|
||
% [(ii)] The number of ~\linelabel~s in one paragraph is no longer
|
||
% limited to 18.
|
||
% \item
|
||
% [(iii)] ~\pagebreak~, ~\nopagebreak~, ~\vspace~, and the star
|
||
% and optional versions of ~\\~ work as one would expect
|
||
% (section_\ref{s:MVadj}). %% Added for v4.1
|
||
% \item
|
||
% [(iv)] A command is offered which chooses the first line number
|
||
% to be printed in the margin
|
||
% (subsection_\ref{ss:Mod}). %% Added for v4.1
|
||
% \item
|
||
% [(v)] (New v4.1) \LaTeX\ tabular environments (optionally)
|
||
% get line numbers as well, and you can refer to them in the
|
||
% usual automatic way. (It may be considered a shortcoming that,
|
||
% precisely, \emph{rows} are numbered, not lines.---See
|
||
% subsection_\ref{ss:Tab}.)
|
||
% \item
|
||
% [(vi)] We are moving towards referring to math items
|
||
% (subsection_\ref{ss:MathRef} and the hooks in
|
||
% subsection_\ref{ss:LL}).
|
||
% (/New v4.1)
|
||
% \end{itemize}
|
||
% (Thanks to Stephan for making this possible!)
|
||
%
|
||
%% Unpublish:
|
||
%% You may trace the earlier developments of these changes by
|
||
%% requesting our files ~linenox0.sty~, ~linenox1.sty~, and
|
||
%% ~lnopatch.sty~. Most of our changes have been in ~linenox0.sty~.
|
||
%% Our ~linenox1.sty~ has extended ~linenox0.sty~ for one single
|
||
%% purpose in a not very stable way.
|
||
%%% (See ~\linenumberpar~ below).
|
||
%% ~lnopatch.sty~ has done the first line number thing referred
|
||
%% to in case_(iv) up to now.
|
||
%% (New v4.1)
|
||
%% Case_(v) earlier was provided by our ~edtab02.sty~---now
|
||
%% called ~edtable.sty~.
|
||
%% (/New v4.1)
|
||
%
|
||
% Ednotes moreover profits from Stephan's offer with regard
|
||
% to the documentation of our code which yielded these
|
||
% improvements formerly. This documentation now becomes
|
||
% printable, being part of the ~lineno.sty~ documentation.
|
||
%
|
||
% Of course, Stephan's previous ~lineno.sty~ versions were a great
|
||
% and ingenious work and exhibit greatest \TeX pertise. I never
|
||
% could have done this. I learnt a lot in studying the code when
|
||
% Christian pointed out strange output results and error
|
||
% messages, and there are still large portions of ~lineno.sty~
|
||
% which I don't understand (consider only pagewise numbering of
|
||
% lines). Fortunately, Stephan has offered future help if
|
||
% needed.---My code for attaching line numbers to \emph{tabular
|
||
% environments} (as mentioned above, now still in
|
||
% ~edtable.sty~) %% %% TODO
|
||
% developed from macros which Stephan and Christian experimented
|
||
% with in December 2002. Stephan built the basics.
|
||
% (However, I then became too proud to follow his advice only to
|
||
% use and modify ~longtable.sty~.)
|
||
%
|
||
% There are some issues concerning use of counters on which I
|
||
% don't agree with Stephan and where I would like to change the
|
||
% code if ~lineno.sty~ is ``mine'' as Stephan offered. However,
|
||
% Stephan is afraid of compatibility problems from which, in
|
||
% particular, his wife could suffer in the near future. So he
|
||
% demanded that I change as little as possible for my first
|
||
% version. Instead of executing changes that I plan I just offer
|
||
% my opinions at the single occasions. I hope to get in touch
|
||
% this way with users who consider subtle features vital which I
|
||
% consider strange.
|
||
%
|
||
% On the other hand, the sections on improvements of the
|
||
% implementation have been blown up very much and may be tiring
|
||
% and litte understandable for mere \emph{users}. These users
|
||
% may profit from the present presentation just by jumping to
|
||
% sections_\ref{s:Opts} and_\ref{s:UserCmds}. There is a user's
|
||
% guide ulineno.tex which may be even more helpful, but it has
|
||
% not been updated for a while. %% TODO
|
||
%
|
||
% \subsection{%
|
||
% Availability
|
||
% \unskip}
|
||
%
|
||
% In case you have found the present file otherwise than from
|
||
% CTAN: A recent version and documentation of this package
|
||
% should be available from CTAN folder
|
||
% \path{macros/latex/contrib/lineno}.
|
||
% Or mail to one of the addresses at top of file.
|
||
%
|
||
% \subsection{%
|
||
% Introductory code
|
||
% \unskip}
|
||
%
|
||
% This style option is written for \LaTeXe, November 1994 or later,
|
||
% since we need the ~\protected@write~ macro.
|
||
%
|
||
% (New v4.00) And we use ~\newcommand*~ for
|
||
% controlling length of user macro arguments, which has been
|
||
% available since December 1994.
|
||
%%
|
||
|
||
\NeedsTeXFormat{LaTeX2e}[1994/12/01]
|
||
%% [1994/11/04]
|
||
\ProvidesPackage{lineno}
|
||
[\filedate\space line numbers on paragraphs \fileversion]
|
||
% (/New v4.00)
|
||
%%
|
||
%% History of versions:
|
||
%% v1.00 1995/03/31 SIB: first release for Petra's interview transcriptions
|
||
%% v1.01 1995/10/28 SIB: added ~pagewise~ mode
|
||
%% v1.02 1995/11/15 SIB: added ~modulo~ option
|
||
%% v1.03 1995/12/05 SIB: pagewise: try to reduce the hash-size requirements
|
||
%% v2.00 1995/12/06 SIB: .. it works, new user interface
|
||
%% v2.01 1996/09/17 SIB: put into CVS
|
||
%% v2.02 1997/03/17 SIB: add: \@reinserts, for footnotes
|
||
%% v2.04 1998/03/09 SIB: add: linenomath environment
|
||
%% v2.05 1998/04/26 SIB: add: prevgraf test
|
||
%% v2.06 1999/03/02 SIB: LPPL added
|
||
%% v3.00 1999/06/11 SiB: include the extension in the main file
|
||
%% v3.01 1999/08/28 SiB: \@reinserts -> \holdinginserts
|
||
%% v3.02 2000/03/10 SiB: \@LN@output
|
||
%% v3.03 2000/07/01 SiB: \@LN@ExtraLabelItems, hyperref
|
||
%% v3.04 2000/12/17 SiB: longtable compatibility.
|
||
%% v3.05 2001/01/02 SiB: [fleqn] detection.
|
||
%% v3.05a 2001/01/04 SiB: [fleqn] detection reverted for eqnarray.
|
||
%% v3.06 2001/01/17 SiB: [twocolumn] mode support.
|
||
%% v3.07 2001/07/30 SiB: [hyperref] option obsoleted.
|
||
%% v3.08 2001/08/02 SiB: linenomath wrapping for \[ \]
|
||
%% v3.08a 2001/08/04 SiB: linenomath wrapping for \[ \] fixed
|
||
%% v3.08b 2002/01/27 SiB: enquotation typo fix
|
||
%% v3.09 2003/01/14 SIB: hyperref detection fix
|
||
%% v3.10 2003/04/15 FMi: \MakeLineNo fix for deep boxes
|
||
%% v3.10a 2003/11/12 Uwe L<>ck: \lineref typo fix
|
||
%% v4.00 2004/09/02 UL: included linenox0, linenox1, lnopatch code with
|
||
%% documentation, usually indicated by `New v4.00';
|
||
%% discussions of old code, indicated by `UL';
|
||
%% LPPL v.1 -> LPPL v1.3, `program' -> `file';
|
||
%% first lines with \filedate and \fileversion,
|
||
%% according nawk lines; `November 1994 or later',
|
||
%% some earlier documentation typos (including a few
|
||
%% bad minus signs), { -> {% and } -> \unskip} at
|
||
%% line ends (so, e.g., alignment in TOC works); \scs.
|
||
%% 2004/09/03 UL: removed everything which indicated that the
|
||
%% present file were named `lineno4.sty'.
|
||
%% v4.1 2004/09/19 UL: Inserted Stephan's identification line, removed
|
||
%% some TODOs and remarks from v4.00.
|
||
%% 2004/10/04 UL: Added acknowledgement for Daniel Doherty;
|
||
%% `(New v4.00)' with [|\firstlinenumber]; changed
|
||
%% TODOs; Refining -> Redefining (\vadjust).
|
||
%% 2004/10/05 UL: ednmath0 -> mathrefs; \catcode`\~ -> \active;
|
||
%% \path; refined section on options `mathrefs';
|
||
%% changes in introduction.
|
||
%% 2004/10/06 UL: Changed/removed TODOs, e.g., for edtable.sty.
|
||
%% 2004/10/11 UL: Reminders: linenox0/1/lnopatch.sty obsolete;
|
||
%% \tt star in list of commands.
|
||
%% 2004/10/12 UL: Corrected blank lines in lineno.tex.
|
||
%% 2004/10/19 UL: Fixed minor typos; remark on \if@LN@edtable.
|
||
%% v4.1a 2004/11/07 UL: LPPL v1.3a.
|
||
%% v4.1b 2004/11/13 UL: Comment on \outputpenalty values.
|
||
%% v4.1c 2005/01/10 UL: Contact via http.
|
||
%% v4.11 2005/02/20 UL: Error message with \linelabel when not numbering.
|
||
%% 2005/03/07 UL: Removed \linelabel from ss:Tab heading, consider
|
||
%% marginal line numbers as well, revised ss:Tab.
|
||
%% Added a few lines on missing explanations to
|
||
%% s:UserCmds. Corrected some code alignments.
|
||
%% 2005/03/08 UL: Require recent edtable.sty.
|
||
%%
|
||
|
||
%% v4.2 2005/03/21 UL: "Physical page" counter works with \include.
|
||
%% 2005/04/17 UL: Raised options section above extensions section
|
||
%% (v4.00 disabled `displaymath' option);
|
||
%% third arg for \@ifundefined{mathindent};
|
||
%% "bunch of options";
|
||
%% 2005/04/24 UL: compatibility with tamefloats; vplref.sty.
|
||
%% 2005/04/25 UL: \number -> \the; wondered -> $$; subsec. appbas;
|
||
%% CrtlLN sec -> subsec.; \newcommand* wherever ...;
|
||
%% doc. on `other output routines' and `addpageno'
|
||
%% (this changed from `varioref').
|
||
%% 2005/04/27 UL: =1\relax -> =\@ne, 0\relax ..., \hb@xt@,
|
||
%% \ifx\@@par\@@@par -> \ifLineNumbers, typos,
|
||
%% \pagestyle{headings}, LaTeX -> \LaTeX.
|
||
%% v4.21 2005/04/28 UL: linenomath section: removed wrong \else's,
|
||
%% \holding...: \thr@@, \@LN@outer@holdins, \global.
|
||
%% v4.22 2005/05/01 UL: \unvbox\@outputbox; \@LN@col without #1,
|
||
%% 2005/05/08 UL: global/local \internall..., \resetl... global,
|
||
%% shortened discussions of this and of \newcounter.
|
||
%% 2005/05/09 UL: corr.: doc. typo, version history, bad lines;
|
||
%% percent; \chardef for modulo,
|
||
%% \value{firstlinenumber}.
|
||
%% v4.3 2005/05/10 UL: \@backslashchar -> \char`\\ in \scs.
|
||
%% 2005/05/11 UL: \linenumbers sets ...outer@holdins; tidied up
|
||
%% documentation regarding earlier versions.
|
||
%% 2005/05/12 UL: `linenomath' without spurious number above;
|
||
%% `displaymath' default; edmac homepage ->
|
||
%% ednotes.sty.de.vu, \endlinenomath without
|
||
%% numbers: no change of \holdinginserts;
|
||
%% \linelabel doesn't go to .aux or mark,
|
||
%% hyperref detected; undone 2005/05/10 (bad mark).
|
||
%% 2005/05/13 UL: Reworked hyperref detection (new subsec.).
|
||
%% 2005/05/15 UL: More typo fixes, corrected terrible confusions in
|
||
%% the discussion (v4.22/v4.3) of \new/\stepcounter;
|
||
%% new subsec. in `Line number ...'; another
|
||
%% implementation of `hyperref' detection.
|
||
%% 2005/05/16 UL: Final minor changes.
|
||
%% v4.31b /06/14 UL: Extended explanation of \firstlinenumbers
|
||
%% and package options; \@LN@ifgreat@critical;
|
||
%% \modulolinenumbers*. Sent to Ednotes.news only.
|
||
%% v4.31 2005/06/15 UL: \modulolinenumbers* with \firstlinenumber{1};
|
||
%% " -> ``/''; more doc. on \firstlinenumber .
|
||
%% 2005/06/20 UL: Typo fix.
|
||
%% 2005/10/01 UL: Warning about \mod...* with pagewise mode.
|
||
%% v4.31a /10/02 UL: Minor changes of appearance of doc., e.g.,
|
||
%% \[ for $$.
|
||
%% v4.32b /10/15 UL: Support for \addvspace; removed comments that
|
||
%% had been invisible already for some time;
|
||
%% made clear with which environments the
|
||
%% linenomath environment is not needed.
|
||
%% v4.32ab /10/15 UL: Observe \if@nobreak with support for \addvspace.
|
||
%% v4.32 2005/10/17 UL: Just made it official and sent it to CTAN.
|
||
%% v4.33b /10/23 UL: \if@nobreak\nobreak\fi -> \nobreak .
|
||
%% v4.33ab /10/24 UL: \LineNoLaTeXOutput without \@tempswafalse;
|
||
%% undid v4.22: \[unv]box\@outputbox (space is OK,
|
||
%% \unvbox pushes short columns down); \@LN@kern@z@ .
|
||
%% v4.4b 2005/10/24 UL: Another tidying-up of the discussion of
|
||
%% \stepcounter{linenumber}; \@LN@screenoff@pen
|
||
%% replaces \@LN@kern@z@, \@LN@depthbox .
|
||
%% v4.4 2005/10/27 UL: Just made official for CTAN.
|
||
%% v4.4a 2005/10/29 UL: Undid change of discussion of
|
||
%% \stepcounter{linenumber} (confusion again).
|
||
%% v4.41 2005/11/02 UL: Raised \CheckCommand*.
|
||
%%
|
||
%% Acknowledgements:
|
||
%% v3.06: Donald Arseneau, pointed to mparhack.sty.
|
||
%% v3.07+: Frank Mittelbach, points out inconsistencies in the
|
||
%% user interface.
|
||
%% v3.10: Frank Mittelbach \MakeLineNo fix for deep boxes
|
||
%% v4.00: Daniel Doherty points out clash of \pagewise... with resetting
|
||
%% page number.
|
||
%% v4.21: Much testing work by Erik Luijten.
|
||
%% v4.3: `displaymath' default by Erik Luijten's suggestion.
|
||
%% v4.31: \modulolinenumbers* is an idea of Hillel Chayim Yisraeli's.
|
||
%% v4.32: Support for \addvspace due to Saravanan M.'s observation.
|
||
%% v4.33: Different support for \addvspace due to bug reports by
|
||
%% Saravanan M.'s and David Josef Dev.
|
||
%% v4.4: David Josef Dev points out that \kern\z@ after a paragraph
|
||
%% tends to place its final baseline wrongly.
|
||
%
|
||
%
|
||
% \section{%
|
||
% Put the line numbers to the lines
|
||
% \unskip}
|
||
%
|
||
% (New v4.00) This section contained the most
|
||
% basic package code previously. For various purposes of
|
||
% version_4\dots, much of these basics have been to be modified.
|
||
% Much of my (UL's) reasoning on these modifications has been to
|
||
% be reported. Sorry, the present section has been blown up
|
||
% awfully thus and contains ramifications that may be difficult
|
||
% to trace. We add some ~\subsection~ commands in order to cope
|
||
% with the new situation. (/New v4.00)
|
||
%
|
||
% \subsection{%
|
||
% Basic code of \texttt{lineno.sty} \scs{output}
|
||
% \unskip}\label{ss:output}
|
||
%
|
||
% The line numbers have to be attached by the output
|
||
% routine. We simply set the ~\interlinepenalty~ to $-100000$.
|
||
% The output routine will be called after each line in the
|
||
% paragraph, except the last, where we trigger by ~\par~.
|
||
% The ~\linenopenalty~ is small enough to compensate a bunch of
|
||
% penalties (e.g., with ~\samepage~).
|
||
%
|
||
% (New v3.04) Longtable uses
|
||
% ~\penalty~$-30000$. The lineno penalty range was
|
||
% shrunk to $-188000 \dots -32000$. (/New v3.04)
|
||
% (New v4.00) New values are listed below (11111f.). (/New v4.00)
|
||
|
||
\newcount\linenopenalty\linenopenalty=-100000
|
||
|
||
%% TODO v4.4+:
|
||
% (UL) Hm. It is never needed below
|
||
% that this is a counter. ~\def\linenopenalty{-100000\relax}~
|
||
% would do. (I guess this consumes more memory, but it
|
||
% is more important to save counters than to save memory.)
|
||
% I was frightened by ~-\linenopenalty~ below, but indeed
|
||
% \TeX\ interprets the string ~--100000~ as 100000.
|
||
% Has any user or extension package writer ever called
|
||
% ~\linenopenalty=xxx~, or could I really change this?---The
|
||
% counter is somewhat faster than the macro. Together with the
|
||
% compatibility question this seems to support keeping the
|
||
% counter. (???)
|
||
%% Note that Stephan chose ~\mathchardef~ below,
|
||
%% so his choice above seems to have been deliberate.
|
||
%% <- no point, \mathchardef token is fast.
|
||
% (/UL)
|
||
|
||
\mathchardef\linenopenaltypar=32000
|
||
|
||
% So let's make a hook to ~\output~, the direct way. The \LaTeX\
|
||
% macro ~\@reinserts~ puts the footnotes back on the page.
|
||
%
|
||
% (New v3.01) ~\@reinserts~ badly
|
||
% screws up split footnotes. The bottom part is
|
||
% still on the recent contributions list, and the
|
||
% top part will be put back there after the bottom
|
||
% part. Thus, since lineno.sty does not play well
|
||
% with ~\inserts~ anyway, we can safely experiment
|
||
% with ~\holdinginserts~, without making things
|
||
% much worse.
|
||
%
|
||
% Or that's what I thought, but: Just activating
|
||
% ~\holdinginserts~ while doing the ~\par~ will
|
||
% not do the trick: The ~\output~ routine may be
|
||
% called for a real page break before all line
|
||
% numbers are done, and how can we get control
|
||
% over ~\holdinginserts~ at that point?
|
||
%
|
||
% Let's try this: When the ~\output~ routine is
|
||
% run with ~\holdinginserts=3~ for a real page
|
||
% break, then we reset ~\holdinginserts~ and
|
||
% restart ~\output~.
|
||
%
|
||
% Then, again, how do we keep the remaining
|
||
% ~\inserts~ while doing further line numbers?
|
||
%
|
||
% If we find ~\holdinginserts~=$-3$ we activate it again
|
||
% after doing ~\output~. (/New v3.01)
|
||
%
|
||
% (New v3.02) To work with
|
||
% multicol.sty, the original output routine is now
|
||
% called indirectly, instead of being replaced.
|
||
% When multicol.sty changes ~\output~, it is a
|
||
% toks register, not the real thing. (/New v3.02)
|
||
%
|
||
% (New v4.00) Two further complications are added.
|
||
%%
|
||
%% TODO v4.3+: Or three, ~\@nobreakfalse~ after ~\MakeLineNo~
|
||
%% for getting rid of ~\@LN@nopagebreak~.
|
||
% \begin{itemize}\item
|
||
% [(i)] Problems with footnotes formerly resulted from
|
||
% \LaTeX's ~\@reinserts~ in ~\@specialoutput~ which Stephan's
|
||
% ~\linelabel~ called via the ~\marginpar~ mechanism.
|
||
% \item
|
||
% [(ii)] \LaTeX\ commands using ~\vadjust~ formerly didn't work
|
||
% as one would have hoped. The problem is as follows:
|
||
% Printing the line number results from
|
||
% a box that the output routine inserts at the place of the
|
||
% ~\interlinepenalty~. ~\vadjust~ items appear \emph{above} the
|
||
% ~\interlinepenalty~ (\TeX book p._105). So ~\pagebreak~, e.g.,
|
||
% formerly sent the line number to the next page, while the
|
||
% penalty from ~\nopagebreak~ could not tie the following line,
|
||
% since it was screened off by the line number box.---Our trick
|
||
% is putting the ~\vadjust~ items into a list macro from which
|
||
% the output routine transfers them into the vertical list,
|
||
% below the line number box.
|
||
% \end{itemize}
|
||
% In this case_(ii), like in case_(i), footnotes would suffer
|
||
% if ~\holdinginserts~ were non-positive. Indeed, in both
|
||
% cases_(i) and_(ii) we tackle the footnote problem by extending
|
||
% that part of Stephan's output routine that is active when
|
||
% ~\holdinginserts~ is positive. This extension writes the line
|
||
% number ~\newlabel~ to the .aux file (which was formerly done
|
||
% under $~\holdinginserts~=-3$) and handles the ~\vadjust~
|
||
% items.---To trigger ~\output~ and its ~\linelabel~ or, resp.,
|
||
% ~\vadjust~ part, the list of signal penalties started
|
||
% immediately before is increased here (first for ~\linelabel~,
|
||
% second for postponed ~\vadjust~ items):
|
||
|
||
\mathchardef\@Mllbcodepen=11111
|
||
\mathchardef\@Mppvacodepen=11112
|
||
|
||
% (/New v4.00) (New v4.2) David Kastrup urges to use a private
|
||
% name instead of ~\the\output~ (LaTeX-L-list). Otherwise an
|
||
% ~\output~ routine loaded later and using ~\newtoks\output~
|
||
% again may get lost entirely. So we change use of ~\@LN@output~,
|
||
% using it for the former purpose. Reference to what appeared
|
||
% with the name of ~\output~ here lasts for a few lines and then
|
||
% is given away.
|
||
|
||
\let\@tempa\output
|
||
\newtoks\output
|
||
\let\@LN@output\output
|
||
\output=\expandafter{\the\@tempa}
|
||
|
||
% Now we add two cases to Stephan's output routine. (New v4.00)
|
||
|
||
\@tempa={%
|
||
% (/New 4.2)
|
||
\LineNoTest
|
||
\if@tempswa
|
||
%%
|
||
%% (UL) Learnt that even in def.s blank line means ~\par~.
|
||
%% to leave visual space in present file with having a
|
||
%% blank line neither in present nor in .tex file,
|
||
%% use double comment mark (`%%'). (/UL)
|
||
%%
|
||
% (New v4.00)
|
||
% We insert recognition of waiting ~\linelabel~ items---
|
||
%%
|
||
\ifnum\outputpenalty=-\@Mllbcodepen
|
||
\WriteLineNo
|
||
%%
|
||
% ---and of waiting ~\vadjust~ items:
|
||
%%
|
||
\else
|
||
\ifnum\outputpenalty=-\@Mppvacodepen
|
||
\PassVadjustList
|
||
\else
|
||
%%
|
||
%% Now we give control back to Stephan.
|
||
% (/New v4.00) (New v4.2) Outsource ``Standard'' output
|
||
% ---which occurs so rarely---to subsection_\ref{ss:LLO}:
|
||
%%
|
||
\LineNoLaTeXOutput
|
||
% (/New v4.2) (New v4.00)
|
||
% Two new ~\fi~s for the ~\linelabel~ and ~\vadjust~ tests---
|
||
%%
|
||
\fi
|
||
\fi
|
||
%%
|
||
% ---and the remaining is
|
||
%%%next three lines are
|
||
% Stephan's code again:
|
||
% (/New v4.00)
|
||
%%
|
||
\else
|
||
\MakeLineNo
|
||
\fi
|
||
}
|
||
|
||
% (New v4.00) Our new macros
|
||
% ~\WriteLineNo~ and ~\PassVadjustList~ will be dealt with in
|
||
% sections_\ref{s:LNref} and_\ref{ss:PVadj}. (/New v4.00)
|
||
%
|
||
% \subsection{%
|
||
% \scs{LineNoTest}
|
||
% \unskip}
|
||
%
|
||
% The float mechanism inserts ~\interlinepenalty~s during
|
||
% ~\output~. So carefully reset it before going on. Else
|
||
% we get doubled line numbers on every float placed in
|
||
% horizontal mode, e.g, from ~\linelabel~.
|
||
%
|
||
% Sorry, neither a ~\linelabel~ nor a ~\marginpar~ should
|
||
% insert a penalty, else the following linenumber
|
||
% could go to the next page. Nor should any other
|
||
% float. So let us suppress the ~\interlinepenalty~
|
||
% altogether with the ~\@nobreak~ switch.
|
||
%
|
||
% Since (ltspace.dtx, v1.2p)[1996/07/26], the ~\@nobreaktrue~ does
|
||
% it's job globally. We need to do it locally here.
|
||
|
||
\def\LineNoTest{%
|
||
\let\@@par\@@@par
|
||
\ifnum\interlinepenalty<-\linenopenaltypar
|
||
\advance\interlinepenalty-\linenopenalty
|
||
\@LN@nobreaktrue
|
||
\fi
|
||
\@tempswatrue
|
||
\ifnum\outputpenalty>-\linenopenaltypar\else
|
||
\ifnum\outputpenalty>-188000\relax
|
||
\@tempswafalse
|
||
\fi
|
||
\fi
|
||
}
|
||
|
||
\def\@LN@nobreaktrue{\let\if@nobreak\iftrue} % renamed v4.33
|
||
|
||
% (UL) I thought here were
|
||
% another case of the save stack problem explained in \TeX book,
|
||
% p._301, namely through both local and global changing
|
||
% ~\if@nobreak~. However, ~\@LN@nobreak~ is called during
|
||
% ~\@LN@output~ only, while ~\@nobreaktrue~ is called by \LaTeX's
|
||
% ~\@startsection~ only. The latter never happens during
|
||
% ~\@LN@output~. So there is no local value of ~\if@nobreak~ on
|
||
% save stack when ~\@nobreaktrue~ acts, since ~\the\@LN@output~
|
||
% (where ~\@LN@output~ is a new name for the original ~\output~)
|
||
% is executed within a group (\TeX book p._21).
|
||
%%
|
||
%% 2004/09/19 Removed nonsense here according to Stephan 2004/09/04.
|
||
%%
|
||
% (/UL)
|
||
%
|
||
% \subsection{%
|
||
% Other output routines (v4.2)
|
||
% \unskip}\label{ss:LLO}
|
||
%
|
||
% I had thought of dealing with bad interference of footnotes
|
||
% (and ~\enlargethispage~) with (real) ~\marginpar~s and floats
|
||
% \emph{here}. Yet this is done in
|
||
% \[
|
||
% ~http://~\mbox{[CTAN]}
|
||
% ~/macros/latex/contrib/tamefloats/tameflts.sty~
|
||
% \]
|
||
% now, and I prefer striving for compatibility with the latter.
|
||
% (See there for expanding on the problem.)
|
||
% This requires returning the special absolute value of
|
||
% ~\holdinginserts~ that ~lineno.sty~ finds at the end of a newly
|
||
% typeset paragraph---now done in subsection_\ref{ss:calls}
|
||
% (~\linenumberpar~).
|
||
% The former ~\LineNoHoldInsertsTest~ has been filled into here.
|
||
%% ---`3' is replaced by ~\thr@@~ for a while. ~\thr@@~ is
|
||
%% useful practice since plain \TeX, but Stephan may have been
|
||
%% wise in suspecting that \LaTeX\ once could forsake ~\thr@@~.
|
||
%% The same holds for ~\@M=10000~.
|
||
% Note: when the following code is invoked, we have
|
||
% ~\if@tempswa~_ =_~\iftrue~.
|
||
% WARNING: I am still not sure whether the present code is good
|
||
% for cooperating with other packages that use ~\holdinginserts~.
|
||
|
||
\def\LineNoLaTeXOutput{%
|
||
\ifnum \holdinginserts=\thr@@ % v4.33 without \@tempswafalse
|
||
\global\holdinginserts-\thr@@
|
||
\unvbox\@cclv
|
||
\ifnum \outputpenalty=\@M \else \penalty\outputpenalty \fi
|
||
\else
|
||
\if@twocolumn \let\@makecol\@LN@makecol \fi
|
||
\the\@LN@output % finally following David Kastrup's advice.
|
||
\ifnum \holdinginserts=-\thr@@
|
||
\global\holdinginserts\thr@@ \fi
|
||
\fi
|
||
}
|
||
|
||
% \textit{More on dealing with output routines from other
|
||
% packages:}
|
||
% Since ~lineno.sty~'s output routine is called at least once
|
||
% for each output line, I think it should be in \TeX's
|
||
% original ~\output~, while output routines dealing with
|
||
% building pages and with floats etc.\ should be filled into
|
||
% registers addressed by ~\output~ after ~\newtoks\output~.
|
||
% Therefore \begin{enumerate}
|
||
% \item
|
||
% ~tameflts.sty~ should be loaded \emph{after} ~lineno.sty~;
|
||
% \item
|
||
% if a class changes ~\output~ (APS journal class revtex4,
|
||
% e.g.), ~lineno.sty~ should be loaded by ~\RequirePackage~
|
||
% [here presumably following some options in
|
||
% brackets]~{lineno}~ \emph{preceding} ~\documentclass~.
|
||
% \item
|
||
% If you actually maintain such a class, please consider
|
||
% loading ~lineno.sty~ on some draft option. The bunch of
|
||
% lineno's package options may be a problem, but perhaps the
|
||
% purpose of your class is offering only very few of lineno's
|
||
% options anyway, maybe just one.
|
||
% \end{enumerate}
|
||
% The latter may also be needed with classes that don't follow
|
||
% David Kastrup's rule on changing ~\output~.
|
||
%
|
||
% \subsection{%
|
||
% \scs{MakeLineNo}: Actually attach line number
|
||
% \unskip}\label{ss:MLN}
|
||
%
|
||
% We have to return all the page to the current page, and
|
||
% add a box with the line number, without adding
|
||
% breakpoints, glue or space. The depth of our line number
|
||
% should be equal to the previous depth of the page, in
|
||
% case the page breaks here, and the box has to be moved up
|
||
% by that depth.
|
||
%
|
||
% The ~\interlinepenalty~ comes after the ~\vadjust~ from a
|
||
% ~\linelabel~, so we increment the line number \emph{after}
|
||
% printing it. The macro ~\makeLineNumber~ produces the
|
||
% text of the line number, see section \ref{appearance}.
|
||
%
|
||
% (UL) I needed a while to understand
|
||
% the sentence on incrementing. Correctly: writing the
|
||
% ~\newlabel~ to the .aux file is triggered by the signal
|
||
% penalty that ~\end@float~ inserts via ~\vadjust~.
|
||
% However, this could be changed by our new ~\PostponeVadjust~.
|
||
% After ~\c@linenumber~ has been introduced as a \LaTeX\
|
||
% counter, it might be preferable that it behaved like standard
|
||
% \LaTeX\ counters which are incremented shortly before printing.
|
||
% But this may be of little practical relevance in this case,
|
||
% as ~\c@linenumber~ is driven in a very non-standard
|
||
% way.---However still, this behaviour of ~\c@linenumber~
|
||
% generates a problem with our ~edtable.sty~.
|
||
%% \unskip---Before,
|
||
%% I thought that Stephan had reported his reasoning incorrectly
|
||
%% and rather did this because of his ~\resetlinenumber~ which
|
||
%% initializes ~\c@linenumber~ to 1 instead of 0---the latter is
|
||
%% usual with \LaTeX\ counters. Cf._additional comment at
|
||
%% ~\resetlinenumber~.
|
||
% (/UL).
|
||
%
|
||
% Finally we put in the natural ~\interlinepenalty~, except
|
||
% after the last line.
|
||
%
|
||
% (New v3.10) Frank Mittelbach points out that box255 may be
|
||
% less deep than the last box inside, so he proposes to
|
||
% measure the page depth with ~\boxmaxdepth=\maxdimen~.
|
||
% (/New v3.10)
|
||
%
|
||
% (UL, New v4.00) We also resume the matter of
|
||
% ~\vadjust~ items that was started in section_\ref{ss:output}.
|
||
%
|
||
% \TeX\ puts only nonzero interline
|
||
% penalties into the vertical list (\TeX book p._105), while
|
||
% ~lineno.sty~ formerly replaced the signal interline penalty by
|
||
% something closing with an explicit penalty of the value that
|
||
% the interline penalty would have without ~lineno.sty~.
|
||
% This is usually 0. Now, explicit vertical penalties can be
|
||
% very nasty with respect to ~\nopagebreak~, e.g., a low (even
|
||
% positive) ~\widowpenalty~ may force a widow where you
|
||
% explicitly tried to forbid it by ~\nopagebreak~
|
||
% (see explanation soon below).
|
||
% The ~\nopagebreak~ we create here would never work if all
|
||
% those zero penalties were present.---On
|
||
% the other hand, we cannot just omit Stephan's zero penalties,
|
||
% because \TeX\ puts a penalty of 10000 after what ~lineno.sty~
|
||
% inserts (\TeX book p._125). This penalty must be overridden
|
||
% to allow page breaks between ordinary lines. To revive
|
||
% ~\nopagebreak~, we therefore replace those zero (or low)
|
||
% penalties by penalties that the user demanded by
|
||
% ~\nopagebreak~.---This mechanism is not perfect and does not
|
||
% exactly restore the original \LaTeX\ working of ~\pagebreak~
|
||
% and ~\nopagebreak~. Viz., if there are several vertical
|
||
% penalties after a line which were produced by closely sitting
|
||
% ~\[no]pagebreak~s, without ~lineno.sty~ the lowest penalty would
|
||
% be effective (cf._\TeX book exercise_14.10). Our mechanism, by
|
||
% contrast, chooses the \emph{last} user-set penalty of the line
|
||
% as the effective one. It would not be very difficult to come
|
||
% more close to the original mechanism, but until someone urges
|
||
% us we will cling to the present simple way. You may consider an
|
||
% advantage of the difference between our mechanism and the
|
||
% original one that the user here can actually override low
|
||
% penalties by ~\nopagebreak~, which may be what a lay \LaTeX\
|
||
% user would expect.
|
||
%% ---Zero glue would do instead of zero
|
||
%% penalty! This could make things easier. Maybe next time.
|
||
%% <- v4.4: No, problem with column depth.
|
||
% (/UL, /New v4.00)
|
||
|
||
\def\MakeLineNo{%
|
||
\@LN@maybe@normalLineNumber % v4.31
|
||
\boxmaxdepth\maxdimen\setbox\z@\vbox{\unvbox\@cclv}%
|
||
\@tempdima\dp\z@ \unvbox\z@
|
||
\sbox\@tempboxa{\hb@xt@\z@{\makeLineNumber}}%
|
||
%%
|
||
% (New v4.00) Previously,
|
||
% \begin{old}\begin{verbatim}
|
||
% % \stepcounter{linenumber}%
|
||
% \end{verbatim}
|
||
% \end{old}
|
||
%% %% TODO: Still first `\begin{old}'?
|
||
% followed. (Of course, there was no
|
||
% comment mark; I put it there to make
|
||
% reading the actual code easy.)
|
||
%
|
||
% (New v4.22: improved) Why not just
|
||
% \[~\global\advance\c@linenumber\@ne~?\]
|
||
% ~\stepcounter~ additionally resets ``subordinate''
|
||
% counters, but which could these (usefully) be?
|
||
% Again, may be column counters with ~edtable.sty~!?
|
||
%
|
||
% But then, our ~edtable.sty~ and its ~longtable~ option
|
||
% should use it as well. So use a shorthand supporting
|
||
% uniformity. You can even use it as a hook for choosing
|
||
% ~\global\advance\c@linenumber\@ne~ instead of our choice.
|
||
% (/New v4.22)
|
||
%%
|
||
\stepLineNumber
|
||
%%
|
||
% (New v4.4) Now
|
||
%%
|
||
\ht\@tempboxa\z@ \@LN@depthbox
|
||
%%
|
||
% appends the box containing the line number without changing
|
||
% ~\prevdepth~---see end of section.
|
||
% Now is the time for inserting the $\dots$ (/New v4.4)
|
||
%% The line number has now been placed (it may be invisible
|
||
%% depending on the modulo feature), so
|
||
%% we can insert the
|
||
% ~\vadjust~ items. We cannot do this much later, because
|
||
% their right place is above the artificial interline
|
||
% penalty which Stephan's code will soon insert
|
||
% (cf._\TeX book p._105). The next command is just ~\relax~
|
||
% if no ~\vadjust~ items have been accumulated for the
|
||
% current line. Otherwise it is a list macro inserting
|
||
% the ~\vadjust~ items and finally resetting itself.
|
||
% (This is made in section_\ref{ss:PVadj} below.)
|
||
% If the final item is a penalty, it is stored so it can
|
||
% compete with other things about page breaking.
|
||
%%
|
||
\@LN@do@vadjusts
|
||
\count@\lastpenalty
|
||
%%
|
||
% At this place,
|
||
% \begin{old}\begin{verbatim}
|
||
% % \ifnum\outputpenalty=-\linenopenaltypar\else
|
||
% \end{verbatim}
|
||
% \end{old}
|
||
% originally followed. We need something \emph{before} the
|
||
% ~\else~:
|
||
%%
|
||
\ifnum\outputpenalty=-\linenopenaltypar
|
||
\ifnum\count@=\z@ \else
|
||
%%
|
||
% So final ~\pagebreak[0]~ or ~\nopagebreak[0]~ has no
|
||
% effect---but this will make a difference after headings only,
|
||
% where nobody should place such a thing anyway.
|
||
%%
|
||
\xdef\@LN@parpgbrk{%
|
||
\penalty\the\count@
|
||
\global\let\noexpand\@LN@parpgbrk
|
||
\noexpand\@LN@screenoff@pen}% v4.4
|
||
%%
|
||
% That penalty will replace former ~\kern\z@~ in
|
||
% ~\linenumberpar~, see subsection_\ref{ss:calls}.---A
|
||
% few days earlier, I tried to send just a penalty value.
|
||
% However, the ~\kern\z@~ in ~\linenumberpar~ is crucial,
|
||
% as I then found out. See below.---The final penalty is
|
||
% repeated, but this does no harm. (It would not be very
|
||
% difficult to avoid the repeating, but it may even be
|
||
% less efficient.) It may be repeated due to the previous
|
||
% ~\xdef~, but it may be repeated as well below in the
|
||
% present macro where artificial interline penalty is to
|
||
% be overridden.
|
||
%%
|
||
\fi
|
||
\else
|
||
%%
|
||
% (/New v4.00)
|
||
%% Corrected code alignment with v4.11.
|
||
\@tempcnta\outputpenalty
|
||
\advance\@tempcnta -\linenopenalty
|
||
%%
|
||
% (New v4.00)
|
||
% \begin{old}\begin{verbatim}
|
||
% % \penalty\@tempcnta
|
||
% \end{verbatim}
|
||
% \end{old}
|
||
% followed previously. To give ~\nopagebreak~ a chance,
|
||
% we do
|
||
%% Corrected code alignment with v4.11.
|
||
\penalty \ifnum\count@<\@tempcnta \@tempcnta \else \count@ \fi
|
||
%%
|
||
% instead.---In ~linenox0.sty~, the ~\else~ thing once was omitted.
|
||
% Sergei Mariev's complaint (thanks!) showed that it is vital
|
||
% (see comment before ~\MakeLineNo~).
|
||
% The remaining ~\fi~ from previous package version closes the
|
||
% ~\ifnum\outputpenalty~\dots
|
||
% (/New v4.00)
|
||
%%
|
||
\fi
|
||
}
|
||
|
||
% (New v4.00)
|
||
|
||
\newcommand\stepLineNumber{\stepcounter{linenumber}}
|
||
|
||
% For reason, see use above. (/New v4.00)
|
||
%% %% TODO v4.4+: ~\newcommand~ more often!?
|
||
%
|
||
% (New v4.4) The depth preserving trick is drawn here from
|
||
% ~\MakeLineNo~ because it will be used again in
|
||
% section_\ref{ss:calls}.
|
||
|
||
\def\@LN@depthbox{%
|
||
\dp\@tempboxa=\@tempdima
|
||
\nointerlineskip \kern-\@tempdima \box\@tempboxa}
|
||
|
||
% (/New v4.4)
|
||
%
|
||
% \section{%
|
||
% Control line numbering
|
||
% \unskip}
|
||
% \subsection{%
|
||
% Inserting \scs{output} calls %% own subsec. v4.4.
|
||
% \unskip}\label{ss:calls}
|
||
% The line numbering is controlled via ~\par~. \LaTeX\
|
||
% saved the \TeX-primitive ~\par~ in ~\@@par~. We push it
|
||
% one level further out, and redefine ~\@@par~ to insert
|
||
% the ~\interlinepenalty~ needed to trigger the
|
||
% line numbering. And we need to allow pagebreaks after a
|
||
% paragraph.
|
||
%
|
||
% New (2.05beta): the prevgraf test. A paragraph that ends with a
|
||
% displayed equation, a ~\noindent\par~ or ~wrapfig.sty~ produce empty
|
||
% paragraphs. These should not get a spurious line number via
|
||
% ~\linenopenaltypar~.
|
||
|
||
\let\@@@par\@@par
|
||
\newcount\linenoprevgraf
|
||
|
||
% (UL) And needs ~\linenoprevgraf~
|
||
% to be a counter? Perhaps there may be a paragraph having
|
||
% thousands of lines, so ~\mathchardef~ doesn't suffice (really??).
|
||
%%
|
||
%% %% TODO: limitations of lines per paragraph elsewhere?
|
||
%% %% Signal penalties, e.g.!? ~\deadcycles~!?
|
||
%%
|
||
% A macro ending on ~\relax~ might suffice, but would be
|
||
% somewhat slow. I think I will use ~\mathchardef~ next time.
|
||
% Or has any user used ~\linenoprevgraf~? (/UL)
|
||
|
||
%% v4.33: changed code alignment for better understanding.
|
||
\def\linenumberpar{%
|
||
\ifvmode \@@@par \else
|
||
\ifinner \@@@par \else
|
||
\xdef\@LN@outer@holdins{\the\holdinginserts}% v4.2
|
||
\advance \interlinepenalty \linenopenalty
|
||
\linenoprevgraf \prevgraf
|
||
\global \holdinginserts \thr@@
|
||
\@@@par
|
||
\ifnum\prevgraf>\linenoprevgraf
|
||
\penalty-\linenopenaltypar
|
||
\fi
|
||
%%
|
||
% (New v4.00)
|
||
% \begin{old}\begin{verbatim}
|
||
% % \kern\z@
|
||
% \end{verbatim}
|
||
% \end{old}
|
||
% was here previously. What for?
|
||
% According to \TeX book p._125, Stephan's
|
||
% interline penalty is changed into 10000. At the end of a
|
||
% paragraph, the ~\parskip~ would follow that penalty of 10000,
|
||
% so there could be a page break neither at the
|
||
% ~\parskip~ nor at the ~\baselineskip~ (\TeX book p._110)---so
|
||
% there could never be a page break between two paragraphs.
|
||
% So something must screen off the 10000 penalty.
|
||
% Indeed, the ~\kern~ is a place to break.
|
||
% (Stephan once knew this: see `allow pagebreaks' above.)
|
||
%
|
||
% Formerly, I tried to replace ~\kern\z@~ by
|
||
% \begin{old}\begin{verbatim}
|
||
% % \penalty\@LN@parpgpen\relax
|
||
% \end{verbatim}
|
||
% \end{old}
|
||
% ---but this allows a page break after heading. So:
|
||
%%
|
||
\@LN@parpgbrk
|
||
%%
|
||
%% After heading, ~\kern\z@~ resulting from previous line
|
||
%% (see below) is followed by ~\write~ or ~\penalty10000~,
|
||
%% so causes no page break.
|
||
%
|
||
% These and similar changes were formerly done by ~linenox1.sty~.
|
||
% (/New v4.00)
|
||
%
|
||
% (New v4.4)
|
||
% A ~\belowdisplayskip~ may precede the previous when the paragraph
|
||
% ends on a display-math; or there may be a ~\topsep~ from a list, etc.
|
||
% ~\addvspace~ couldn't take account for it with ~\kern\z@~
|
||
% here. v4.32 therefore moved the space down -- with at least two
|
||
% bad consequences.
|
||
% Moreover, David Josef Dev observes that ~\kern\z@~ may
|
||
% inappropriately yield column depth 0pt.
|
||
% For these reasons, we introduce ~\@LN@screenoff@pen~ below.
|
||
% (/New v4.4)
|
||
%%
|
||
\global\holdinginserts\@LN@outer@holdins % v4.2
|
||
\advance\interlinepenalty -\linenopenalty
|
||
\fi % from \ifinner ... \else
|
||
\fi} % from \ifvmode ... \else
|
||
|
||
% (New v4.00, v4.4) Initialize ~\@LN@parpgbrk~, accounting
|
||
% for earlier space and for appropriate columndepth.
|
||
% We use former ~\MakeLineNo~'s depth-preverving trick
|
||
% ~\@LN@depthbox~ again:
|
||
|
||
\def\@LN@screenoff@pen{%
|
||
\ifdim\lastskip=\z@
|
||
\@tempdima\prevdepth \setbox\@tempboxa\null
|
||
\@LN@depthbox \fi}
|
||
|
||
\global\let\@LN@parpgbrk\@LN@screenoff@pen
|
||
|
||
% (/New v4.4, v4.00)
|
||
% \subsection{%
|
||
% Turning on/off %% own subsec. v4.4.
|
||
% \unskip}\label{ss:OnOff}
|
||
% The basic commands to enable and disable line numbers.
|
||
% ~\@par~ and ~\par~ are only touched, when they are ~\let~
|
||
% to ~\@@@par~/~\linenumberpar~. The line number may be
|
||
% reset to 1 with the star-form, or set by an optional
|
||
% argument ~[~<number>~]~.
|
||
%
|
||
% (New v4.00) We add ~\ifLineNumbers~ etc.\ since
|
||
% a number of our new adjustments need to know whether
|
||
% linenumbering is active. This just provides a kind of
|
||
% shorthand for ~\ifx\@@par\linenumberpar~; moreover it is
|
||
% more stable: who knows what may happen to ~\@@par~?---A
|
||
% caveat: ~\ifLineNumbers~ may be wrong. E.g., it may be
|
||
% ~\iffalse~ where it acts, while a ~\linenumbers~ a few
|
||
% lines below---in the same paragraph---brings about that
|
||
% the line where the ~\ifLineNumbers~ appears gets a
|
||
% marginal number.
|
||
%% Better implementation suggested below.
|
||
%%
|
||
% (New v4.3) Just noticed: Such tricks have been
|
||
% disallowed with v4.11, see subsections_\ref{ss:LL}
|
||
% and_\ref{ss:OnOff}.---Moreover, the switching between
|
||
% meanings of ~\linelabel~ for a possible error message
|
||
% as of v4.11 is removed. Speed is difficult to esteem
|
||
% and also depends on applications. Just use the most
|
||
% simple code you find. (/New v4.3)
|
||
|
||
\newif\ifLineNumbers \LineNumbersfalse
|
||
|
||
% (/New v4.00)
|
||
|
||
\def\linenumbers{%
|
||
\LineNumberstrue % v4.00
|
||
\xdef\@LN@outer@holdins{\the\holdinginserts}% v4.3
|
||
%%
|
||
% (New v4.3) The previous line is for ~{linenomath}~
|
||
% in a first numbered paragraph. (/New v4.3)
|
||
%%
|
||
\let\@@par\linenumberpar
|
||
% \let\linelabel\@LN@linelabel % v4.11, removed v4.3
|
||
\ifx\@par\@@@par\let\@par\linenumberpar\fi
|
||
\ifx\par\@@@par\let\par\linenumberpar\fi
|
||
\@LN@maybe@moduloresume % v4.31
|
||
\@ifnextchar[{\resetlinenumber}%]
|
||
{\@ifstar{\resetlinenumber}{}}%
|
||
}
|
||
|
||
\def\nolinenumbers{%
|
||
\LineNumbersfalse % v4.00
|
||
\let\@@par\@@@par
|
||
% \let\linelabel\@LN@LLerror % v4.11, removed v4.3
|
||
\ifx\@par\linenumberpar\let\@par\@@@par\fi
|
||
\ifx\par\linenumberpar\let\par\@@@par\fi
|
||
}
|
||
|
||
% (New v4.00) Moreover, it is useful to switch to
|
||
% ~\nolinenumbers~ in ~\@arrayparboxrestore~. We postpone this
|
||
% to section_\ref{ss:ReDef} where we'll have an appending macro
|
||
% for doing this. (/New v4.00)
|
||
%
|
||
% What happens with a display math? Since ~\par~ is not executed,
|
||
% when breaking the lines before a display, they will not get
|
||
% line numbers. Sorry, but I do not dare to change
|
||
% ~\interlinepenalty~ globally, nor do I want to redefine
|
||
% the display math environments here.
|
||
% \begin{displaymath}
|
||
% display \ math
|
||
% \end{displaymath}
|
||
% See the subsection below, for a wrapper environment to make
|
||
% it work. But that requires to wrap each and every display
|
||
% in your \LaTeX\ source %%.
|
||
%% v4.3:
|
||
% (see option ~displaymath~ in subsections_\ref{ss:v3opts}
|
||
% and_\ref{ss:display} for some relief [UL]).
|
||
%
|
||
% The next two commands are provided to turn on line
|
||
% numbering in a specific mode. Please note the difference:
|
||
% for pagewise numbering, ~\linenumbers~ comes first to
|
||
% inhibit it from seeing optional arguments, since
|
||
% re-/presetting the counter is useless.
|
||
|
||
\def\pagewiselinenumbers{\linenumbers\setpagewiselinenumbers}
|
||
\def\runninglinenumbers{\setrunninglinenumbers\linenumbers}
|
||
|
||
% Finally, it is a \LaTeX\ style, so we provide for the use
|
||
% of environments, including the suppression of the
|
||
% following paragraph's indentation.
|
||
%
|
||
%% TODO: v4.4+:
|
||
% (UL) I am drawing the following
|
||
% private thoughts of Stephan's to publicity so that others may
|
||
% think about them---or to remind myself of them in an efficient
|
||
% way. (/UL)
|
||
%% UL changed `%%%' to `% %' below.
|
||
%% TODO: add \par to \linenumbers, if called from an environment. %% v4.3
|
||
%% ToDO: add an \@endpe hack if \linenumbers are turned on
|
||
% \begin{old}\begin{verbatim}
|
||
% % TO DO: add \par to \linenumbers, if called from an environment.
|
||
% % To DO: add an \@endpe hack if \linenumbers are turned on
|
||
% % in horizontal mode. {\par\parskip\z@\noindent} or
|
||
% % something.
|
||
% \end{verbatim}
|
||
% \end{old}
|
||
% (UL) However, I rather think that ~\linenumbers~ and %% v4.31
|
||
% ~\nolinenumbers~ should execute a ~\par~ already. (Then the
|
||
% ~\par~s in the following definitions should be removed.) (/UL)
|
||
|
||
\@namedef{linenumbers*}{\par\linenumbers*}
|
||
\@namedef{runninglinenumbers*}{\par\runninglinenumbers*}
|
||
|
||
\def\endlinenumbers{\par\@endpetrue}
|
||
\let\endrunninglinenumbers\endlinenumbers
|
||
\let\endpagewiselinenumbers\endlinenumbers
|
||
\expandafter\let\csname endlinenumbers*\endcsname\endlinenumbers
|
||
\expandafter\let\csname endrunninglinenumbers*\endcsname\endlinenumbers
|
||
\let\endnolinenumbers\endlinenumbers
|
||
|
||
%
|
||
% \subsection{%
|
||
% Display math
|
||
% \unskip}\label{ss:DM}
|
||
%
|
||
% Now we tackle the problem to get display math working.
|
||
% There are different options.
|
||
% \begin{enumerate}\item[
|
||
% 1.] Precede every display math with a ~\par~.
|
||
% Not too good.
|
||
% \item[
|
||
% 2.] Change ~\interlinepenalty~ and associates globally.
|
||
% Unstable.
|
||
% \item[
|
||
% 3.] Wrap each display math with a ~{linenomath}~
|
||
% environment.
|
||
% \end{enumerate}
|
||
% We'll go for option 3. See if it works:
|
||
% \begin{linenomath}
|
||
% \begin{equation}
|
||
% display \ math
|
||
% \end{equation}
|
||
% \end{linenomath}
|
||
% The star form ~{linenomath*}~ should also number the lines
|
||
% of the display itself,
|
||
% \begin{linenomath*}
|
||
% \begin{eqnarray}
|
||
% multi && line \\
|
||
% display && math \\
|
||
% &
|
||
% \begin{array}{c}
|
||
% with \\
|
||
% array
|
||
% \end{array}
|
||
% &
|
||
% \end{eqnarray}
|
||
% \end{linenomath*}
|
||
% including multline displays.
|
||
%
|
||
% First, here are two macros to turn
|
||
% on linenumbering on paragraphs preceeding displays, with
|
||
% numbering the lines of the display itself, or without.
|
||
% The ~\ifx..~ tests if line numbering is turned on. It
|
||
% does not harm to add these wrappers in sections that are
|
||
% not numbered. Nor does it harm to wrap a display
|
||
% twice, e.q, in case you have some ~{equation}~s wrapped
|
||
% explicitely, and later you redefine ~\equation~ to do it
|
||
% automatically.
|
||
%
|
||
% (New v4.3) To avoid the spurious line number above a
|
||
% display in vmode, I insert ~\ifhmode~. (/New v4.3)
|
||
|
||
\newcommand\linenomathNonumbers{%
|
||
\ifLineNumbers
|
||
%% \ifx\@@par\@@@par\else
|
||
\ifnum\interlinepenalty>-\linenopenaltypar
|
||
\global\holdinginserts\thr@@
|
||
\advance\interlinepenalty \linenopenalty
|
||
\ifhmode % v4.3
|
||
\advance\predisplaypenalty \linenopenalty
|
||
\fi
|
||
\fi
|
||
\fi
|
||
\ignorespaces
|
||
}
|
||
|
||
\newcommand\linenomathWithnumbers{%
|
||
\ifLineNumbers
|
||
%% \ifx\@@par\@@@par\else
|
||
\ifnum\interlinepenalty>-\linenopenaltypar
|
||
\global\holdinginserts\thr@@
|
||
\advance\interlinepenalty \linenopenalty
|
||
\ifhmode % v4.3
|
||
\advance\predisplaypenalty \linenopenalty
|
||
\fi
|
||
\advance\postdisplaypenalty \linenopenalty
|
||
\advance\interdisplaylinepenalty \linenopenalty
|
||
\fi
|
||
\fi
|
||
\ignorespaces
|
||
}
|
||
|
||
% The ~{linenomath}~ environment has two forms, with and
|
||
% without a star. The following two macros define the
|
||
% environment, where the stared/non-stared form does/doesn't number the
|
||
% lines of the display or vice versa.
|
||
|
||
\newcommand\linenumberdisplaymath{%
|
||
\def\linenomath{\linenomathWithnumbers}%
|
||
\@namedef{linenomath*}{\linenomathNonumbers}%
|
||
}
|
||
|
||
\newcommand\nolinenumberdisplaymath{%
|
||
\def\linenomath{\linenomathNonumbers}%
|
||
\@namedef{linenomath*}{\linenomathWithnumbers}%
|
||
}
|
||
|
||
\def\endlinenomath{%
|
||
\ifLineNumbers % v4.3
|
||
\global\holdinginserts\@LN@outer@holdins % v4.21
|
||
\fi
|
||
\global % v4.21 support for LaTeX2e earlier than 1996/07/26.
|
||
\@ignoretrue
|
||
}
|
||
\expandafter\let\csname endlinenomath*\endcsname\endlinenomath
|
||
|
||
% The default is not to number the lines of a display. But
|
||
% the package option ~mathlines~ may be used to switch
|
||
% that behavior.
|
||
|
||
\nolinenumberdisplaymath
|
||
|
||
%
|
||
% \section{%
|
||
% Line number references
|
||
% \unskip}\label{s:LNref}
|
||
% \subsection{%
|
||
% Internals %% New subsec. v4.3.
|
||
% \unskip}
|
||
% The only way to get a label to a line number in a
|
||
% paragraph is to ask the output routine to mark it.
|
||
%
|
||
% (New v4.00) The following two paragraphs don't hold any
|
||
% longer, see below. (/New v4.00)
|
||
% \begin{old}\begin{verbatim}
|
||
% % We use the marginpar mechanism to hook to ~\output~ for a
|
||
% % second time. Marginpars are floats with number $-1$, we
|
||
% % fake marginpars with No $-2$. Originally, every negative
|
||
% % numbered float was considered to be a marginpar.
|
||
% %
|
||
% % The float box number ~\@currbox~ is used to transfer the
|
||
% % label name in a macro called ~\@LNL@~<box-number>.
|
||
% \end{verbatim}
|
||
% \end{old}
|
||
% A ~\newlabel~ is written to the aux-file. The reference
|
||
% is to ~\theLineNumber~, \emph{not} ~\thelinenumber~.
|
||
% This allows to hook in, as done below for pagewise line
|
||
% numbering.
|
||
%
|
||
% (New v3.03) The ~\@LN@ExtraLabelItems~ are added for a hook
|
||
% to keep packages like ~{hyperref}~ happy. (/New v3.03)
|
||
%
|
||
% (New v4.00)
|
||
% We fire the ~\marginpar~ mechanism, so we leave \LaTeX's
|
||
% ~\@addmarginpar~ untouched.
|
||
% \begin{old}\begin{verbatim}
|
||
% % \let\@LN@addmarginpar\@addmarginpar
|
||
% % \def\@addmarginpar{%
|
||
% % \ifnum\count\@currbox>-2\relax
|
||
% % \expandafter\@LN@addmarginpar
|
||
% % \else
|
||
% % \@cons\@freelist\@currbox
|
||
% % \protected@write\@auxout{}{%
|
||
% % \string\newlabel
|
||
% % {\csname @LNL@\the\@currbox\endcsname}%
|
||
% % {{\theLineNumber}{\thepage}\@LN@ExtraLabelItems}}%
|
||
% % \fi}
|
||
% \end{verbatim}
|
||
% \end{old}
|
||
% OK, we keep Stephan's ~\@LN@ExtraLabelItems~:
|
||
% (/New v4.00)
|
||
|
||
\let\@LN@ExtraLabelItems\@empty
|
||
|
||
% (New v4.00)
|
||
% We imitate the ~\marginpar~ mechanism without using the
|
||
% ~\@freelist~ boxes. ~\linelabel~ will indeed place a signal
|
||
% penalty (~\@Mllbcodepen~, new), and it will put a label into
|
||
% some list macro ~\@LN@labellist~. A new part of the output
|
||
% routine will take the labels from the list and will write
|
||
% ~\newlabel~s to the .aux file.
|
||
%
|
||
% The following is a version of \LaTeX's ~\@xnext~.
|
||
|
||
\def\@LN@xnext#1\@lt#2\@@#3#4{\def#3{#1}\gdef#4{#2}}
|
||
|
||
% This takes an item ~#1~ from a list ~#4~ into ~#3~;
|
||
% to be used as ~\expandafter\@LN@xnext#4\@@#3#4~.
|
||
% Our lists use ~\@lt~ after each item for separating.
|
||
% Indeed, there will be another list macro which can
|
||
% appear as argument ~#4~, this will be used for moving
|
||
% ~\vadjust~ items (section_\ref{ss:PVadj}).
|
||
% The list for ~\linelabel~s is the following:
|
||
|
||
\global\let\@LN@labellist\@empty
|
||
|
||
% The next is the new part of the output routine writing the
|
||
% ~\newlabel~ to the .aux file. Since it is no real page output,
|
||
% the page is put back to top of the main vertical list.
|
||
|
||
\def\WriteLineNo{%
|
||
\unvbox\@cclv
|
||
\expandafter \@LN@xnext \@LN@labellist \@@
|
||
\@LN@label \@LN@labellist
|
||
\protected@write\@auxout{}{\string\newlabel{\@LN@label}%
|
||
{{\theLineNumber}{\thepage}\@LN@ExtraLabelItems}}%
|
||
}
|
||
|
||
% (/New v4.00)
|
||
%
|
||
% \subsection{%
|
||
% The \scs{linelabel} command
|
||
% \unskip}\label{ss:LL}
|
||
% To refer to a place in line ~\ref{~<foo>~}~ at page
|
||
% ~\pageref{~<foo>~}~ you place a ~\linelabel{~<foo>~}~ at
|
||
% that place.
|
||
%
|
||
% \linelabel{demo}
|
||
% \marginpar{\tiny\raggedright
|
||
% See if it works: This paragraph
|
||
% starts on page \pageref{demo}, line
|
||
% \ref{demo}.
|
||
% \unskip}%
|
||
% (New v4.11)
|
||
% \begin{old}\begin{verbatim}
|
||
% % If you use this command outside a ~\linenumbers~
|
||
% % paragraph, you will get references to some bogus
|
||
% % line numbers, sorry. But we don't disable the command,
|
||
% % because only the ~\par~ at the end of a paragraph may
|
||
% % decide whether to print line numbers on this paragraph
|
||
% % or not. A ~\linelabel~ may legally appear earlier than
|
||
% % ~\linenumbers~.
|
||
% \end{verbatim}
|
||
% \end{old}
|
||
% This trick is better not allowed---see subsections_\ref{ss:LL}
|
||
% and_\ref{ss:OnOff}.
|
||
% (/New v4.11)
|
||
%
|
||
% ~\linelabel~
|
||
% \begin{old}\begin{verbatim}
|
||
% %, via a fake float number $-2$, %% new mechanism v4.00
|
||
% \end{verbatim}
|
||
% \end{old}
|
||
% puts a
|
||
% ~\penalty~ into a ~\vadjust~, which triggers the
|
||
% pagebuilder after putting the current line to the main
|
||
% vertical list. A ~\write~ is placed on the main vertical
|
||
% list, which prints a reference to the current value of
|
||
% ~\thelinenumber~ and ~\thepage~ at the time of the
|
||
% ~\shipout~.
|
||
%
|
||
% A ~\linelabel~ is allowed only in outer horizontal mode.
|
||
% In outer vertical mode we start a paragraph, and ignore
|
||
% trailing spaces (by fooling ~\@esphack~).
|
||
%
|
||
% (New v4.00) We aim at relaxing the previous condition.
|
||
% We insert a hook ~\@LN@mathhook~ and a shorthand
|
||
% ~\@LN@postlabel~ to support the ~mathrefs~ option which
|
||
% allows ~\linelabel~ in math mode.
|
||
%
|
||
% The next paragraph is no longer valid.
|
||
% \begin{old}\begin{verbatim}
|
||
% % The argument of ~\linelabel~ is put into a macro with a
|
||
% % name derived from the number of the allocated float box.
|
||
% % Much of the rest is dummy float setup.
|
||
% \end{verbatim}
|
||
% \end{old}
|
||
% (/New v4.00)
|
||
%
|
||
% (New v4.11)
|
||
% \begin{old}\begin{verbatim}
|
||
% % \def\linelabel#1{%
|
||
% \end{verbatim}
|
||
% \end{old}
|
||
% I forgot ~\linenumbers~ today, costed me hours or so.
|
||
|
||
\def\@LN@LLerror{\PackageError{lineno}{%
|
||
\string\linelabel\space without \string\linenumbers}{%
|
||
Just see documentation. (New feature v4.11)}\@gobble}
|
||
|
||
% (New v4.3) Here some things have changed for v4.3.
|
||
% The previous ~#1~ has been replaced by ~\@gobble~.
|
||
% Ensuing, the ~\linelabel~ error message is re-implemented.
|
||
% I find it difficult to compare efficiency of slight
|
||
% alternatives---so choose an easy one. Explicit switching
|
||
% in ~\linenumbers~ and ~\nolinenumbers~ is an additional
|
||
% command that may better be avoided.
|
||
|
||
\newcommand\linelabel{%
|
||
\ifLineNumbers \expandafter \@LN@linelabel
|
||
\else \expandafter \@LN@LLerror \fi}
|
||
%%\let\linelabel\@LN@LLerror
|
||
|
||
\gdef\@LN@linelabel#1{%
|
||
%%
|
||
% ~\gdef~ for hyperref ``symbolically''. (/New v4.11)
|
||
%%
|
||
\ifx\protect\@typeset@protect
|
||
%%
|
||
% $\gets$ And a ~\linelabel~ should never be replicated in a
|
||
% mark or a TOC entry. (/New v4.3)
|
||
%%
|
||
\ifvmode
|
||
\ifinner \else
|
||
\leavevmode \@bsphack \@savsk\p@
|
||
\fi
|
||
\else
|
||
\@bsphack
|
||
\fi
|
||
\ifhmode
|
||
\ifinner
|
||
\@parmoderr
|
||
\else
|
||
%%
|
||
% (New v4.00)
|
||
%%
|
||
\@LN@postlabel{#1}%
|
||
% \begin{old}\begin{verbatim}
|
||
% % \@floatpenalty -\@Mii
|
||
% % \@next\@currbox\@freelist
|
||
% % {\global\count\@currbox-2%
|
||
% % \expandafter\gdef\csname @LNL@\the\@currbox\endcsname{#1}}%
|
||
% % {\@floatpenalty\z@ \@fltovf \def\@currbox{\@tempboxa}}%
|
||
% % \begingroup
|
||
% % \setbox\@currbox \color@vbox \vbox \bgroup \end@float
|
||
% % \endgroup
|
||
% % \@ignorefalse \@esphack
|
||
% \end{verbatim}
|
||
% \end{old}
|
||
% (/New v4.00)
|
||
%%
|
||
\@esphack
|
||
%%
|
||
% (New v4.00)
|
||
% The ~\@ignorefalse~ was appropriate before because the
|
||
% ~\@Esphack~ in ~\end@float~ set ~\@ignoretrue~. Cf._\LaTeX's
|
||
% ~\@xympar~. (/New v4.00)
|
||
%%
|
||
\fi
|
||
\else
|
||
%%
|
||
% (New v4.00)
|
||
%%
|
||
\@LN@mathhook{#1}%
|
||
% \begin{old}\begin{verbatim}
|
||
% % \@parmoderr
|
||
% \end{verbatim}
|
||
% \end{old}
|
||
% Instead of complaining, you may just do your job.
|
||
% (/New v4.00)
|
||
%%
|
||
\fi
|
||
\fi
|
||
}
|
||
|
||
% (New v4.00) The shorthand just does what happened
|
||
% with ~linenox0.sty~ before ~ednmath0.sty~ (New v4.1:
|
||
% now ~mathrefs~ option) appeared, and
|
||
% the hook is initialized to serve the same purpose.
|
||
% So errors come just where Stephan had built them in,
|
||
% and this is just the \LaTeX\ ~\marginpar~ behaviour.
|
||
|
||
\def\@LN@postlabel#1{\g@addto@macro\@LN@labellist{#1\@lt}%
|
||
\vadjust{\penalty-\@Mllbcodepen}}
|
||
\def\@LN@mathhook#1{\@parmoderr}
|
||
|
||
% (/New v4.00)
|
||
%
|
||
% \modulolinenumbers[3]
|
||
% \firstlinenumber{1}
|
||
% \section{%
|
||
% The appearance of the line numbers
|
||
% \unskip}\label{appearance}
|
||
% \subsection{%
|
||
% Basic code %% own subsec. v4.2.
|
||
% \unskip}
|
||
%
|
||
% The line numbers are set as ~\tiny\sffamily\arabic{linenumber}~,
|
||
% $10pt$ left of the text. With options to place it
|
||
% right of the text, or . . .
|
||
%
|
||
% . . . here are the hooks:
|
||
|
||
\def\makeLineNumberLeft{%
|
||
\hss\linenumberfont\LineNumber\hskip\linenumbersep}
|
||
|
||
\def\makeLineNumberRight{%
|
||
\linenumberfont\hskip\linenumbersep\hskip\columnwidth
|
||
\hb@xt@\linenumberwidth{\hss\LineNumber}\hss}
|
||
|
||
\def\linenumberfont{\normalfont\tiny\sffamily}
|
||
|
||
\newdimen\linenumbersep
|
||
\newdimen\linenumberwidth
|
||
|
||
\linenumberwidth=12pt
|
||
\linenumbersep=12pt
|
||
|
||
% Margin switching requires ~pagewise~ numbering mode, but
|
||
% choosing the left or right margin for the numbers always
|
||
% works.
|
||
|
||
\def\switchlinenumbers{\@ifstar
|
||
{\let\makeLineNumberOdd\makeLineNumberRight
|
||
\let\makeLineNumberEven\makeLineNumberLeft}%
|
||
{\let\makeLineNumberOdd\makeLineNumberLeft
|
||
\let\makeLineNumberEven\makeLineNumberRight}%
|
||
}
|
||
|
||
\def\setmakelinenumbers#1{\@ifstar
|
||
{\let\makeLineNumberRunning#1%
|
||
\let\makeLineNumberOdd#1%
|
||
\let\makeLineNumberEven#1}%
|
||
{\ifx\c@linenumber\c@runninglinenumber
|
||
\let\makeLineNumberRunning#1%
|
||
\else
|
||
\let\makeLineNumberOdd#1%
|
||
\let\makeLineNumberEven#1%
|
||
\fi}%
|
||
}
|
||
|
||
\def\leftlinenumbers{\setmakelinenumbers\makeLineNumberLeft}
|
||
\def\rightlinenumbers{\setmakelinenumbers\makeLineNumberRight}
|
||
|
||
\leftlinenumbers*
|
||
|
||
% ~\LineNumber~ is a hook which is used for the modulo stuff.
|
||
% It is the command to use for the line number, when you
|
||
% customize ~\makeLineNumber~. Use ~\thelinenumber~ to
|
||
% change the outfit of the digits.
|
||
%
|
||
%
|
||
% We will implement two modes of operation:
|
||
% \begin{itemize}
|
||
% \item numbers ~running~ through (parts of) the text
|
||
% \item ~pagewise~ numbers starting over with one on top of
|
||
% each page.
|
||
% \end{itemize}
|
||
% Both modes have their own count register, but only one is
|
||
% allocated as a \LaTeX\ counter, with the attached
|
||
% facilities serving both.
|
||
|
||
\newcounter{linenumber}
|
||
\newcount\c@pagewiselinenumber
|
||
\let\c@runninglinenumber\c@linenumber
|
||
|
||
% Only the running mode counter may be reset, or preset,
|
||
% for individual paragraphs. The pagewise counter must
|
||
% give a unique anonymous number for each line.
|
||
%
|
||
% (New v4.3) ~\newcounter{linenumber}~
|
||
% was the only ~\newcounter~ in the whole package, and
|
||
% formerly I was near using ~\newcount~ instead. Yet
|
||
% ~\newcounter~ may be quite useful for ~\includeonly~.
|
||
% It also supports resetting ``subcounters'', but what
|
||
% could these be? Well, ~edtable~ might introduce a
|
||
% subcounter for columns.
|
||
% (Note that \LaTeX's setting commands would work with
|
||
% ~\newcount\c@linenumber~ already, apart from this.
|
||
% And perhaps sometimes ~\refstepcounter{linenumber}~
|
||
% wouldn't work---cf._my discussion of ~\stepcounter~ in
|
||
% subsection_\ref{ss:MLN}, similarly ~\refstep...~ would
|
||
% be quite useless.
|
||
% Even the usual redefinitions of ~\thelinenumber~ would
|
||
% work. It is nice, on the other hand, that
|
||
% ~\thelinenumber~ is predefined here. \LaTeX's
|
||
% initialization of the value perhaps just serves making
|
||
% clear \LaTeX\ counters should always be changed
|
||
% globally.---Shortened and improved the discussion here.)
|
||
% (/New v4.3)
|
||
%
|
||
% (New v4.22)
|
||
% ~\c@linenumber~ usually is---globally---incremented by
|
||
% ~\stepcounter~ (at present), so resetting it locally would
|
||
% raise the save stack problem of \TeX book p._301, moreover
|
||
% it would be is useless, there is no hope of keeping the
|
||
% values local (but see subsection_\ref{ss:ILN}). So I insert
|
||
% ~\global~: (/New v4.22)
|
||
|
||
\newcommand*\resetlinenumber[1][\@ne]{%
|
||
\global % v4.22
|
||
\c@runninglinenumber#1\relax}
|
||
|
||
% (New v4.00)
|
||
% \begin{old}\begin{verbatim}
|
||
% % \newcommand\resetlinenumber[1][1]{\c@runninglinenumber#1}
|
||
% \end{verbatim}
|
||
% \end{old}
|
||
% Added ~\relax~, being quite sure that this does no harm
|
||
% and is quite important, as with ~\setcounter~ etc.
|
||
% I consider this a bug fix (although perhaps no user has
|
||
% ever had a problem with this). (/New v4.00)
|
||
%
|
||
% (v4.22: I had made much fuss about resetting subordinate
|
||
% counters here---removed, somewhat postponed.)
|
||
%
|
||
%% TODO v4.4+:
|
||
%% \newcommand*\resetlinenumber[1][\@ne]{%
|
||
%% \ifx\c@linenumber\c@runninglinenumber
|
||
%% \global\c@linenumber#1\relax
|
||
%% \global\advance\c@linenumber\m@ne
|
||
%% \stepLineNumber
|
||
%% \else
|
||
%% \PackageError{lineno}%% Shorthand!?
|
||
%% {You can't reset line number in pagewise mode}%
|
||
%% {This should suffice.}%
|
||
%% \fi
|
||
%% }
|
||
%
|
||
% \subsection{%
|
||
% Running line numbers
|
||
% \unskip}
|
||
%
|
||
% Running mode is easy, ~\LineNumber~ and ~\theLineNumber~
|
||
% produce ~\thelinenumber~, which defaults to
|
||
% ~\arabic{linenumber}~, using the ~\c@runninglinenumber~
|
||
% counter. This is the default mode of operation.
|
||
|
||
\def\makeRunningLineNumber{\makeLineNumberRunning}
|
||
|
||
\def\setrunninglinenumbers{%
|
||
\def\theLineNumber{\thelinenumber}%
|
||
\let\c@linenumber\c@runninglinenumber
|
||
\let\makeLineNumber\makeRunningLineNumber
|
||
}
|
||
|
||
\setrunninglinenumbers\resetlinenumber
|
||
|
||
%
|
||
% \subsection{%
|
||
% Pagewise line numbers
|
||
% \unskip}\label{ss:PW}
|
||
%
|
||
% Difficult, if you think about it. The number has to be
|
||
% printed when there is no means to know on which page it
|
||
% will end up, except through the aux-file. My solution
|
||
% is really expensive, but quite robust.
|
||
%
|
||
% With version ~v2.00~ the hashsize requirements are
|
||
% reduced, because we do not need one controlsequence for
|
||
% each line any more. But this costs some computation time
|
||
% to find out on which page we are.
|
||
%
|
||
% ~\makeLineNumber~ gets a hook to log the line and page
|
||
% number to the aux-file. Another hook tries to find out
|
||
% what the page offset is, and subtracts it from the counter
|
||
% ~\c@linenumber~. Additionally, the switch
|
||
% ~\ifoddNumberedPage~ is set true for odd numbered pages,
|
||
% false otherwise.
|
||
|
||
\def\setpagewiselinenumbers{%
|
||
\let\theLineNumber\thePagewiseLineNumber
|
||
\let\c@linenumber\c@pagewiselinenumber
|
||
\let\makeLineNumber\makePagewiseLineNumber
|
||
}
|
||
|
||
\def\makePagewiseLineNumber{\logtheLineNumber\getLineNumber
|
||
\ifoddNumberedPage
|
||
\makeLineNumberOdd
|
||
\else
|
||
\makeLineNumberEven
|
||
\fi
|
||
}
|
||
|
||
% Each numbered line gives a line to the aux file
|
||
% \begin{verse}
|
||
% ~\@LN{~<line>~}{~<page>~}~
|
||
% \end{verse}
|
||
% very similar to the ~\newlabel~ business, except that we need
|
||
% an arabic representation of the page number, not what
|
||
% there might else be in ~\thepage~.
|
||
|
||
\def\logtheLineNumber{\protected@write\@auxout{}{%
|
||
%%
|
||
% (New v4.00) (UL)
|
||
% As Daniel Doherty observed, the earlier line
|
||
% \begin{old}\begin{verbatim}
|
||
% % \string\@LN{\the\c@linenumber}{\noexpand\the\c@page}}}
|
||
% \end{verbatim}
|
||
% \end{old}
|
||
% here may lead into an infinite loop when the user resets
|
||
% the page number (think of ~\pagenumbering~, e.g.).
|
||
% Stephan and I brief\/ly discussed the matter and decided
|
||
% to introduce a ``physical''-page counter to which
|
||
% ~\logtheLineNumber~ refers. It was Stephan's idea to use
|
||
% ~\cl@page~ for reliably augmenting the ``physical''-page
|
||
% counter. However, this relies on the output routine once
|
||
% doing ~\stepcounter{page}~. Before Stephan's
|
||
% suggestion, I had thought of appending the stepping to
|
||
% \LaTeX's ~\@outputpage~.---So the macro definition ends
|
||
% as follows.
|
||
%%
|
||
\string\@LN{\the\c@linenumber}{%
|
||
%%
|
||
% (New v4.2)
|
||
%% \noexpand\number\n@LN@truepage}}}
|
||
%%
|
||
% The `truepage' counter must start with ~\c@~ so it works
|
||
% with ~\include~, and the ~\@addtoreset~ below is needed
|
||
% for the same purpose.
|
||
%%
|
||
\noexpand\the\c@LN@truepage}}}
|
||
|
||
%% \newcount\n@LN@truepage
|
||
%% \g@addto@macro\cl@page{\global\advance\n@LN@truepage\@ne}
|
||
\newcount\c@LN@truepage
|
||
\g@addto@macro\cl@page{\global\advance\c@LN@truepage\@ne}
|
||
\@addtoreset{LN@truepage}{@ckpt}
|
||
|
||
% (/New v4.2) I had thought of offering more
|
||
% features of a \LaTeX\ counter. However, the user should
|
||
% better \emph{not} have access to this counter. ~\c@page~
|
||
% should suffice as a pagewise master counter.---To be sure,
|
||
% along the present lines the user \emph{can} manipulate
|
||
% ~\c@LN@truepage~ by ~\stepcounter{page}~. E.g., she might
|
||
% do this in order to manually insert a photograph. Well,
|
||
% seems not to harm.
|
||
%
|
||
% The above usage of ~\g@addto@macro~ and ~\cl@page~ may be
|
||
% not as stable as Stephan intended. His proposal used
|
||
% ~\xdef~ directly. But he used ~\cl@page~ as well, and who
|
||
% knows \dots{} And as to ~\g@addto@macro~, I have introduced
|
||
% it for list macros anyway.
|
||
% (/UL) (/New v4.00)
|
||
%
|
||
% From the aux-file we get one macro ~\LN@P~<page> for each
|
||
% page with line numbers on it. This macro calls four other
|
||
% macros with one argument each. These macros are
|
||
% dynamically defined to do tests and actions, to find out
|
||
% on which page the current line number is located.
|
||
%
|
||
% We need sort of a pointer to the first page with line
|
||
% numbers, initiallized to point to nothing:
|
||
|
||
\def\LastNumberedPage{first}
|
||
\def\LN@Pfirst{\nextLN\relax}
|
||
|
||
% The four dynamic macros are initiallized to reproduce
|
||
% themselves in an ~\xdef~
|
||
|
||
\let\lastLN\relax % compare to last line on this page
|
||
\let\firstLN\relax % compare to first line on this page
|
||
\let\pageLN\relax % get the page number, compute the linenumber
|
||
\let\nextLN\relax % move to the next page
|
||
|
||
% During the end-document run through the aux-files, we
|
||
% disable ~\@LN~. I may put in a check here later, to give
|
||
% a rerun recommendation.
|
||
|
||
\AtEndDocument{\let\@LN\@gobbletwo}
|
||
|
||
% Now, this is the tricky part. First of all, the whole
|
||
% definition of ~\@LN~ is grouped, to avoid accumulation
|
||
% on the save stack. Somehow ~\csname~<cs>~\endcsname~ pushes
|
||
% an entry, which stays after an ~\xdef~ to that <cs>.
|
||
%
|
||
% If ~\LN@P~<page> is undefined, initialize it with the
|
||
% current page and line number, with the
|
||
% \emph{pointer-to-the-next-page} pointing to nothing. And
|
||
% the macro for the previous page will be redefined to point
|
||
% to the current one.
|
||
%
|
||
% If the macro for the current page already exists, just
|
||
% redefine the \emph{last-line-number} entry.
|
||
%
|
||
% Finally, save the current page number, to get the pointer to the
|
||
% following page later.
|
||
|
||
\def\@LN#1#2{{\expandafter\@@LN
|
||
\csname LN@P#2C\@LN@column\expandafter\endcsname
|
||
\csname LN@PO#2\endcsname
|
||
{#1}{#2}}}
|
||
|
||
\def\@@LN#1#2#3#4{\ifx#1\relax
|
||
\ifx#2\relax\gdef#2{#3}\fi
|
||
\expandafter\@@@LN\csname LN@P\LastNumberedPage\endcsname#1%
|
||
\xdef#1{\lastLN{#3}\firstLN{#3}%
|
||
\pageLN{#4}{\@LN@column}{#2}\nextLN\relax}%
|
||
\else
|
||
\def\lastLN##1{\noexpand\lastLN{#3}}%
|
||
\xdef#1{#1}%
|
||
\fi
|
||
\xdef\LastNumberedPage{#4C\@LN@column}}
|
||
|
||
% The previous page macro gets its pointer to the
|
||
% current one, replacing the ~\relax~ with the cs-token
|
||
% ~\LN@P~<page>.
|
||
|
||
\def\@@@LN#1#2{{\def\nextLN##1{\noexpand\nextLN\noexpand#2}%
|
||
\xdef#1{#1}}}
|
||
|
||
% Now, to print a line number, we need to find the page,
|
||
% where it resides. This will most probably be the page where
|
||
% the last one came from, or maybe the next page. However, it can
|
||
% be a completely different one. We maintain a cache,
|
||
% which is ~\let~ to the last page's macro. But for now
|
||
% it is initialized to expand ~\LN@first~, where the poiner
|
||
% to the first numbered page has been stored in.
|
||
|
||
\def\NumberedPageCache{\LN@Pfirst}
|
||
|
||
% To find out on which page the current ~\c@linenumber~ is,
|
||
% we define the four dynamic macros to do something usefull
|
||
% and execute the current cache macro. ~\lastLN~ is run
|
||
% first, testing if the line number in question may be on a
|
||
% later page. If so, disable ~\firstLN~, and go on to the
|
||
% next page via ~\nextLN~.
|
||
|
||
\def\testLastNumberedPage#1{\ifnum#1<\c@linenumber
|
||
\let\firstLN\@gobble
|
||
\fi}
|
||
|
||
% Else, if ~\firstLN~ finds out that we need an earlier
|
||
% page, we start over from the beginning. Else, ~\nextLN~
|
||
% will be disabled, and ~\pageLN~ will run
|
||
% ~\gotNumberedPage~ with four arguments: the first line
|
||
% number on this column, the page number, the column
|
||
% number, and the first line on the page.
|
||
|
||
\def\testFirstNumberedPage#1{\ifnum#1>\c@linenumber
|
||
\def\nextLN##1{\testNextNumberedPage\LN@Pfirst}%
|
||
\else
|
||
\let\nextLN\@gobble
|
||
\def\pageLN{\gotNumberedPage{#1}}%
|
||
\fi}
|
||
|
||
% We start with ~\pageLN~ disabled and ~\nextLN~ defined to
|
||
% continue the search with the next page.
|
||
|
||
\long\def \@gobblethree #1#2#3{}
|
||
|
||
\def\testNumberedPage{%
|
||
\let\lastLN\testLastNumberedPage
|
||
\let\firstLN\testFirstNumberedPage
|
||
\let\pageLN\@gobblethree
|
||
\let\nextLN\testNextNumberedPage
|
||
\NumberedPageCache
|
||
}
|
||
|
||
% When we switch to another page, we first have to make
|
||
% sure that it is there. If we are done with the last
|
||
% page, we probably need to run \TeX\ again, but for the
|
||
% rest of this run, the cache macro will just return four
|
||
% zeros. This saves a lot of time, for example if you have
|
||
% half of an aux-file from an aborted run, in the next run
|
||
% the whole page-list would be searched in vain again and
|
||
% again for the second half of the document.
|
||
%
|
||
% If there is another page, we iterate the search.
|
||
|
||
\def\testNextNumberedPage#1{\ifx#1\relax
|
||
\global\def\NumberedPageCache{\gotNumberedPage0000}%
|
||
\PackageWarningNoLine{lineno}%
|
||
{Linenumber reference failed,
|
||
\MessageBreak rerun to get it right}%
|
||
\else
|
||
\global\let\NumberedPageCache#1%
|
||
\fi
|
||
\testNumberedPage
|
||
}
|
||
|
||
% \linelabel{demo2}
|
||
% \marginpar{\tiny\raggedright
|
||
% Let's see if it finds the label
|
||
% on page \pageref{demo},
|
||
% line \ref{demo}, and back here
|
||
% on page \pageref{demo2}, line
|
||
% \ref{demo2}.
|
||
% \unskip}%
|
||
% To separate the official hooks from the internals there is
|
||
% this equivalence, to hook in later for whatever purpose:
|
||
|
||
\let\getLineNumber\testNumberedPage
|
||
|
||
% So, now we got the page where the number is on. We
|
||
% establish if we are on an odd or even page, and calculate
|
||
% the final line number to be printed.
|
||
|
||
\newif\ifoddNumberedPage
|
||
\newif\ifcolumnwiselinenumbers
|
||
\columnwiselinenumbersfalse
|
||
|
||
\def\gotNumberedPage#1#2#3#4{\oddNumberedPagefalse
|
||
\ifodd \if@twocolumn #3\else #2\fi\relax\oddNumberedPagetrue\fi
|
||
\advance\c@linenumber\@ne
|
||
\ifcolumnwiselinenumbers
|
||
\subtractlinenumberoffset{#1}%
|
||
\else
|
||
\subtractlinenumberoffset{#4}%
|
||
\fi
|
||
}
|
||
|
||
% You might want to run the pagewise mode with running line
|
||
% numbers, or you might not. It's your choice:
|
||
|
||
\def\runningpagewiselinenumbers{%
|
||
\let\subtractlinenumberoffset\@gobble
|
||
}
|
||
|
||
\def\realpagewiselinenumbers{%
|
||
\def\subtractlinenumberoffset##1{\advance\c@linenumber-##1\relax}%
|
||
}
|
||
|
||
\realpagewiselinenumbers
|
||
|
||
% For line number references, we need a protected call to
|
||
% the whole procedure, with the requested line number stored
|
||
% in the ~\c@linenumber~ counter. This is what gets printed
|
||
% to the aux-file to make a label:
|
||
|
||
\def\thePagewiseLineNumber{\protect
|
||
\getpagewiselinenumber{\the\c@linenumber}}%
|
||
|
||
% And here is what happens when the label is refered to:
|
||
|
||
\def\getpagewiselinenumber#1{{%
|
||
\c@linenumber #1\relax\testNumberedPage
|
||
\thelinenumber
|
||
}}
|
||
|
||
% %
|
||
% A summary of all per line expenses:
|
||
% \begin{description}\item
|
||
% [CPU:] The ~\output~ routine is called for each line,
|
||
% and the page-search is done.
|
||
% \item
|
||
% [DISK:] One line of output to the aux-file for each
|
||
% numbered line
|
||
% \item
|
||
% [MEM:] One macro per page. Great improvement over v1.02,
|
||
% which had one control sequence per line in
|
||
% addition. It blew the hash table after some five
|
||
% thousand lines.
|
||
% \end{description}
|
||
%
|
||
% \subsection{%
|
||
% Twocolumn mode (New v3.06)
|
||
% \unskip}
|
||
%
|
||
% Twocolumn mode requires another patch to the ~\output~
|
||
% routine, in order to print a column tag to the .aux
|
||
% file.
|
||
|
||
\AtBeginDocument{% v4.2, revtex4.cls (e.g.).
|
||
% <- TODO v4.4+: Or better in \LineNoLaTeXOutput!?
|
||
\let\@LN@orig@makecol\@makecol}
|
||
\def\@LN@makecol{%
|
||
\@LN@orig@makecol
|
||
\setbox\@outputbox \vbox{%
|
||
\boxmaxdepth \@maxdepth
|
||
\protected@write\@auxout{}{%
|
||
\string\@LN@col{\if@firstcolumn1\else2\fi}%
|
||
}%
|
||
\box\@outputbox
|
||
}% \vbox
|
||
} %% TODO cf. revtexln.sty.
|
||
|
||
\def\@LN@col{\def\@LN@column} % v4.22, removed #1.
|
||
\@LN@col{1}
|
||
|
||
%
|
||
% \subsection{%
|
||
% Numbering modulo $m$, starting at $f$
|
||
%% Numbering modulo 5
|
||
% \unskip}\label{ss:Mod}
|
||
%
|
||
% Most users want to have only one in five lines numbered.
|
||
% ~\LineNumber~ is supposed to produce the outfit of the
|
||
% line number attached to the line, while ~\thelinenumber~
|
||
% is used also for references, which should appear even if
|
||
% they are not multiples of five.
|
||
%
|
||
% (New v4.00) Moreover, some users want to
|
||
% control which line number should be printed first. Support
|
||
% of this is now introduced here---see ~\firstlinenumber~
|
||
% below.---~numline.sty~ by Michael Jaegermann and
|
||
% James Fortune offers controlling which \emph{final}
|
||
% line numbers should not be printed. What is
|
||
% it good for? We ignore this here until some user demands
|
||
% it.---Peter Wilson's ~ledmac.sty~ offers much different
|
||
% choices of line numbers to be printed, due to Wayne Sullivan.
|
||
% (/New v4.00)
|
||
%
|
||
% (New v4.22) ~\c@linenumbermodulo~ is rendered a
|
||
% fake counter, as discussed since v4.00. So it can
|
||
% no longer be set by ~\setcounter~. ~\modulolinenumbers~
|
||
% serves this purpose. Well, does anybody want to do
|
||
% what worked with ~\addtocounter~? (Then please tell
|
||
% me.)---At least, ~\value~ still works. For the same
|
||
% purpose I rename the fake `firstlinenumber' counter
|
||
% ~\n@...~ to ~\c@...~. (/New v4.22)
|
||
% \begin{old}\begin{verbatim}
|
||
% % \newcount\c@linenumbermodulo % removed for v4.22
|
||
% \end{verbatim}
|
||
% \end{old}
|
||
%
|
||
%% Removed for v4.22:
|
||
%% (UL) On my question why, e.g.,
|
||
%% ~\chardef~ would not have sufficed, Stephan couldn't remember
|
||
%% exactly; guessed that he wanted to offer \LaTeX\ counter
|
||
%% facilities. However, the typical ones don't come this way.
|
||
%% So I'm quite sure that I will change this next time.
|
||
%%
|
||
%% However, I observed at least two times that users gave a very
|
||
%% high value to ~\c@linenumbermodulo~ in order to suppress
|
||
%% printing of the line number. One of these users preferred an
|
||
%% own way of handling line numbers, just wanted to use
|
||
%% ~\linelabel~ and ~ednotes.sty~ features. Should we support this?
|
||
%% I rather would like to advise them to
|
||
%% ~\let\makeLineNumber\relax~. (/UL)
|
||
%
|
||
% (New v4.00) \par
|
||
% ~\themodulolinenumber~ waits for being declared
|
||
% ~\LineNumber~ by ~\modulolinenumbers~. (This has
|
||
% been so before, no change.) Here is how it
|
||
% looked before:
|
||
% \begin{old}\begin{verbatim}
|
||
% % \def\themodulolinenumber{{\@tempcnta\c@linenumber
|
||
% % \divide\@tempcnta\c@linenumbermodulo
|
||
% % \multiply\@tempcnta\c@linenumbermodulo
|
||
% % \ifnum\@tempcnta=\c@linenumber\thelinenumber\fi
|
||
% % }}
|
||
% \end{verbatim}
|
||
% \end{old}
|
||
% (UL) This was somewhat slow. This arithmetic
|
||
% happens at every line. This time I tend to declare an extra
|
||
%% TODO v4.4+
|
||
% line counter (as opposed to my usual recommendations to use
|
||
% counters as rarely as possible) which is stepped every line.
|
||
% It could be incremented in the same way as ~\c@LN@truepage~
|
||
% is incremented via ~\cl@page~! This is another point in favour
|
||
% of ~{linenumber}~ being a \LaTeX\ counter!
|
||
% When this new counter equals ~\c@linenumbermodulo~, it is reset,
|
||
% and ~\thelinenumber~ is executed.---It gets much slower by my
|
||
% support of controlling the first line number below. I should
|
||
% improve this.---On
|
||
%% %% TODO v4.4+--pagewise!?
|
||
% the other hand, time expense means very little nowadays,
|
||
% while the number of \TeX\ counters still is limited.
|
||
%
|
||
% For the same purpose, moreover, attaching the line number
|
||
% box could be intercepted earlier (in ~\MakeLineNo~),
|
||
% without changing ~\LineNumber~. However, this may be
|
||
% bad for the latter's announcement as a wizard interface
|
||
% in section_\ref{s:UserCmds}.
|
||
%%
|
||
%% I wonder about Stephan's group. Its only effect is that
|
||
%% ~\@tempcnta~ is restored after using it. What for is this?
|
||
%% I tend to remove the group braces. %% TODO v4.4+
|
||
% (/UL)
|
||
%
|
||
% Here is the new code. It is very near to my ~lnopatch.sty~
|
||
% code which introduced the first line number feature
|
||
% before.---I add starting with a ~\relax~ which is so often
|
||
% recommended---without understanding this really. At least,
|
||
% it will not harm.---Former group braces appear as
|
||
% ~\begingroup~/~\endgroup~ here.
|
||
|
||
\def\themodulolinenumber{\relax
|
||
\ifnum\c@linenumber<\c@firstlinenumber \else
|
||
\begingroup
|
||
\@tempcnta\c@linenumber
|
||
\advance\@tempcnta-\c@firstlinenumber
|
||
\divide\@tempcnta\c@linenumbermodulo
|
||
\multiply\@tempcnta\c@linenumbermodulo
|
||
\advance\@tempcnta\c@firstlinenumber
|
||
\ifnum\@tempcnta=\c@linenumber \thelinenumber \fi
|
||
\endgroup
|
||
\fi
|
||
}
|
||
|
||
% (/New v4.00)
|
||
%
|
||
% The user command to set the modulo counter:
|
||
% (New v4.31) \dots\ a star variant is introduced to implement
|
||
% Hillel Chayim Yisraeli's idea to print the first line number
|
||
% after an interruption of the edited text by some editor's
|
||
% text, regardless of the modulo. If it is 1, it is printed only
|
||
% with ~\firstlinenumber{1}~. I.e., you use ~\modulolinenumbers*~
|
||
% for the new feature, without the star you get the simpler
|
||
% behaviour that we have had so far. And you can switch back
|
||
% from the refined behaviour to the simple one by using
|
||
% ~\modulolinenumbers~ without the star.---This enhancement
|
||
% is accompanied by a new package option ~modulo*~ which just
|
||
% executes ~\modulolinenumbers*~
|
||
% (subsection_\ref{ss:v3opts}).---`With ~\firstlinenumber{1}~'
|
||
% exactly means: `1' is printed if and only if the last
|
||
% ~\firstlinenumber~ before or in the paragraph that follows
|
||
% the ``interruption'' has argument `1' (or something
|
||
% \emph{expanding} to `1', or (to) something that \TeX\
|
||
% ``reads'' as 1, e.g.: a \TeX\ count register storing
|
||
% 1).---At present, this behaviour may be unsatisfactory with
|
||
% pagewise line-numbering $\dots$ I'll make an experimental
|
||
% extra package if someone complains \dots
|
||
|
||
\newcommand\modulolinenumbers{%
|
||
\@ifstar
|
||
{\def\@LN@maybe@moduloresume{%
|
||
\global\let\@LN@maybe@normalLineNumber
|
||
\@LN@normalLineNumber}%
|
||
\@LN@modulolinenos}%
|
||
{\let\@LN@maybe@moduloresume\relax \@LN@modulolinenos}%
|
||
}
|
||
|
||
\global\let\@LN@maybe@normalLineNumber\relax
|
||
\let\@LN@maybe@moduloresume\relax
|
||
\gdef\@LN@normalLineNumber{%
|
||
\ifnum\c@linenumber=\c@firstlinenumber \else
|
||
\ifnum\c@linenumber>\@ne
|
||
\def\LineNumber{\thelinenumber}%
|
||
\fi
|
||
\fi
|
||
%%
|
||
% ~\def~ instead of ~\let~ enables taking account of a
|
||
% redefinition of ~\thelinenumber~ in a present numbering
|
||
% environment (e.g.).
|
||
%%
|
||
\global\let\@LN@maybe@normalLineNumber\relax}
|
||
|
||
% Instead of changing ~\LineNumber~ directly by
|
||
% ~LN@moduloresume~, these tricks enable ~\modulolinenumbers*~
|
||
% to act as locally as I can make it. I don't know how to
|
||
% avoid that the output routine switches back to the normal
|
||
% modulo behaviour by a global change. (An ~\aftergroup~ may
|
||
% fail in admittedly improbable cases.)
|
||
|
||
\newcommand*\@LN@modulolinenos[1][\z@]{%
|
||
%%
|
||
% The definition of this macro is that of the former
|
||
% ~\modulolinenumbers~. (/New v4.31)
|
||
%%
|
||
\let\LineNumber\themodulolinenumber
|
||
\ifnum#1>\@ne
|
||
\chardef % v4.22, note below
|
||
\c@linenumbermodulo#1\relax
|
||
\else\ifnum#1=\@ne
|
||
% \begin{old}\begin{verbatim}
|
||
% % \def\LineNumber{\thelinenumber}%
|
||
% \end{verbatim}
|
||
% \end{old}
|
||
% (New v4.00) I am putting something here to enable
|
||
% ~\firstlinenumber~ with $~\c@linenumbermodulo~=1$.
|
||
% With ~lnopatch.sty~, a trick was offered for this purpose.
|
||
% It is now obsolete.
|
||
%
|
||
\def\LineNumber{\@LN@ifgreat\thelinenumber}%
|
||
%%
|
||
% (/New v4.00)
|
||
%%
|
||
\fi\fi
|
||
}
|
||
|
||
% (New v4.00) The default of ~\@LN@ifgreat~ is
|
||
|
||
\let\@LN@ifgreat\relax
|
||
|
||
% The previous changes as soon as ~\firstlinenumber~ is used:
|
||
|
||
\newcommand*\firstlinenumber[1]{%
|
||
\chardef\c@firstlinenumber#1\relax
|
||
%%
|
||
% No counter, little values allowed only---OK?---(UL)
|
||
% The change is local---OK? The good thing is that
|
||
% ~\global\firstlinenumber{~<number>~}~ works. Moreover,
|
||
% ~\modulolinenumbers~ acts locally as well. (/UL)
|
||
%
|
||
% (New v4.31)
|
||
%%
|
||
\let\@LN@ifgreat\@LN@ifgreat@critical}
|
||
|
||
\def\@LN@ifgreat@critical{%
|
||
\ifnum\c@linenumber<\c@firstlinenumber
|
||
\expandafter \@gobble
|
||
\fi}%
|
||
|
||
% (/New v4.31)
|
||
%
|
||
% The default
|
||
% value of ~\c@firstlinenumber~ %% v4.31
|
||
% is 0. This is best for what one would expect from modulo
|
||
% printing.
|
||
|
||
\let\c@firstlinenumber=\z@
|
||
|
||
%
|
||
% For usage and effects of ~\modulolinenumbers~ and %% v4.31
|
||
% ~\firstlinenumbers~, please consult section_\ref{s:UserCmds}.
|
||
% Two details on ~\firstlinenumbers~ here:
|
||
% (i)_~\firstlinenumber~ acts on a paragraph if and only if
|
||
% (a)_the paragraph is broken into lines ``in line-numbering
|
||
% mode'' (after ~\linenumbers~, e.g.);
|
||
% (b)_it is the last occurrence of a ~\firstlinenumbers~
|
||
% before or in the paragraph.
|
||
% (The practical applications of this that I can imagine
|
||
% don't seem appealing to me.)
|
||
% Cf._the explanation above of how ~\modulolinenumbers~ and
|
||
% ~\firstlinenumbers~ interact---for this and for (ii),
|
||
% which is concerned with possible arguments for
|
||
% ~\firstlinenumbers~.
|
||
%
|
||
% Note that the line numbers of the present section
|
||
% demonstrate the two devices. (/New v4.00)
|
||
|
||
%%\setcounter{linenumbermodulo}{5}
|
||
\chardef\c@linenumbermodulo=5 % v4.2; ugly?
|
||
\modulolinenumbers[1]
|
||
|
||
% (New v4.22) The new implementation through ~\chardef~
|
||
% decreases the functionality and raises certain compatibility
|
||
% problems. I face this without fear. The maximum modulo value
|
||
% is now ~255~. I expect that this suffices for usual applications.
|
||
% However, some users have ``abused'' ~lineno.sty~ to get
|
||
% ~ednotes.sty~ features without line numbers, so have set the
|
||
% modulo to a value beyond the total number of lines in their
|
||
% edition. This ought to be replaced by
|
||
% ~\let\makeLineNumber\relax~. (/New v4.22)
|
||
%
|
||
% \section{%
|
||
% Package options
|
||
% \unskip}\label{s:Opts}
|
||
%
|
||
% (New v4.1)
|
||
% The last heading formerly was the heading of what is now
|
||
% subsection_\ref{ss:v3opts}. The options declared there were
|
||
% said to execute user commands only. This was wrong already
|
||
% concerning ~displaymath~ and ~hyperref~. At least, however,
|
||
% these options were no or almost no occasion to skip definitions
|
||
% or allocations. This is different with the options that we now
|
||
% insert.
|
||
%
|
||
%% (New v4.2) v4.00 moved the ``options'' below the
|
||
%% ``extensions''. This was bad with ~\do@mlineno~ in
|
||
%% subsection_\ref{ss:v3opts} which is to control
|
||
%% subsection_\ref{ss:display}---undone here. (/New v4.2)
|
||
%
|
||
% \subsection{%
|
||
% Extended referencing to line numbers. (v4.2)
|
||
% \unskip}
|
||
% This subsection explains and declares package option ~addpageno~. %% v4.31
|
||
%
|
||
% If a line to whose number you refer by ~\ref~ is not on the
|
||
% present page, it may be useful to add the number of the page
|
||
% on which the line occurs---and perhaps it should not be added
|
||
% otherwise. In general, you could use the Standard \LaTeX\
|
||
% package varioref for this. However, the latter usually
|
||
% produces verbose output like `on the preceding page'---
|
||
% unless costumized---, while in critical editions, e.g., one
|
||
% may prefer just adding the page number and some mark on the
|
||
% left of the line number, irrespectively of how far the page is
|
||
% apart etc. To support this, package option ~addpageno~
|
||
% provides a command ~\vpagelineref~ to be used in place of
|
||
% ~\ref~. This produces, e.g., `34.15' when referring to line_15
|
||
% on page_34 while the present page is not 34. You can customize
|
||
% the outcome, see the package file ~vplref.sty~ where the code
|
||
% and further details are. You may conceive of
|
||
% ~\vpagelineref~ as a certain customization of varioref's
|
||
% ~\vref~.
|
||
%
|
||
% This implies that option ~addpageno~ requires the files
|
||
% ~vplref.sty~ and ~varioref.sty~. ~addpageno~ automatically
|
||
% loads both of them. Yet you can also load ~varioref.sty~
|
||
% on your own to use its package options.
|
||
%
|
||
% Of course, you might better introduce a shorter command name
|
||
% for ~\vpagelineref~ for your work, while we cannot predict
|
||
% here what shorthand will fit your work. E.g.,
|
||
% ~\newcommand{\lref}{\vpagelineref}~.
|
||
%
|
||
% If you really want to add the page number in \emph{any} case,
|
||
% use, e.g., some ~\myref~ instead of ~\ref~, after
|
||
% \[~newcommand*{\myref}{\pageref{#1}.\ref{#1}}~\]
|
||
% or what you like. You don't need the ~addpageno~ option in
|
||
% this case.
|
||
%
|
||
% ~addpageno~ is due to a suggestion by Sergei Mariev.
|
||
|
||
\DeclareOption{addpageno}{%
|
||
\AtEndOfPackage{\RequirePackage{vplref}[2005/04/25]}}
|
||
|
||
% \subsection{%
|
||
% \scs{linelabel} in math mode
|
||
% \unskip}\label{ss:MathRef}
|
||
%
|
||
% We have made some first steps towards allowing ~\linelabel~ in
|
||
% math mode. Because our code for this is presently experimental,
|
||
% we leave it to the user to decide for the experiment by calling
|
||
% option ~mathrefs~. We are in a hurry now and thus leave the
|
||
% code, explanations, and discussion in the separate package
|
||
% ~ednmath0.sty~. Maybe we later find the time to improve the
|
||
% code and move the relevant content of ~ednmath0.sty~ to here.
|
||
% The optimal situation would be to define ~\linelabel~ from
|
||
% the start so it works in math mode, omitting the ~mathrefs~
|
||
% option.
|
||
%
|
||
% Actually, this package even provides adjustments for analogously
|
||
% allowing ~ednotes.sty~ commands in math mode. Loading the package
|
||
% is postponed to ~\AtBeginDocument~ when we know whether these
|
||
% adjustments are needed.
|
||
|
||
\DeclareOption{mathrefs}{\AtBeginDocument
|
||
{\RequirePackage{ednmath0}[2004/08/20]}}
|
||
|
||
%
|
||
% \subsection{%
|
||
% Arrays, tabular environments (Revised v4.11)
|
||
% \unskip}\label{ss:Tab}
|
||
%
|
||
% This subsection explains and declares package options %% v4.31
|
||
% ~edtable~, ~longtable~, and ~nolongtablepatch~.
|
||
%
|
||
% The standard \LaTeX\ tabular environments come as single
|
||
% boxes, so the ~lineno.sty~ versions before v4.00 treated them as
|
||
% (parts of) single lines, printing (at most) one line number
|
||
% beside each and stepping the line number counter once only.
|
||
% Moreover, ~\linelabel~s got lost. Of course, tables are
|
||
% usually so high that you will want to treat each row like a
|
||
% line. (Christian Tapp even desires that the lines of table
|
||
% entries belonging to a single row are treated like ordinary
|
||
% lines.) Footnotes get lost in such environments as well, which
|
||
% was bad for ~ednotes.sty~.
|
||
%
|
||
% We provide adjustments to count lines, print their numbers
|
||
% etc.\ as desired at least for \emph{some} \LaTeX\ tabular
|
||
% environments. (Like with other details, ``some'' is to some
|
||
% extent explained in ~edtable.sty~.) We do this similarly as
|
||
% with option ~mathrefs~ before. We leave code
|
||
% and explanations in the separate package ~edtable.sty~.
|
||
% (For wizards: this package provides adjustments for
|
||
% ~ednotes.sty~ as well. However, in the present case we don't try
|
||
% to avoid them unless ~ednotes.sty~ is loaded.)
|
||
% Package option ~edtable~
|
||
% defines---by loading ~edtable.sty~---an environment ~{edtable}~
|
||
% which is able to change some \LaTeX\ tabular environments
|
||
% with the desired effects. (v4.11: ~edtable.sty~ v1.3 counts
|
||
% \LaTeX's ~{array}~ [etc.\@] as a ``tabular environment'' as
|
||
% well.)
|
||
%
|
||
% The ~{edtable}~ environment doesn't help with ~longtable.sty~,
|
||
% however. To make up for this, ~{longtable}~ is adjusted in a
|
||
% different way---and this happens only when another ~lineno.sty~
|
||
% option ~longtable~ is called. In this case, option ~edtable~
|
||
% needn't be called explicitly: option ~longtable~ works as if
|
||
% ~edtable~ had been called.
|
||
%
|
||
% Now, we are convinced that vertical spacing around
|
||
% ~{longtable}~ works wrongly---see \LaTeX\ bugs database
|
||
% tools/3180 and 3485, or see explanations in the package
|
||
% ~ltabptch.sty~ (which is to be obtained from CTAN folder
|
||
% \path{macros/latex/ltabptch}). Our conviction is so strong
|
||
% that the ~longtable~ option loads---after ~longtable.sty~---the
|
||
% patch package ~ltabptch.sty~. If the user doesn't want this
|
||
% (maybe preferring her own arrangement with the vertical
|
||
% spacing), she can forbid it by calling ~nolongtablepatch~.
|
||
%
|
||
% The following code just collects some choices, which are
|
||
% then executed in section_\ref{ss:ExOpt}. We use an ~\if...~
|
||
% without ~\newif~ since ~\if...true~ and ~\if...false~
|
||
% would occur at most two times and only within the present
|
||
% package. (~\AtEndOfClass{\RequirePackage{edtable}}~
|
||
% could be used instead, I just overlooked this. Now I don't
|
||
% change it because it allows to change the version requirement
|
||
% at one place only.)
|
||
|
||
\let\if@LN@edtable\iffalse
|
||
|
||
\DeclareOption{edtable}{\let\if@LN@edtable\iftrue}
|
||
|
||
\DeclareOption{longtable}{\let\if@LN@edtable\iftrue
|
||
\PassOptionsToPackage{longtable}{edtable}}
|
||
|
||
\DeclareOption{nolongtablepatch}{%
|
||
\PassOptionsToPackage{nolongtablepatch}{edtable}}
|
||
|
||
% (/New v4.1)
|
||
%
|
||
% \subsection{%
|
||
% Switch among settings
|
||
% \unskip}\label{ss:v3opts}
|
||
%
|
||
% There is a bunch of package options that execute %% v4.2
|
||
%% There is a bunch of package options, all of them executing
|
||
%% executing only user commands (see below). %% Cf. start of section.
|
||
% user commands only.
|
||
%
|
||
% Options ~left~ (~right~) put the line numbers on the left
|
||
% (right) margin. This works in all modes. ~left~ is the
|
||
% default.
|
||
|
||
\DeclareOption{left}{\leftlinenumbers*}
|
||
|
||
\DeclareOption{right}{\rightlinenumbers*}
|
||
|
||
% Option ~switch~ (~switch*~) puts the line numbers on the
|
||
% outer (inner) margin of the text. This requires running
|
||
% the pagewise mode, but we turn off the page offset
|
||
% subtraction, getting sort of running numbers again. The
|
||
% ~pagewise~ option may restore true pagewise mode later.
|
||
|
||
\DeclareOption{switch}{\setpagewiselinenumbers
|
||
\switchlinenumbers
|
||
\runningpagewiselinenumbers}
|
||
|
||
\DeclareOption{switch*}{\setpagewiselinenumbers
|
||
\switchlinenumbers*%
|
||
\runningpagewiselinenumbers}
|
||
|
||
% In twocolumn mode, we can switch the line numbers to
|
||
% the outer margin, and/or start with number 1 in each
|
||
% column. Margin switching is covered by the ~switch~
|
||
% options.
|
||
|
||
\DeclareOption{columnwise}{\setpagewiselinenumbers
|
||
\columnwiselinenumberstrue
|
||
\realpagewiselinenumbers}
|
||
|
||
% The options ~pagewise~ and ~running~ select the major
|
||
% linenumber mechanism. ~running~ line numbers refer to a real
|
||
% counter value, which can be reset for any paragraph,
|
||
% even getting multiple paragraphs on one page starting
|
||
% with line number one. ~pagewise~ line numbers get a
|
||
% unique hidden number within the document, but with the
|
||
% opportunity to establish the page on which they finally
|
||
% come to rest. This allows the subtraction of the page
|
||
% offset, getting the numbers starting with 1 on top of each
|
||
% page, and margin switching in twoside formats becomes
|
||
% possible. The default mode is ~running~.
|
||
%
|
||
% The order of declaration of the options is important here
|
||
% ~pagewise~ must come after ~switch~, to overide running
|
||
% pagewise mode. ~running~ comes last, to reset the running
|
||
% line number mode, e.g, after selecting margin switch mode
|
||
% for ~pagewise~ running. Once more, if you specify all
|
||
% three of the options ~[switch,pagewise,running]~, the
|
||
% result is almost nothing, but if you later say
|
||
% ~\pagewiselinenumbers~, you get margin switching, with
|
||
% real pagewise line numbers.
|
||
%
|
||
\DeclareOption{pagewise}{\setpagewiselinenumbers
|
||
\realpagewiselinenumbers}
|
||
|
||
\DeclareOption{running}{\setrunninglinenumbers}
|
||
|
||
% The option ~modulo~ causes only those linenumbers to be
|
||
% printed which are multiples of five.
|
||
|
||
\DeclareOption{modulo}{\modulolinenumbers\relax}
|
||
|
||
% Option ~modulo*~ modifies ~modulo~ in working like
|
||
% ~\modulolinenumbers*~---see section_\ref{s:UserCmds}.
|
||
|
||
\DeclareOption{modulo*}{\modulolinenumbers*\relax}
|
||
|
||
% The package option ~mathlines~ switches the behavior of
|
||
% the ~{linenomath}~ environment with its star-form.
|
||
% Without this option, the ~{linenomath}~ environment does
|
||
% not number the lines of the display, while the star-form
|
||
% does. With this option, its just the opposite.
|
||
%
|
||
%%% 1999-06-10: renamed ~displaymath~ to ~mathlines~.
|
||
|
||
\DeclareOption{mathlines}{\linenumberdisplaymath}
|
||
|
||
% ~displaymath~ now calls for wrappers of the standard
|
||
% \LaTeX\ display math environment. This was previously
|
||
% done by ~mlineno.sty~.
|
||
%
|
||
% (New v4.3) Option `displaymath' becomes default according
|
||
% to Erik \mbox{Luijten}'s suggestion. I was finally convinced
|
||
% of this as soon as I discovered how to avoid a spurious line
|
||
% number above ~\begin{linenomath}~ (subsection_\ref{ss:DM}).
|
||
% ~\endlinenomath~ provides ~\ignorespaces~, so what could go
|
||
% wrong now?
|
||
|
||
\DeclareOption{displaymath}{\PackageWarningNoLine{lineno}{%
|
||
Option [displaymath] is obsolete -- default now!}}
|
||
%%
|
||
%%\let\do@mlineno\relax
|
||
%%\DeclareOption{displaymath}{\let\do@mlineno\@empty}
|
||
% (/New v4.3)
|
||
%
|
||
% \subsection{%
|
||
% Compatibility with \texttt{hyperref} %% own subsec. v4.3.
|
||
% \unskip}
|
||
% The ~hyperref~ package, via ~nameref~, requires three more
|
||
% groups in the second argment of a ~\newlabel~. Well, why
|
||
% shouldn't it get them? (New v3.07) The presence of the
|
||
% ~nameref~ package is now detected automatically
|
||
% ~\AtBeginDocument~. (/New v3.07) (Fixed in v3.09) We try
|
||
% to be smart, and test ~\AtBeginDocument~ if the ~nameref~
|
||
% package is loaded, but ~hyperref~ postpones the loading of
|
||
% ~nameref~ too, so this is all in vain.
|
||
%
|
||
% (New v4.3) But we can also test at the first ~\linelabel~.
|
||
% Regarding the error-message for misplaced ~\linelabel~ from v4.11:
|
||
% previously, ~\linenumbers~ rendered ~\linelabel~ the genuine
|
||
% version of ~\linelabel~ from the start on. This doesn't work
|
||
% now, since ~\@LN@linelabel~ may change its meaning after the
|
||
% first ~\linenumbers~ and before a next one (if there is some).
|
||
% (/New v4.3)
|
||
|
||
\DeclareOption{hyperref}{\PackageWarningNoLine{lineno}{%
|
||
Option [hyperref] is obsolete.
|
||
\MessageBreak The hyperref package is detected automatically.}}
|
||
|
||
\AtBeginDocument{%
|
||
\@ifpackageloaded{nameref}{%
|
||
%%
|
||
% (New v4.3) ``Global'' is merely ``symbolic'' ~\AtBeginDoc...~.
|
||
% If ~nameref~ is not detected here, the next ~\@LN@linelabel~
|
||
% will do almost the same, then globally indeed.
|
||
%%
|
||
\gdef\@LN@ExtraLabelItems{{}{}{}}%
|
||
}{%
|
||
\global\let\@LN@@linelabel\@LN@linelabel
|
||
\gdef\@LN@linelabel{%
|
||
%%
|
||
% ~\@ifpackageloaded~ is ``preamble only'', its---very
|
||
% internal---preamble definition is replicated here:
|
||
%%
|
||
\expandafter
|
||
\ifx\csname ver@nameref.sty\endcsname\relax \else
|
||
\gdef\@LN@ExtraLabelItems{{}{}{}}%
|
||
\fi
|
||
%%
|
||
% Now aim at the ``usual'' behaviour:
|
||
%%
|
||
\global\let\@LN@linelabel\@LN@@linelabel
|
||
\global\let\@LN@@linelabel\relax
|
||
\@LN@linelabel
|
||
}%
|
||
}%
|
||
}
|
||
|
||
% (/New v4.3)
|
||
%
|
||
% (New v4.1)
|
||
% \subsection{%
|
||
% A note on calling so many options
|
||
% \unskip}
|
||
%
|
||
% The number of package options may stimulate worrying about how to
|
||
% \emph{enter} all the options that one would like to use---they may
|
||
% not fit into one line. Fortunately, you can safely break code lines
|
||
% after the commas separating the option names in the ~\usepackage~
|
||
% command (no comment marks needed).
|
||
%
|
||
% \subsection{%
|
||
% Execute options
|
||
% \unskip}\label{ss:ExOpt}
|
||
%
|
||
% We stop declaring options and execute the ones that are
|
||
% called by the user. (/New v4.1)
|
||
|
||
\ProcessOptions
|
||
|
||
% (New v4.1) Now we know whether ~edtable.sty~ is wanted
|
||
% and (if it is) with which options it is to be called.
|
||
|
||
\if@LN@edtable \RequirePackage{edtable}[2005/03/07] \fi
|
||
|
||
% (/New v4.1)
|
||
%
|
||
% \section{%
|
||
% Former package extensions
|
||
% \label{s:Xt}\unskip}
|
||
%
|
||
% The extensions in this section were previously supplied
|
||
% in separate ~.sty~ files.
|
||
%
|
||
% \subsection{%
|
||
% $display math$
|
||
% \unskip}\label{ss:display}
|
||
%% (New v4.32)
|
||
% (New v4.3) From now on, you no longer need to type
|
||
% the ~{linenomath}~ environment with the ~\[~, ~{equation}~,
|
||
% and ~{eqnarray}~ environments---and you no longer need to
|
||
% use the former package option ~displaymath~ for this feature.
|
||
% (/New v4.3)
|
||
%% (/New v4.32)
|
||
%
|
||
% The standard \LaTeX\ display math environments are
|
||
% wrapped in a ~{linenomath}~ environment.
|
||
%
|
||
% (New 3.05) The ~[fleqn]~ option of the standard
|
||
% \LaTeX\ classes defines the display math
|
||
% environments such that line numbers appear just
|
||
% fine. Thus, we need not do any tricks when
|
||
% ~[fleqn]~ is loaded, as indicated by presents of
|
||
% the ~\mathindent~ register. (/New 3.05)
|
||
%
|
||
% (New 3.05a) for ~{eqnarray}~s we rather keep the
|
||
% old trick. (/New 3.05a)
|
||
%
|
||
% (New 3.08) Wrap ~\[~ and ~\]~ into ~{linenomath}~,
|
||
% instead of ~{displaymath}~. Also save the definition
|
||
% of ~\equation~, instead of replicating the current
|
||
% \LaTeX\ definition. (/New 3.08)
|
||
|
||
%%\ifx\do@mlineno\@empty
|
||
\@ifundefined{mathindent}{
|
||
|
||
%% \AtBeginDocument{%
|
||
\let\LN@displaymath\[%
|
||
\let\LN@enddisplaymath\]%
|
||
\renewcommand\[{\begin{linenomath}\LN@displaymath}%
|
||
\renewcommand\]{\LN@enddisplaymath\end{linenomath}}%
|
||
%
|
||
\let\LN@equation\equation
|
||
\let\LN@endequation\endequation
|
||
\renewenvironment{equation}%
|
||
{\linenomath\LN@equation}%
|
||
{\LN@endequation\endlinenomath}%
|
||
%% }
|
||
|
||
}{}% \@ifundefined{mathindent} -- 3rd arg v4.2, was \par!
|
||
|
||
%%\AtBeginDocument{%
|
||
\let\LN@eqnarray\eqnarray
|
||
\let\LN@endeqnarray\endeqnarray
|
||
\renewenvironment{eqnarray}%
|
||
{\linenomath\LN@eqnarray}%
|
||
{\LN@endeqnarray\endlinenomath}%
|
||
%%}
|
||
|
||
%%\fi
|
||
|
||
% (UL) Indeed. The \LaTeX\ macros are saved for
|
||
% unnumbered mode, which is detected by ~\linenomath~.
|
||
% (/UL)
|
||
%
|
||
% \subsection{%
|
||
% Line numbers in internal vertical mode
|
||
% \unskip}\label{ss:ILN}
|
||
%
|
||
% The command ~\internallinenumbers~ adds line numbers in
|
||
% internal vertical mode, but with limitations: we assume
|
||
% fixed baseline skip.
|
||
%
|
||
% (v4.22) v3.10 provided a global (~\global\advance~)
|
||
% as well as a local version (star-form, using
|
||
% ~\c@internallinenumber~). ~\resetlinenumbers~ acted
|
||
% locally and was here used with the global version---save
|
||
% stack danger, \TeX book p._301---in v4.00 I
|
||
% disabled the global version therefore. Now I find that
|
||
% it is better to keep a global version, and the now global
|
||
% ~\resetlinenumbers~ is perfect for this. The global version
|
||
% allows continuing the ``internal'' numbers in the ensuing
|
||
% ``external'' text, and---unless reset by brackets
|
||
% argument---continuing the above series of line numbers.
|
||
% As with v3.10, the local version always starts with
|
||
% line number one. A new ~\@LN@iglobal~ steps ~\global~ly
|
||
% in the global version, otherwise it is ~\relax~.
|
||
% (I also remove all my stupid discussions as of v4.00.
|
||
% And I use ~\newcommand~.) (v4.22)
|
||
|
||
\let\@LN@iglobal\global % v4.22
|
||
|
||
\newcommand\internallinenumbers{\setrunninglinenumbers
|
||
\let\@@par\internallinenumberpar
|
||
\ifx\@par\@@@par\let\@par\internallinenumberpar\fi
|
||
\ifx\par\@@@par\let\par\internallinenumberpar\fi
|
||
\ifx\@par\linenumberpar\let\@par\internallinenumberpar\fi
|
||
\ifx\par\linenumberpar\let\par\internallinenumberpar\fi
|
||
\@ifnextchar[{\resetlinenumber}%]
|
||
{\@ifstar{\let\c@linenumber\c@internallinenumber
|
||
\let\@LN@iglobal\relax % v4.22
|
||
\c@linenumber\@ne}{}}%
|
||
}
|
||
|
||
\let\endinternallinenumbers\endlinenumbers
|
||
\@namedef{internallinenumbers*}{\internallinenumbers*}
|
||
\expandafter\let\csname endinternallinenumbers*\endcsname\endlinenumbers
|
||
|
||
\newcount\c@internallinenumber
|
||
\newcount\c@internallinenumbers
|
||
|
||
\newcommand\internallinenumberpar{%
|
||
\ifvmode\@@@par\else\ifinner\@@@par\else\@@@par
|
||
\begingroup
|
||
\c@internallinenumbers\prevgraf
|
||
\setbox\@tempboxa\hbox{\vbox{\makeinternalLinenumbers}}%
|
||
\dp\@tempboxa\prevdepth
|
||
\ht\@tempboxa\z@
|
||
\nobreak\vskip-\prevdepth
|
||
\nointerlineskip\box\@tempboxa
|
||
\endgroup
|
||
\fi\fi
|
||
}
|
||
|
||
\newcommand\makeinternalLinenumbers{%
|
||
\ifnum\c@internallinenumbers>\z@ % v4.2
|
||
\hb@xt@\z@{\makeLineNumber}%
|
||
\@LN@iglobal % v4.22
|
||
\advance\c@linenumber\@ne
|
||
\advance\c@internallinenumbers\m@ne
|
||
\expandafter\makeinternalLinenumbers\fi
|
||
}
|
||
% TODO v4.4+: star: line numbers right!? cf. lnocapt.sty
|
||
|
||
%
|
||
% \subsection{%
|
||
% Line number references with offset
|
||
% \unskip}
|
||
%
|
||
% This extension defines macros to refer to line
|
||
% numbers with an offset, e.g., to refer to a line
|
||
% which cannot be labeled directly (display math).
|
||
% This was formerly knows as ~rlineno.sty~.
|
||
%
|
||
% To refer to a pagewise line number with offset:
|
||
% \begin{quote}
|
||
% ~\linerefp[~<OFFSET>~]{~<LABEL>~}~
|
||
% \end{quote}
|
||
% To refer to a running line number with offset:
|
||
% \begin{quote}
|
||
% ~\linerefr[~<OFFSET>~]{~<LABEL>~}~
|
||
% \end{quote}
|
||
% To refer to a line number labeled in the same mode as currently
|
||
% selected:
|
||
% \begin{quote}
|
||
% ~\lineref[~<OFFSET>~]{~<LABEL>~}~
|
||
% \end{quote}
|
||
|
||
\newcommand\lineref{%
|
||
\ifx\c@linenumber\c@runninglinenumber
|
||
\expandafter\linerefr
|
||
\else
|
||
\expandafter\linerefp
|
||
\fi
|
||
}
|
||
|
||
\newcommand*\linerefp[2][\z@]{{%
|
||
\let\@thelinenumber\thelinenumber
|
||
\edef\thelinenumber{\advance\c@linenumber#1\relax
|
||
\noexpand\@thelinenumber}%
|
||
\ref{#2}%
|
||
}}
|
||
|
||
% This goes deep into \LaTeX's internals.
|
||
|
||
\newcommand*\linerefr[2][\z@]{{%
|
||
\def\@@linerefadd{\advance\c@linenumber#1}%
|
||
\expandafter\@setref\csname r@#2\endcsname
|
||
\@linerefadd{#2}%
|
||
}}
|
||
|
||
\newcommand*\@linerefadd[2]{\c@linenumber=#1\@@linerefadd\relax
|
||
\thelinenumber}
|
||
|
||
%% TODO v4.4+: Insert `LN' in internal command names?
|
||
%
|
||
% \subsection{%
|
||
% Numbered quotation environments
|
||
% \unskip}
|
||
%
|
||
% The ~{numquote}~ and ~{numquotation}~
|
||
% environments are like ~{quote}~ and
|
||
% ~{quotation}~, except there will be line
|
||
% numbers.
|
||
%
|
||
% An optional argument gives the number to count
|
||
% from. A star ~*~ (inside or outside the closing
|
||
% ~}~) prevent the reset of the line numbers.
|
||
% Default is to count from one.
|
||
%
|
||
% (v4.22: A local version using ~\c@internallinenumber~
|
||
% might be useful, see subsection_\ref{ss:ILN}.) %% TODO v4.4+
|
||
|
||
\newcommand\quotelinenumbers
|
||
{\@ifstar\linenumbers{\@ifnextchar[\linenumbers{\linenumbers*}}}
|
||
|
||
\newdimen\quotelinenumbersep
|
||
\quotelinenumbersep=\linenumbersep
|
||
\let\quotelinenumberfont\linenumberfont
|
||
|
||
\newcommand\numquotelist
|
||
{\leftlinenumbers
|
||
\linenumbersep\quotelinenumbersep
|
||
\let\linenumberfont\quotelinenumberfont
|
||
\addtolength{\linenumbersep}{-\@totalleftmargin}%
|
||
\quotelinenumbers
|
||
}
|
||
|
||
\newenvironment{numquote} {\quote\numquotelist}{\endquote}
|
||
\newenvironment{numquotation} {\quotation\numquotelist}{\endquotation}
|
||
\newenvironment{numquote*} {\quote\numquotelist*}{\endquote}
|
||
\newenvironment{numquotation*}{\quotation\numquotelist*}{\endquotation}
|
||
|
||
%
|
||
% \subsection{%
|
||
% Frame around a paragraph
|
||
% \unskip}
|
||
%
|
||
% The ~{bframe}~ environment draws a frame around
|
||
% some text, across page breaks, if necessary.
|
||
%
|
||
% This works only for plain text paragraphs,
|
||
% without special height lines. All lines must be
|
||
% ~\baselineskip~ apart, no display math.
|
||
|
||
\newenvironment{bframe}
|
||
{\par
|
||
\@tempdima\textwidth
|
||
\advance\@tempdima 2\bframesep
|
||
\setbox\bframebox\hb@xt@\textwidth{%
|
||
\hskip-\bframesep
|
||
\vrule\@width\bframerule\@height\baselineskip\@depth\bframesep
|
||
\advance\@tempdima-2\bframerule
|
||
\hskip\@tempdima
|
||
\vrule\@width\bframerule\@height\baselineskip\@depth\bframesep
|
||
\hskip-\bframesep
|
||
}%
|
||
\hbox{\hskip-\bframesep
|
||
\vrule\@width\@tempdima\@height\bframerule\@depth\z@}%
|
||
\nointerlineskip
|
||
\copy\bframebox
|
||
\nobreak
|
||
\kern-\baselineskip
|
||
\runninglinenumbers
|
||
\def\makeLineNumber{\copy\bframebox\hss}%
|
||
}
|
||
{\par
|
||
\kern-\prevdepth
|
||
\kern\bframesep
|
||
\nointerlineskip
|
||
\@tempdima\textwidth
|
||
\advance\@tempdima 2\bframesep
|
||
\hbox{\hskip-\bframesep
|
||
\vrule\@width\@tempdima\@height\bframerule\@depth\z@}%
|
||
}
|
||
|
||
\newdimen\bframerule
|
||
\bframerule=\fboxrule
|
||
|
||
\newdimen\bframesep
|
||
\bframesep=\fboxsep
|
||
|
||
\newbox\bframebox
|
||
|
||
%
|
||
%
|
||
% \section{%
|
||
% Move \scs{vadjust} items (New v4.00)
|
||
% \unskip}\label{s:MVadj}
|
||
%
|
||
% This section completes reviving ~\pagebreak~, ~\nopagebreak~,
|
||
% ~\vspace~, and the star and optional form of ~\\~. This was
|
||
% started in section_\ref{ss:output} and resumed in
|
||
% section_\ref{ss:MLN} and subsection_\ref{ss:calls}.
|
||
% The problem was explained in section_\ref{ss:output}:
|
||
% ~\vadjust~ items come out at a bad position, and the
|
||
% \LaTeX\ commands named before work with ~\vadjust~ indeed.
|
||
% Our solution was sketched there as well.
|
||
%
|
||
% According to the caveat in subsection_\ref{ss:OnOff} concerning
|
||
% ~\ifLineNumbers~, the \LaTeX\ commands enumerated may go
|
||
% wrong if you switch line numbering inside or at the end of
|
||
% a paragraph.
|
||
%% %% TODO v4.4+
|
||
%
|
||
% \subsection{%
|
||
% Redefining \scs{vadjust}
|
||
% \unskip}\label{ss:PVadj}
|
||
%
|
||
% ~\vadjust~ will temporarily be changed into the following
|
||
% command.
|
||
|
||
\def\PostponeVadjust#1{%
|
||
\global\let\vadjust\@LN@@vadjust
|
||
%%
|
||
% This undoes a ~\global\let\vadjust\PostponeVadjust~ which will
|
||
% start each of the refined \LaTeX\ commands. The ~\global~s
|
||
% are most probably superfluous. They might be useful should one
|
||
% ~\vadjust~ appear in a group starting after the change of
|
||
% ~\vadjust~ into ~\PostponeVadjust~.
|
||
% (UL) Even the undoing may be superfluous, cf._discussion
|
||
% in section_\ref{ss:ReDef} below. (UL)
|
||
%%
|
||
\vadjust{\penalty-\@Mppvacodepen}%
|
||
\g@addto@macro\@LN@vadjustlist{#1\@lt}%
|
||
}
|
||
\let\@LN@@vadjust\vadjust
|
||
\global\let\@LN@vadjustlist\@empty
|
||
\global\let\@LN@do@vadjusts\relax
|
||
|
||
% These ~\global~s are just to remind that
|
||
% all the changes of the strings after ~\let~ should be
|
||
% ~\global~ (\TeX book p._301). ~\@LN@vadjustlist~ collects
|
||
% the ~\vadjust~ items of a paragraph. ~\PassVadjustList~
|
||
% tears one ~\vadjust~ item for the current line out of
|
||
% ~\@LN@vadjustlist~ and puts it into ~\@LN@do@vadjusts~.
|
||
% The latter is encountered each line in ~\MakeLineNo~
|
||
% (section_\ref{ss:MLN}), while those \LaTeX\ ~\vadjust~
|
||
% commands will come rather rarely. So I decided that
|
||
% ~\@LN@do@vadjust~ is ~\relax~ until a ~\vadjust~ item
|
||
% is waiting. In the latter case, ~\@LN@do@vadjusts~
|
||
% is turned into a list macro which resets itself to
|
||
% ~\relax~ when the other contents have been placed in
|
||
% the vertical list.---~\PassVadjustList~ is invoked by
|
||
% the output routine (section_\ref{ss:output}), so the
|
||
% ~\box255~ must be put back.
|
||
|
||
\def\PassVadjustList{%
|
||
\unvbox\@cclv
|
||
\expandafter \@LN@xnext \@LN@vadjustlist \@@
|
||
\@tempa \@LN@vadjustlist
|
||
\ifx\@LN@do@vadjusts\relax
|
||
\gdef\@LN@do@vadjusts{\global\let\@LN@do@vadjusts\relax}%
|
||
\fi
|
||
\expandafter \g@addto@macro \expandafter \@LN@do@vadjusts
|
||
\expandafter {\@tempa}%
|
||
}
|
||
|
||
%
|
||
% \subsection{%
|
||
% Redefining the \LaTeX\ commands
|
||
% \unskip}\label{ss:ReDef}
|
||
%
|
||
% Now we change ~\pagebreak~ etc.\
|
||
% so that they use ~\PostponeVadjust~ in place of ~\vadjust~.
|
||
% We try to do this as independently as possible of the
|
||
% implementation of the \LaTeX\ commands to be redefined.
|
||
% Therefore, we don't just copy macro definition code from any
|
||
% single implementation (say, latest \LaTeX) and insert our
|
||
% changes, but attach a conditional
|
||
% ~\global\let\vadjust\PostponeVadjust~
|
||
% to their left ends in a way which should work rather
|
||
% independantly of their actual code.
|
||
% However, ~\vadjust~ should be the primitive again after
|
||
% execution of the command. So the ~\global\let...~ may be used
|
||
% only if it's guaranteed that a ~\vadjust~ is near.---(UL)
|
||
% Sure? In line numbering mode, probably each ~\vadjust~
|
||
% coming from a \LaTeX\ command should be ~\PostponeVadjust~.
|
||
% ~\marginpar~s and floats seem to be the only cases which
|
||
% are not explicitly dealt with in the present section.
|
||
% This would be a way to avoid ~\@LN@nobreaktrue~!
|
||
% Of course, the ~\vadjust~s that the present package uses
|
||
% then must be replaced by ~\@LN@@vadjust~.---Maybe
|
||
% next time. (/UL)
|
||
%% %% TODO v4.4+
|
||
%
|
||
% The next command and something else will be added to the
|
||
% \LaTeX\ commands we are concerned with here.
|
||
|
||
\DeclareRobustCommand\@LN@changevadjust{%
|
||
\ifvmode\else\ifinner\else
|
||
\global\let\vadjust\PostponeVadjust
|
||
\fi\fi
|
||
}
|
||
|
||
% (UL) What about math mode? Math display? Warn? (/UL)
|
||
%% %% TODO v4.4+
|
||
%
|
||
% ~\@tempa~ will now become a two place macro which adds first
|
||
% argument (single token), enclosed by ~\ifLineNumbers~\,\dots
|
||
% ~\fi~ to the left of second argument. As long as we need it,
|
||
% we can't use the star form of ~\DeclareRobustCommand~ or
|
||
% the like, because AMS-\LaTeX\ uses ~\@tempa~ for ~\@ifstar~.
|
||
% (New v4.41) And for the same reason, that ~\CheckCommand*~
|
||
% had to be raised! (/New v4.41)
|
||
|
||
\CheckCommand*\@parboxrestore{\@arrayparboxrestore\let\\\@normalcr}
|
||
|
||
\def\@tempa#1#2{%
|
||
\expandafter \def \expandafter#2\expandafter{\expandafter
|
||
\ifLineNumbers\expandafter#1\expandafter\fi#2}%
|
||
}
|
||
|
||
% (UL) This ~\ifLineNumber~ can be fooled by
|
||
% ~\linenumbers~ ahead etc. It might be better to place
|
||
% a signal penalty in any case and let the output routine
|
||
% decide what to do.
|
||
%%
|
||
%% And when this has been done, remove warnings about this.
|
||
% (/UL)
|
||
%
|
||
% We use the occasion to switch off linenumbers where they
|
||
% don't work anyway and where we don't want them,
|
||
% especially in footnotes:
|
||
|
||
\@tempa\nolinenumbers\@arrayparboxrestore
|
||
|
||
% We hope this suffices $\dots$ let's check one thing
|
||
% at least: [(New v4.41) see ~\CheckCommand~ above (/New v4.41)]
|
||
%
|
||
% Now for the main theme of the section.
|
||
% The next lines assume that ~\vspace~, ~\pagebreak~, and
|
||
% ~\nopagebreak~ use ~\vadjust~ whenever they occur outside
|
||
% vertical mode; moreover, that they don't directly read
|
||
% an argument. Indeed ~\pagebreak~ and ~\nopagebreak~ first
|
||
% call something which tests for a left bracket ahead,
|
||
% while ~\vspace~ first tests for a star.
|
||
|
||
\@tempa\@LN@changevadjust\vspace
|
||
\@tempa\@LN@changevadjust\pagebreak
|
||
\@tempa\@LN@changevadjust\nopagebreak
|
||
|
||
% ~\\~, however, uses ~\vadjust~ only in star or optional form.
|
||
% We relax independency of implementation in assuming
|
||
% that ~\@normalcr~ is the fragile version of ~\\~
|
||
% (and we use ~\@ifstar~!).
|
||
%%
|
||
%% \@ifstar reimplemented 1995/10/16, but seems to be much older.
|
||
%% TODO v4.4+:
|
||
%% \def\@LN@cr{%
|
||
%% \@ifnextchar*{\@LN@changevadjust\@normalcr}%
|
||
%% {\@ifnextchar[{\@LN@changevadjust\@normalcr}\@normalcr}%
|
||
%% }
|
||
%% ---same number of tokens, expansion step less.
|
||
%%
|
||
% (Using a copy of ~\\~ would be safer, but an ugly repetition
|
||
% of ~\protect~.)
|
||
%% %% TODO v4.4+
|
||
|
||
\DeclareRobustCommand\\{%
|
||
\ifLineNumbers
|
||
\expandafter \@LN@cr
|
||
\else
|
||
\expandafter \@normalcr
|
||
\fi
|
||
}
|
||
\def\@LN@cr{%
|
||
\@ifstar{\@LN@changevadjust\@normalcr*}%
|
||
{\@ifnextchar[{\@LN@changevadjust\@normalcr}\@normalcr}%
|
||
}
|
||
|
||
% Moreover we hope that ~\newline~ never leads to a ~\vadjust~,
|
||
% although names of some commands invoked by ~\\~ contain
|
||
% ~newline~. At last, this seems to have been OK since 1989 or
|
||
% even earlier.
|
||
%
|
||
% \modulolinenumbers[1]
|
||
% \firstlinenumber{0}
|
||
% Let's have a few tests.\vspace*{.5\baselineskip}
|
||
% Testing ~\pagebreak~ and ~\nopagebreak~ would be too expensive
|
||
% here, but---oops!---we have just experienced a successful
|
||
% ~\vspace*{.5\baselineskip}~. A
|
||
% ~\\*[.5\baselineskip]~\\*[.5\baselineskip] may look even more
|
||
% drastical, but this time we are happy about it. Note that the
|
||
% line numbers have moved with the lines. Without our changes,
|
||
% one line number\vadjust{\kern.5\baselineskip} would have
|
||
% ``anticipated'' the move of the next line, just as you can
|
||
% observe it now.
|
||
% (/New v4.00)
|
||
%
|
||
% \switchlinenumbers
|
||
%
|
||
% \subsection{%
|
||
% Reminder on obsoleteness
|
||
% \unskip}
|
||
%
|
||
% (New v4.1) We have completed inclusion of the earlier
|
||
% extension packages ~linenox0.sty~, ~linenox1.sty~, and
|
||
% ~lnopatch.sty~. If one of them is loaded, though,
|
||
% we produce an error message before something weird happens.
|
||
% We avoid ~\newif~ because the switchings occur so rarely.
|
||
|
||
\AtBeginDocument{%
|
||
\let\if@LN@obsolete\iffalse
|
||
\@ifpackageloaded{linenox0}{\let\if@LN@obsolete\iftrue}\relax
|
||
\@ifpackageloaded{linenox1}{\let\if@LN@obsolete\iftrue}\relax
|
||
\@ifpackageloaded{lnopatch}{\let\if@LN@obsolete\iftrue}\relax
|
||
\if@LN@obsolete
|
||
\PackageError{lineno}{Obsolete extension package(s)}{%
|
||
With lineno.sty version 4.00 or later,\MessageBreak
|
||
linenox0/linenox1/lnopatch.sty must no longer be loaded.}%
|
||
\fi
|
||
}
|
||
|
||
%
|
||
% \modulolinenumbers[1]
|
||
% \section{%
|
||
% The final touch
|
||
% \unskip}
|
||
%
|
||
% There is one deadcycle for each line number.
|
||
|
||
\advance\maxdeadcycles 100
|
||
|
||
\endinput
|
||
|
||
%
|
||
% \section{%
|
||
% The user commands
|
||
% \unskip}\label{s:UserCmds}
|
||
%
|
||
% The user commands to turn on and off line numbering
|
||
% are
|
||
% \begin{description}\item
|
||
% [|\linenumbers] \ \par
|
||
% Turn on line numbering in the current mode.
|
||
%
|
||
% \item
|
||
% [|\linenumbers*] \ \par$\qquad$
|
||
% and reset the line number to 1.
|
||
% \def\NL{<number>]}\item
|
||
%% %% Boldface italic occurs here, which is evil. (UL)
|
||
% [|\linenumbers[\NL] \ \par$\qquad$
|
||
% and start with <number>.
|
||
% \item
|
||
% [|\nolinenumbers] \ \par
|
||
% Turn off line numbering.
|
||
% \item
|
||
% [|\runninglinenumbers*[\NL] \ \par
|
||
% Turn on ~running~ line numbers, with the same optional
|
||
% arguments as ~\linenumbers~. The numbers are running
|
||
% through the text over pagebreaks. When you turn
|
||
% numbering off and on again, the numbers will continue,
|
||
% except, of cause, if you ask to reset or preset the
|
||
% counter.
|
||
% \item
|
||
% [|\pagewiselinenumbers] \ \par
|
||
% Turn on ~pagewise~ line numbers. The lines on each
|
||
% page are numbered beginning with one at the first
|
||
% ~pagewise~ numbered line.
|
||
% \item
|
||
% [|\resetlinenumber[\NL] \ \par
|
||
% Reset ~[~Set~]~ the line number to 1
|
||
% ~[~<number>~]~.
|
||
% \item
|
||
% [|\setrunninglinenumbers] \ \par
|
||
% Switch to ~running~ line number mode. Do \emph{not}
|
||
% turn it on or off.
|
||
% \item
|
||
% [|\setpagewiselinenumbers] \ \par
|
||
% Switch to ~pagewise~ line number mode. Do \emph{not}
|
||
% turn it on or off.
|
||
% \item
|
||
% [|\switchlinenumbers*] \ \par
|
||
% Causes margin switching in pagewise modes. With the
|
||
% star, put the line numbers on the inner margin.
|
||
% \item
|
||
% [|\leftlinenumbers*] \ \par
|
||
% \item
|
||
% [|\rightlinenumbers*] \ \par
|
||
% Set the line numbers in the left/right margin. With the
|
||
% star this works for both modes of operation, without
|
||
% the star only for the currently selected mode.
|
||
% \item
|
||
% [|\runningpagewiselinenumbers] \ \par
|
||
% When using the pagewise line number mode, do not
|
||
% subtract the page offset. This results in running
|
||
% line numbers again, but with the possibility to switch
|
||
% margins. Be careful when doing line number
|
||
% referencing, this mode status must be the same while
|
||
% setting the paragraph and during references.
|
||
% \item
|
||
% [|\realpagewiselinenumbers] \ \par
|
||
% Reverses the effect of ~\runningpagewiselinenumbers~.
|
||
% \item
|
||
% [|\modulolinenumbers[\NL] \ \par
|
||
% Give a number only to lines which are multiples of
|
||
% ~[~<number>~]~. If <number> is not specified, the
|
||
% current value in the counter ~linenumbermodulo~ is
|
||
% retained. <number>=1 turns this off without changing
|
||
% ~linenumbermodulo~. The counter is initialized to 5.
|
||
%%
|
||
%% %% TODO v4.4+: `counter', he says. Cf._above.
|
||
%%
|
||
%% (New v4.31)
|
||
% \item
|
||
% [|\modulolinenumbers*[\NL] \ \par
|
||
% Like ~\modulolinenumbers~, the only difference being
|
||
% that the first line number after a ~\linenumbers~
|
||
% (or ~\runninglinenumbers~, ~\pagewiselinenumbers~,
|
||
% ~\quotelinenumbers~) is printed regardless of the
|
||
% modulo---yet `1' is printed only after (or \dots)
|
||
% ~\firstlinenumber{1}~.
|
||
% This also applies to the first line of a
|
||
% ~{linenumbers}~ or respective environment.
|
||
% See subsection_\ref{ss:Mod} for another explanation.
|
||
% The behaviour may be unsatisfactory with pagewise
|
||
% line-numbering.
|
||
%% (/New v4.31)
|
||
%% (New v4.00)
|
||
% \item
|
||
% [|\firstlinenumber] \ \par
|
||
% ~\firstlinenumber{~<filino>~}~ brings about that
|
||
% (after it) line numbers less than <filino> do
|
||
% \emph{not} appear in the margin. Moreover, with
|
||
% ~\modulolinenumbers[~<number>~]~, just the line
|
||
% numbers which are <filino> plus a multiple of
|
||
% <number> are printed.---If you had
|
||
% ~\firstlinenumber{~<pos>~}~ with some $\mbox{<pos>}>0$
|
||
% and want to switch to printing multiples of, e.g.,
|
||
% 4, you best do ~\modulolinenumbers[4]~ and
|
||
% ~\firstlinenumber{0}~. (See subsection_\ref{ss:Mod}
|
||
% for technical details.)
|
||
%% (/New v4.00)
|
||
% \item
|
||
% [|\linenumberdisplaymath] \ \par
|
||
% Number the lines of a display math in a ~{linenomath}~
|
||
% environment, but do not in a ~{linenomath*}~
|
||
% environment. This is used by the package option
|
||
% ~[mathlines]~.
|
||
% \item
|
||
% [|\nolinenumberdisplaymath] \ \par
|
||
% Do not Number the lines of a display math in a
|
||
% ~{linenomath}~ environment, but do in a
|
||
% ~{linenomath*}~ environment. This is the default.
|
||
% \item
|
||
% [|\linelabel] \ \par
|
||
% Set a ~\linelabel{~<foo>~}~ to the line number where
|
||
% this commands is in. Refer to it with the \LaTeX\
|
||
% referencing commands ~\ref{~<foo>~}~ and
|
||
% ~\pageref{~<foo>~}~.
|
||
% \end{description}
|
||
% The commands can be used globally, locally within groups
|
||
% or as environments. It is important to know that they
|
||
%%
|
||
%% %% TODO: \linelabel? others?
|
||
%%
|
||
% take action only when the ~\par~ is executed. The
|
||
%%
|
||
%% %% TODO: sure? ~\modulo...~, e.g.? well, in a sense ...
|
||
%%
|
||
% ~\end{~<mode>~linenumbers}~ commands provide a ~\par~.
|
||
% Examples:
|
||
% \begin{verse}
|
||
% ~{\linenumbers~ <text> ~\par}~ \\
|
||
% \ \\
|
||
% ~\begin{linenumbers}~ \\
|
||
% <text> \\
|
||
% ~\end{linenumbers}~ \\
|
||
% \ \\
|
||
% <paragraph> ~{\linenumbers\par}~ \\
|
||
% \ \\
|
||
% ~\linenumbers~ \\
|
||
% <text> ~\par~ \\
|
||
% ~\nolinenumbers~ \\
|
||
% \ \\
|
||
% ~\linenumbers~ \\
|
||
% <paragraph> ~{\nolinenumbers\par}~ \\
|
||
% \end{verse}
|
||
% (New v4.00)
|
||
% However, the examples containing <paragraph> show what you
|
||
% should \emph{not} do, at least if you use ~\pagebreak~,
|
||
% ~\nopagebreak~, ~\vspace~, ~\\*~ or
|
||
% ~\\[~<space>~]~---cf._section_\ref{s:MVadj}.
|
||
%
|
||
% The same care should be applied to the ``wizard'' devices
|
||
% ~\ifLineNumbers~ (subsection_\ref{ss:OnOff}) and
|
||
% ~\PostponeVadjust~ (section_\ref{ss:PVadj}).
|
||
% (/New v4.00)
|
||
%
|
||
% (New v4.11) Oh, and the commands and environments of
|
||
% section_{s:Xt} are missing. Sorry, I am in a hurry now.
|
||
% May be next time.% %% TODO v4.4+
|
||
% ---And the environments ~{linenomath}~ and ~{linenomath*}~should
|
||
% get an own paragraph. In short, each math display, equation,
|
||
% or ~{eqnarray}~ should be ``wrapped'' in one of ~{linenomath}~
|
||
% and ~{linenomath*}~.
|
||
%
|
||
% \subsection{%
|
||
% Customization hooks
|
||
% \unskip}
|
||
%
|
||
% There are several hooks to customize the appearance of the
|
||
% line numbers, and some low level hooks for special
|
||
% effects.
|
||
% \begin{description}\item
|
||
% [|\thelinenumber] \ \par
|
||
% This macro should give the representation of the line
|
||
% number in the \LaTeX-counter ~linenumber~. The
|
||
% default is provided by \LaTeX: \par$\qquad$
|
||
% ~\arabic{linenumber}~
|
||
% \item
|
||
% [|\makeLineNumberLeft] \ \par
|
||
% This macro is used to attach a line number to the left
|
||
% of the text page. This macro should fill an ~\hbox to 0pt~
|
||
% which will be placed at the left margin of the
|
||
% page, with the reference point aligned to the line to
|
||
% which it should give a number. Please use the macro
|
||
% ~\LineNumber~ to refer to the line number.
|
||
%
|
||
% The default definition is \par$\qquad$
|
||
% ~\hss\linenumberfont\LineNumber\hskip\linenumbersep~
|
||
% \item
|
||
% [|\makeLineNumberRight] \ \par
|
||
% Like ~\makeLineNumberLeft~, but for line numbers on
|
||
% the right margin.
|
||
%
|
||
% The default definition is \par$\qquad$
|
||
% ~\linenumberfont\hskip\linenumbersep\hskip\textwidth~ \par$\qquad$
|
||
% ~\hbox to\linenumberwidth{\hss\LineNumber}\hss~
|
||
% \item
|
||
% [|\linenumberfont] \ \par
|
||
% This macro is initialized to \par$\qquad$
|
||
% ~\normalfont\tiny\sffamily~
|
||
% \item
|
||
% [|\linenumbersep] \ \par
|
||
% This dimension register sets the separation of the
|
||
% linenumber to the text. Default value is ~10pt~.
|
||
% \item
|
||
% [|\linenumberwidth] \ \par
|
||
% This dimension register sets the width of the line
|
||
% number box on the right margin. The distance of the
|
||
% right edge of the text to the right edge of the line
|
||
% number is ~\linenumbersep~ + ~\linenumberwidth~. The
|
||
% default value is ~10pt~.
|
||
% \item
|
||
% [|\theLineNumber] (for wizards) \ \par
|
||
% This macro is called for printing a ~\newlabel~ entry
|
||
% to the aux-file. Its definition depends on the mode.
|
||
% For running line numbers it's just ~\thelinenumber~,
|
||
% while in pagewise mode, the page offset subtraction
|
||
% is done in here.
|
||
% \item
|
||
% [|\makeLineNumber] (for wizards) \ \par
|
||
% This macro produces the line numbers. The definition
|
||
% depends on the mode. In the running line numbers
|
||
% mode it just expands ~\makeLineNumberLeft~.
|
||
% \item
|
||
% [|\LineNumber] (for wizards) \ \par
|
||
% This macro is called by ~\makeLineNumber~ to typeset
|
||
% the line number. This hook is changed by the modulo
|
||
% mechanism
|
||
%% %%%.
|
||
% and by ~\firstlinenumber~.
|
||
%% %% New v4.00
|
||
% \end{description}
|
||
%%
|
||
%% TODO: \stepLineNumber---another wizard command!?
|
||
%% Not sure, may be retreated.
|
||
% \end{document}%D
|
||
------------------------------------------------------------------------------
|
||
%SSTOPP
|
||
%% TODO v4.4+: Check for unwanted comment marks in new comments
|
||
%% (resulting from manual aligning): search `New v4.2'
|
||
%% and/or ` % '!
|
||
%% TODO v4.4+: Check for missing comment marks where a paragraph
|
||
%% should end/start. Also to prevent empty "code" lines.
|
||
%% Especially, new comments at section ends must be
|
||
%% followed by comment mark lines.
|
||
%% And prevent ~\par~s from blank lines in definitions!
|
||
%% See `visual space' above.
|
||
%% For proper appearance in lineno.tex, note that a comment
|
||
%% in a final code line changes behaviour.
|
||
%% TODO v4.4+: Require README for redistribution?
|
||
%% TODO v4.4+: Since discussions of code have increased so much, it
|
||
%% would be appropriate not to give to this file
|
||
%% extension `.sty' (e.g., `dty'!??). ?? Is quickly read though!
|
||
%% A .sty extraction may be possible even if the present
|
||
%% file is neither a .doc nor a .dtx. (!???)
|
||
%% Use awk line below (etc.) for .doc at least; + .ins or so.
|
||
%% ^ must not be caps! To escape awk.
|
||
%% TODO v4.4+: Underfull lines!? (due to long code quotations)
|
||
%% TODO v4.4+: Sometimes paragraph indents may be appropriate.
|
||
%% TODO Swap first line (`\iffalse...') with corresponding below.
|
||
Or do *not* swap, maybe nawk is more reliable.
|
||
%% TODO v4.4+: Ponder Stephan's mail from 2004/09/02.
|
||
%% TODO v4.4+:
|
||
%% use \@ET@makeLineNumber.
|
||
%% plus almost all `(UL)'
|
||
%% plus lots of bad boxes messages
|
||
%% change v4.3 TODOs when postponed
|
||
%% remove {old} environments.
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
# awk command lines for v4.00, mixed with former ones:
|
||
|
||
echo "Don't bother about unknown 'iffalse'." # SHELL1
|
||
nawk '/A[W]K/' lineno.sty | nawk -f - lineno.sty >lineno.tex; # SHELL1
|
||
latex lineno; latex lineno; latex lineno; latex lineno; # SHELL1
|
||
|
||
BEGIN{DOC=-1; # AWK DOC A W K
|
||
BEGINCODE = "\\begin{code}\\begin{verbatim}"; # AWK
|
||
ENDCODE = "\\end{verbatim}\n\\end{code}"; } # AWK
|
||
BEGINCODE = "% \\begin{macrocode}"; # DOC A W K
|
||
ENDCODE = "% \\end{macrocode}"; } # DOC A W K
|
||
/^[ \t]*$/ { ECNT++; next; } # AWK DOC A W K
|
||
/\\documentclass/{ sub("article","ltxdoc") } # DOC A W K
|
||
/%D$/ { sub("^%* *",""); sub("%D$",""); # DOC A W K
|
||
print > "lineno.drv"; next } # DOC A W K
|
||
/^%%/ { next; } # AWK DOC A W K
|
||
/^%/ { if (!DOC) { print ENDCODE; } # AWK DOC A W K
|
||
DOC=1; ECNT=0; # AWK DOC A W K
|
||
sub("^% *",""); # AWK
|
||
sub("^% *","% "); # DOC A W K
|
||
print; next; } # AWK DOC A W K
|
||
/%VERSION/ { sub("%VERSION",""); print; next; } # AWK
|
||
/%SSTOPP/ { exit } # AWK
|
||
DOC<0 { next } # AWK DOC A W K
|
||
/^-+-$/ { if (!DOC) print ENDCODE; exit } # AWK DOC A W K
|
||
{ if (DOC) { ECNT=DOC=0; print BEGINCODE; } # AWK DOC A W K
|
||
while (ECNT>0) { print " "; ECNT--; } # AWK DOC A W K
|
||
print $0; } # AWK DOC A W K
|
||
|
||
# New v4.00, UL: know nothing about awk; found present solution
|
||
# in hours of trial and error.
|
||
|
||
% Earlier (should be inhibited by %SSTOPP above and otherwise):
|
||
echo "expect errors for unknown commands 'iffalse' and 'fi'";# SHELL0 SHELL#1
|
||
awk '/A[W]K/' lineno.sty | awk -f - lineno.sty >lineno.tex; # SHELL0
|
||
latex lineno; latex lineno; latex lineno; latex lineno; # SHELL0
|
||
nawk '/A[W]K/' lineno4.sty | nawk -f - lineno4.sty >lineno4.tex; # SHELL#1
|
||
latex lineno4; latex lineno4; latex lineno4; latex lineno4; # SHELL#1
|
||
|
||
awk '/DOC A [W] K/' lineno.sty | awk -f - lineno.sty >lineno.doc; # DOC SH
|
||
|
||
BEGIN{DOC=-1; # A#WK DOC A W K
|
||
BEGINCODE = "\\begin{code}\\begin{verbatim}"; # A#WK
|
||
ENDCODE = "\\end{verbatim}\n\\end{code}"; } # A#WK
|
||
BEGINCODE = "% \\begin{macrocode}"; # DOC A W K
|
||
ENDCODE = "% \\end{macrocode}"; } # DOC A W K
|
||
/^[ \t]*$/ { ECNT++; next; } # A#WK DOC A W K
|
||
/\\documentclass/{ sub("article","ltxdoc") } # DOC A W K
|
||
/%D$/ { sub("^%* *",""); sub("%D$",""); # DOC A W K
|
||
print > "lineno.drv"; next } # DOC A W K
|
||
/^%%/ { next; } # A#WK DOC A W K
|
||
/^%/ { if (!DOC) { print ENDCODE; } # A#WK DOC A W K
|
||
DOC=1; ECNT=0; # A#WK DOC A W K
|
||
sub("^% *",""); # A#WK
|
||
sub("^% *","% "); # DOC A W K
|
||
print; next; } # A#WK DOC A W K
|
||
DOC<0 { next } # A#WK DOC A W K
|
||
/^-+-$/ { if (!DOC) print ENDCODE; exit } # A#WK DOC A W K
|
||
{ if (DOC) { ECNT=DOC=0; print BEGINCODE; } # A#WK DOC A W K
|
||
while (ECNT>0) { print " "; ECNT--; } # A#WK DOC A W K
|
||
print $0; } # A#WK DOC A W K
|
||
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
If you are looking here because of the two top lines of the file:
|
||
|
||
A .tex documentation of this macro file can be obtained by
|
||
|
||
sh lineno.sty
|
||
|
||
under UNIX.--You may find this hint little helpful. One
|
||
reason may be that the awk versions to which you have access
|
||
don't work suitably. Another reason may be that you don't have
|
||
access to UNIX (in some sense). However, a .tex, .dvi, or .pdf
|
||
version of such a documentation should be available from CTAN,
|
||
in the same folder as the present file. When we typed this, that
|
||
folder was /macros/latex/contrib/lineno. If this has changed in
|
||
the meantime, a CTAN search should lead you to a folder
|
||
containing such a documentation. Or you may get help from one of
|
||
the e-mail addresses above.
|
||
|
||
|