\iffalse; awk '/S[H]ELL/' lineno.sty|sh;exit;\fi %%% For typesetting the doc, feed this file into a unix shell! %%% % \documentclass[a4paper,12pt]{article}%D % \usepackage{lineno}%D % % \title{ % \texttt{\itshape % lineno.sty \ v2.00 1995/12/06 % }\\\ \\ % A \LaTeX\ style option to attach % \\ Line numbers on paragraphs % }\author{ % Stephan I. B\"ottcher % }\date{ % stephan@alzt.tau.ac.il % \\ boettcher@desy.de %% \\[5ex] %% Use this file, distribute it, improve it! %% \\ Please send me your comments %% \\ and any changed versions that you distribute! % \\} % % % \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 with displaymath. % % This style option is written for \LaTeXe. \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{lineno} [1995/12/06 line numbers on paragraphs (c) SIB v2.00] %% 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 % % \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~). \newcount\linenopenalty\linenopenalty=-100000 \mathchardef\linenopenaltypar=25000 % So let's make a hook to ~\output~, the direct way. \output=\expandafter{% \expandafter \LineNoTest \expandafter \if@tempswa \the\output \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. \def\LineNoTest{% \ifnum\interlinepenalty<-\linenopenaltypar \advance\interlinepenalty-\linenopenalty \@nobreaktrue \fi \@tempswatrue \ifnum\outputpenalty>-\linenopenaltypar\else \ifnum\outputpenalty>-175000\relax \@tempswafalse \fi \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. \let\@@@par\@@par \def\linenumberpar{\ifvmode\@@@par\else\ifinner\@@@par\else \advance\interlinepenalty \linenopenalty \@@@par \penalty-\linenopenaltypar \kern\z@ \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 ~[~~]~. \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? 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. Do that, if you really need it. % $$ % display \ math % $$ % 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 paragraphs indentation. \@namedef{linenumbers*}{\linenumbers*} \@namedef{runninglinenumbers*}{\runninglinenumbers*} \def\endlinenumbers{\par\@endpetrue} \let\endrunninglinenumbers\endlinenumbers \let\endpagewiselinenumbers\endlinenumbers \expandafter\let\csname linenumbers*\endcsname\endlinenumbers \expandafter\let\csname runninglinenumbers*\endcsname\endlinenumbers % % % % \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@~. % % 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. % \let\@LN@addmarginpar\@addmarginpar \def\@addmarginpar{% \ifnum\count\@currbox>-2\relax \@LN@addmarginpar \else \@cons\@freelist\@currbox \protected@write\@auxout{}{% \string\newlabel {\csname @LNL@\the\@currbox\endcsname}% {{\theLineNumber}{\thepage}}}% \fi} % \subsection{ % The linelabel command % } % To refer to a place in line ~\ref{~~}~ at page % ~\pageref{~~}~ you place a ~\linelabel{~~}~ at % that place. % % \linelabel{demo}% % \marginpar{\tiny\raggedright % 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 junky % 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 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 or % vertical modes. % % 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 \fi \fi \ifhmode \ifinner \@parmoderr \else \@bsphack\@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 \global \@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. You may add 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\textwidth \hbox to\linenumberwidth{\hss\LineNumber}\hss} \def\linenumberfont{\normalfont\tiny\sffamily} \newdimen\linenumbersep \newdimen\linenumberwidth \linenumberwidth=10pt \linenumbersep=10pt % Oh well, some of the suggested `customization' has been % done, particularly the placement of the numbers. 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{~~}{~~}~ % \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~ 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~~\endcsname~ pushes % an entry, which stays after an ~\xdef~ to that . % % If ~\LN@P~ 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#2\endcsname{#1}{#2}}} \def\@@LN#1#2#3{\ifx#1\relax \expandafter\@@@LN\csname LN@P\LastNumberedPage\endcsname#1 \xdef#1{\lastLN{#2}\firstLN{#2}\pageLN{#3}\nextLN\relax}% \else \def\lastLN##1{\noexpand\lastLN{#2}}% \xdef#1{#1}% \fi \gdef\LastNumberedPage{#3}} % The previous page macro gets its pointer to the % current one, replacing the ~\relax~ with the cs-token % ~\LN@P~. In case of page number mismatch, \TeX\ % will trip here, because the argument string for ~\nextLN~ % is not ~\relax~. I think it's difficult to do a % reasonable intercept here, because this is running in an % ~\xdef~. Does ~\PackageError{}~ work in there? \def\@@@LN#1#2{{\def\nextLN\relax{\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 one where % the last one came from or maybe the next. However, it can % be a completely different one. We maintain a cache, % which is let to the last accessed pages 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 two arguments: the first line % number on this page, and the page number. \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. \def\testNumberedPage{% \let\lastLN\testLastNumberedPage \let\firstLN\testFirstNumberedPage \let\pageLN\@gobble \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 two % 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{\gotNumberedPage00}% \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 \def\gotNumberedPage#1#2{\oddNumberedPagefalse \ifodd#2\relax\oddNumberedPagetrue\fi \advance\c@linenumber 1\relax \subtractlinenumberoffset{#1}% } % 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{ % 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} % 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} % And finally, the option ~modulo~ causes only those % linenumbers to be printed which are multiples of five. \DeclareOption{modulo}{\modulolinenumbers\relax} \ProcessOptions % \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{]}\item % [|\linenumbers[\NL] \ \par$\qquad$ % and start with . % \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 % ~[~~]~. % \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 margim. % \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 % ~[~~]~. If is not specified, the % current value in the counter ~linenumbermodulo~ is % retained. =1 turns this off without changing % ~linenumbermodulo~. The counter is initialized to 5. % \item % [|\linelabel] \ \par % Set a ~\linelabel{~~}~ to the line number where % this commands is in. Refer to it with the \LaTeX\ % referencing commands ~\ref{~~}~ and % ~\pageref{~~}~. % \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{~~linenumbers}~ commands provide a ~\par~. % Examples: % \begin{verse} % ~{\linenumbers~ ~\par}~ \\ % \ \\ % ~\begin{linenumbers}~ \\ % \\ % ~\end{linenumbers}~ \\ % \ \\ % ~{\linenumbers\par}~ \\ % \ \\ % ~\linenumbers~ \\ % ~\par~ \\ % ~\nolinenumbers~ \\ % \ \\ % ~\linenumbers~ \\ % ~{\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