123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518 |
- \iffalse; awk '/S[H]ELL/' lineno.sty|sh;exit;\fi
- %%% To pretty-print this file, feed it to a unix shell!
- %%%
- %%% $Id: lineno.sty,v 3.11 2002/01/26 23:40:55 stephan Exp $
- %%%
- %%% Copyright 1995--2001 Stephan I. B"ottcher <stephan@nevis.columbia.edu>
- %%%
- %%% This program can be redistributed and/or modified under the terms
- %%% of the LaTeX Project Public License Distributed from CTAN
- %%% archives in directory macros/latex/base/lppl.txt; either
- %%% version 1 of the License, or any later version.
- %%%
- % \documentclass[a4paper,12pt]{article}%D
- % \usepackage{lineno}%D
- %
- % \title{
- % \texttt{\itshape
- % lineno.sty \ v3.08b 2002/02/27
- % }\\\ \\
- % A \LaTeX\ package to attach
- % \\ Line numbers to paragraphs
- % }\author{
- % Stephan I. B\"ottcher
- % }\date{
- % stephan@nevis.columbia.edu
- %% \\ Stephan.Boettcher@desy.de
- %% \\ Stephan.Boettcher@cern.ch
- % \\}
- %
- %
- % \def~{\verb~}
- % \catcode`\<\catcode`\~
- % \def<#1>{$\langle${\itshape#1}\/$\rangle$}
- % \catcode`\|\catcode`\~
- % \def|#1{{\ttfamily\string#1}}
- % \newenvironment{code}
- % {\par\runninglinenumbers
- % \modulolinenumbers[1]
- % \linenumbersep.3em
- % \footnotesize
- % \def\linenumberfont
- % {\normalfont\tiny\itshape}}
- % {}
- %
- % \begin{document}%D
- %% \DocInput{lineno.doc}%D
- % \pagewiselinenumbers
- % \maketitle
- % \tableofcontents
- % \sloppy
- %
- %
- %
- % \section{
- % Introduction
- % }
- % 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 to well with displaymath.
- % ~\footnote~s are a problem, especially when they
- % are split, but we may get there.
- %
- % 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.
- %
- % This style option is written for \LaTeXe, later than November 1994,
- % since we need the ~\protected@write~ macro.
- \NeedsTeXFormat{LaTeX2e}[1994/11/04]
- \ProvidesPackage{lineno}
- [2002/01/27 line numbers on paragraphs v3.08b]
- %% v1.00 1995/03/31 SIB: first release for Petras 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
- %%
- %% Acknowledgements:
- %% v3.06: Donald Arseneau, pointed to mparhack.sty.
- %% v3.07+: Frank Mittelbach, points out inconsistencies in the
- %% user interface.
- %
- % \section{
- % Put the line numbers to the lines
- % }
- % 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
- % ~\penaly~-30000. The lineno penalty range was
- % shrunk to $-188000 \dots -32000$. (/New v3.04)
- \newcount\linenopenalty\linenopenalty=-100000
- \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)
- \let\@LN@output\output
- \newtoks\output
- \output=\expandafter{\the\@LN@output}
- \@LN@output={%
- \LineNoTest
- \if@tempswa
- \LineNoHoldInsertsTest
- \if@tempswa
- \if@twocolumn\let\@makecol\@LN@makecol\fi
- \the\output
- \ifnum\holdinginserts=-3
- \global\holdinginserts 3
- \fi
- \else
- \global\holdinginserts-3
- \unvbox\@cclv
- \ifnum\outputpenalty=10000\else
- \penalty\outputpenalty
- \fi
- \fi
- \else
- \MakeLineNo
- \fi
- }
- % 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
- \my@nobreaktrue
- \fi
- \@tempswatrue
- \ifnum\outputpenalty>-\linenopenaltypar\else
- \ifnum\outputpenalty>-188000\relax
- \@tempswafalse
- \fi
- \fi
- }
- \def\my@nobreaktrue{\let\if@nobreak\iftrue}
- \def\LineNoHoldInsertsTest{%
- \ifnum\holdinginserts=3\relax
- \@tempswafalse
- \fi
- }
-
- % 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}.
- %
- % Finally we put in the natural ~\interlinepenalty~, except
- % after the last line.
- \def\MakeLineNo{\@tempdima\dp\@cclv \unvbox\@cclv
- \sbox\@tempboxa{\hbox to\z@{\makeLineNumber}}%
- \stepcounter{linenumber}%
- \dp\@tempboxa=\@tempdima\ht\@tempboxa=\z@
- \nointerlineskip\kern-\@tempdima\box\@tempboxa
- \ifnum\outputpenalty=-\linenopenaltypar\else
- \@tempcnta\outputpenalty
- \advance\@tempcnta -\linenopenalty
- \penalty\@tempcnta
- \fi
- }
- %
- %
- % \section{
- % Control line numbering
- % }
- % 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
- \def\linenumberpar{\ifvmode\@@@par\else\ifinner\@@@par\else
- \advance\interlinepenalty \linenopenalty
- \linenoprevgraf\prevgraf
- \global\holdinginserts3%
- \@@@par
- \ifnum\prevgraf>\linenoprevgraf
- \penalty-\linenopenaltypar
- \fi
- \kern\z@
- \global\holdinginserts0%
- \advance\interlinepenalty -\linenopenalty
- \fi\fi
- }
- % 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>~]~.
- \def\linenumbers{\let\@@par\linenumberpar
- \ifx\@par\@@@par\let\@par\linenumberpar\fi
- \ifx\par\@@@par\let\par\linenumberpar\fi
- \@ifnextchar[{\resetlinenumber}%]
- {\@ifstar{\resetlinenumber}{}}%
- }
- \def\nolinenumbers{\let\@@par\@@@par
- \ifx\@par\linenumberpar\let\@par\@@@par\fi
- \ifx\par\linenumberpar\let\par\@@@par\fi
- }
- % 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 enviroment to make
- % it work. But that requires to wrap each and every display
- % in your LaTeX source.
- %
- % 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.
- %%% 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.
- \@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
- % }
- %
- % 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.
- \newcommand\linenomathNonumbers{%
- \ifx\@@par\@@@par\else
- \ifnum\interlinepenalty>-\linenopenaltypar
- \global\holdinginserts3%
- \advance\interlinepenalty \linenopenalty
- \advance\predisplaypenalty \linenopenalty
- \fi
- \fi
- \ignorespaces
- }
- \newcommand\linenomathWithnumbers{%
- \ifx\@@par\@@@par\else
- \ifnum\interlinepenalty>-\linenopenaltypar
- \global\holdinginserts3%
- \advance\interlinepenalty \linenopenalty
- \advance\predisplaypenalty \linenopenalty
- \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{%
- \global\holdinginserts0
- \@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
- % }
- % The only way to get a label to a line number in a
- % paragraph is to ask the output routine to mark it.
- %
- % 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>.
- %
- % 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)
- \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}
- \let\@LN@ExtraLabelItems\@empty
- % \subsection{
- % The linelabel command
- % }
- % 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}.
- % }%
- % 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
- % decides whether to print line numbers on this paragraph
- % or not. A ~\linelabel~ may legally appear earlier than
- % ~\linenumbers~.
- %
- % ~\linelabel~, via a fake float number $-2$, 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~).
- %
- % 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.
- \def\linelabel#1{%
- \ifvmode
- \ifinner \else
- \leavevmode \@bsphack \@savsk\p@
- \fi
- \else
- \@bsphack
- \fi
- \ifhmode
- \ifinner
- \@parmoderr
- \else
- \@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
- \fi
- \else
- \@parmoderr
- \fi
- }
- % \modulolinenumbers[3]
- % \section{
- % The appearance of the line numbers
- % }\label{appearance}
- % 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
- \hbox to\linenumberwidth{\hss\LineNumber}\hss}
- \def\linenumberfont{\normalfont\tiny\sffamily}
- \newdimen\linenumbersep
- \newdimen\linenumberwidth
- \linenumberwidth=10pt
- \linenumbersep=10pt
- % 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
- % customizes ~\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.
- \newcommand\resetlinenumber[1][1]{\c@runninglinenumber#1}
- % \subsection{
- % Running line numbers
- % }
- % 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
- % }
- % 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{}{%
- \string\@LN{\the\c@linenumber}{\noexpand\the\c@page}}}
- % 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}.
- % }%
- % 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 1\relax
- \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)
- % }
- %
- % Twocolumn mode requires another patch to the ~\output~
- % routine, in order to print a column tag to the .aux
- % file.
- \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
- }
- \def\@LN@col#1{\def\@LN@column{#1}}
- \@LN@col{1}
- %
- %
- %
- % \subsection{
- % Numbering modulo 5
- % }
- % 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.
- \newcount\c@linenumbermodulo
- \def\themodulolinenumber{{\@tempcnta\c@linenumber
- \divide\@tempcnta\c@linenumbermodulo
- \multiply\@tempcnta\c@linenumbermodulo
- \ifnum\@tempcnta=\c@linenumber\thelinenumber\fi
- }}
- % The user command to set the modulo counter:
- \newcommand\modulolinenumbers[1][0]{%
- \let\LineNumber\themodulolinenumber
- \ifnum#1>1\relax
- \c@linenumbermodulo#1\relax
- \else\ifnum#1=1\relax
- \def\LineNumber{\thelinenumber}%
- \fi\fi
- }
- \setcounter{linenumbermodulo}{5}
- \modulolinenumbers[1]
- %
- % \switchlinenumbers
- % \modulolinenumbers[1]
- % \section{
- % Package options
- % }
- % There is a bunch of package options, all of them
- % executing only user commands (see below).
- %
- % 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}
- % 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~.
- \let\do@mlineno\relax
- \DeclareOption{displaymath}{\let\do@mlineno\@empty}
- % 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 presencs of the
- % ~nameref~ package is now detected automatically
- % ~\AtBeginDocument~. (/New v3.07)
- \DeclareOption{hyperref}{\PackageWarningNoLine{lineno}{%
- Option [hyperref] is obsolete.
- \MessageBreak The hyperref package is detected automatically.}}
- \AtBeginDocument{%
- \@ifpackageloaded{nameref}{%
- \def\@LN@ExtraLabelItems{{}{}{}}}}
- \ProcessOptions
- % \subsection{
- % Package Extensions
- % }
- %
- % The extensions in this section were previously supplied
- % in seperate ~.sty~ files.
- %
- % \subsubsection{
- % $display math$
- % }
- %
- % 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}{
- \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}
- \let\LN@eqnarray\eqnarray
- \let\LN@endeqnarray\endeqnarray
- \renewenvironment{eqnarray}
- {\linenomath\LN@eqnarray}
- {\LN@endeqnarray\endlinenomath}
-
- \fi
- % \subsubsection{
- % Line numbers in internal vertical mode
- % }
- %
- % The command ~\internallinenumbers~ adds line numbers in
- % internal vertical mode, but with limitations: we assume
- % fixed baseline skip.
- \def\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
- \c@linenumber\@ne}{}}%
- }
- \let\endinternallinenumbers\endlinenumbers
- \@namedef{internallinenumbers*}{\internallinenumbers*}
- \expandafter\let\csname endinternallinenumbers*\endcsname\endlinenumbers
- \newcount\c@internallinenumber
- \newcount\c@internallinenumbers
- \def\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
- }
- \def\makeinternalLinenumbers{\ifnum\c@internallinenumbers>0\relax
- \hbox to\z@{\makeLineNumber}\global\advance\c@linenumber\@ne
- \advance\c@internallinenumbers\m@ne
- \expandafter\makeinternalLinenumbers\fi
- }
- % \subsubsection{
- % Line number references with offset
- % }
- %
- % 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@linenumner\c@runninglinenumner
- \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}
- % \subsubsection{
- % Numbered quotation environments
- % }
- %
- % 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.
- \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}
- % \subsubsection{
- % Frame around a paragraph
- % }
- %
- % 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\hbox to\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{
- % The final touch
- % }
- % There is one deadcycle for each line number.
- \advance\maxdeadcycles 100
- \endinput
- % \section{
- % The user commands
- % }
- % The user command 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
- % [|\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.
- % \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
- % take action only when the ~\par~ is executed. The
- % ~\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}
- %
- %
- % \subsection{
- % Customization hooks
- % }
- % 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.
- % \end{description}
- % \end{document}%D
- ------------------------------------------------------------------------------
- echo "expect errors for unknown commands 'iffalse' and 'fi'";# SHELL
- awk '/A[W]K/' lineno.sty | awk -f - lineno.sty >lineno.tex; # SHELL
- latex lineno; latex lineno; latex lineno; latex lineno; # SHELL
- awk '/DOC A [W] K/' lineno.sty | awk -f - lineno.sty >lineno.doc; # DOC SH
- 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
- 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
|