summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/lineno
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2011-02-18 00:15:55 +0000
committerKarl Berry <karl@freefriends.org>2011-02-18 00:15:55 +0000
commit9ea95092c2e062767ff36b7a4842d0465f30d695 (patch)
tree29deadc831d93e6e723478b9e75a14aca0796e5d /Master/texmf-dist/tex/latex/lineno
parent022ecad12921815d7836230953b959498fab9d77 (diff)
lineno with fnlineno (16feb11)
git-svn-id: svn://tug.org/texlive/trunk@21442 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/lineno')
-rw-r--r--Master/texmf-dist/tex/latex/lineno/fnlineno.sty1149
-rw-r--r--Master/texmf-dist/tex/latex/lineno/vplref.sty6
2 files changed, 1153 insertions, 2 deletions
diff --git a/Master/texmf-dist/tex/latex/lineno/fnlineno.sty b/Master/texmf-dist/tex/latex/lineno/fnlineno.sty
new file mode 100644
index 00000000000..5c53da606c7
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/lineno/fnlineno.sty
@@ -0,0 +1,1149 @@
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+\ProvidesPackage{fnlineno}[2011/01/07 v0.55
+ numbers to footnote lines (UL)]
+
+%% Copyright (C) 2010 Uwe Lueck,
+%% http://www.contact-ednotes.sty.de.vu
+%% -- author-maintained in the sense of LPPL below --
+%%
+%% This file can be redistributed and/or modified under
+%% the terms of the LaTeX Project Public License; either
+%% version 1.3c 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.
+%%
+%% Please report bugs, problems, and suggestions via
+%%
+%% http://www.contact-ednotes.sty.de.vu
+%%
+%% {\it This work has been supported
+%% % and is owned %% wrong, owner is RUB -- 2011/02/09
+%% by the Deutsche Forschungsgemeinschaft (DFG),
+%% organized %% 2010/12/18 TODO!?
+%% by Prof.~Dr.\ Dr.\ Christian Tapp
+%% at Ruhr-Universit\"at Bochum, Germany.}
+%% %% 2010/12/18:
+%% Christian also has constructed some critical tests.
+%%
+%% === Installing and Calling ===
+%% The file 'fnlineno.sty' is provided ready, installation only requires
+%% putting it somewhere where \TeX\ finds it
+%% (which may need updating the filename data
+%% base).\footnote{\url{http://www.tex.ac.uk/cgi-bin/texfaq2html?label=inst-wlcf}}
+%%
+%% As usually, 'fnlineno.sty' is loaded by
+%% % \begin{verbatim}
+%% `\usepackage{fnlineno}'
+%% % \end{verbatim}
+%% below the `\documentclass' line and before `\begin{document}'.
+%%
+%% === Limitations ===
+%% v0.55 %%% v0.5 %% 2011/02/09
+%% should really work
+%% the way users expect, %% 2011/02/09
+%% but please consider:
+%% % In the \strong{present version (v0.4)}, 'flnineno.sty' is just
+%% % ``work in progress"---with at least the following issues:
+%% \begin{enumerate}
+%% % \item Lines are numbered in an order
+%% % that you may not like, in the presence of
+%% % footnotes.
+%% % Overcoming this failure by automagic
+%% % will be the major further work on the package!
+%% % (v0.5!?)
+%% %
+%% % \item The package is not expected to work with 'manyfoot'
+%% % (neither 'ednotes' ... future work!).
+%%
+%% \item Nothing is known about compatibility with
+%% packages (other than 'manyfoot' and 'bigfoot')
+%% providing footnote features beyond standard \LaTeX.
+%%
+%% \item `\lipsum[<opt-arg>]' in main text produces
+%% a different number of paragraphs ...
+%%
+%% %% 2010/12/18:
+%% % \item `\pagebreak' (without optional argument, or
+%% % `\pagebreak[4]') in footnotes prints footnote parts
+%% % (splits) in wrong order.\footnote{TODO:
+%% % (i)~extra case (using flag) in &\output
+%% % with $&\outputpenalty=-10000$;
+%% % \emph{or}
+%% % (ii)~redefine &\pagebreak in footnotes ...}
+%% %% 2010/12/19, "tried" "assumed" 2010/12/21:
+%% \item v0.41 tried supporting `\pagebreak' in footnotes
+%% for manual control of splitting footnotes.
+%% %% 2010/12/20f.:
+%% However, it wrongly assumed that `\pagebreak[4]'
+%% forces a footnote split, cf. Section~\ref{sec:sw};
+%% users better still don't use `\pagebreak'
+%% in footnotes!
+%%
+%% \item Much of the code is ``guessed" without complete
+%% knowledge of \TeX\ internals and without having
+%% tested many possible cases.
+%% %% 2010/12/27:
+%% \item \emph{Local} switching to ``pagewise" numbering
+%% won't be possible for a while; we rather assume
+%% that you \emph{always} want ``pagewise" numbering.
+%%
+%% \item Nothing has been tried to offer choices about the
+%% \emph{style} of numbering footnotes.
+%% \end{enumerate}
+%%
+%% \pagebreak %% 2011/02/09
+%% == Implementation ==
+%% === Terms ===
+%% ``\strong{OTR}" is short for \textit{``output routine"},
+%% ``\strong{MVL}" is short for \textit{``main vertical list"}.
+%% %%% TODO "acro"
+%%
+%% === Basic Strategy ===
+%% \LaTeX's |\@footnotetext| writes the footnote text into the
+%% insertion register. For numbering the footnote lines,
+%% \emph{we here} do not execute this `\@footnotetext'
+%% immediately after placing |\@footnotemark|,
+%% but postpone its |\insert| a little so it
+%% is executed only after the main text paragraph has been
+%% broken into lines. Right below the line that contains the
+%% footnote mark, a special new ``slot" of the \strong{OTR}
+%% is called that interchanges ``the page so far" with the
+%% footnote text. When the latter has been typeset,
+%% another ``slot" of the OTR puts ``the page so far"
+%% back to the MVL and immediately after that fills the footnote
+%% text as just typeset on the MVL into the `\insert' register.
+%%
+%% Passing footnotes from horizontal mode to vertical mode
+%% resembles 'lineno''s `\PostponeVadjust', but a
+%% different \strong{list} |\FNLN@list|
+%% must store code
+%% (\textit{a})~for the footnote \strong{mark} and
+%% (\textit{b})~for the footnote \strong{text}.
+%% %%% (TODO: move this paragraph)
+%%
+%% === Package Options ===
+%% A package option |[check-latex]| %% typo article 2010/12/31
+%% for checking vital \LaTeX\ internals may once be offered
+%% (TODO 2010/12/12) ...
+\newif\if@FNLN@check@
+\DeclareOption{check-latex}{\@FNLN@check@true}
+\ProcessOptions
+%%
+%% === Footnote Commands ===
+%% ==== Standard Footnotes ====
+%% The following macro |\FNLN@ltx@fntext| %% more 2010/12/16
+%% is a copy of \LaTeX's `\@footnotetext'
+%% that we are varying. It may be used for a check
+%% if the `\@footnotetext' that 'fnlineno.sty' encounters
+%% is the one expected (TODO).
+%% In line numbering mode, this code may never be needed
+%% all at once, rather we will have to see which material
+%% must be used at which point of our unusual way of
+%% processeing footnotes.
+\if@FNLN@check@
+ \long\def\FNLN@ltx@fntext#1{\insert\footins{%
+ \reset@font\footnotesize
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+ \hsize\columnwidth \@parboxrestore
+ \protected@edef\@currentlabel{%
+ \csname p@footnote\endcsname\@thefnmark
+ }%
+ \color@begingroup
+ \@makefntext{%
+ \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
+ \color@endgroup}}%
+\fi
+%%
+%% ==== Modifying Footnote Commands ====
+%% In order to number |\footnote| lines and make
+%% `\linelabel' available in footnotes, it seems to suffice
+%% (with standard \LaTeX) to \strong{redefine}
+%% the internal |\@footnotetext|.
+%% In line numbering mode, `\@footnotetext' will act as
+%% |\FNLN@text|,
+%% % \begin{itemize}
+%% % \item[(i)]
+%% (\textit{i})~%
+%% placing a ``signal" \strong{output penalty}
+%% below the current line via `\vadjust' and
+%% % \item[(ii)]
+%% (\textit{ii})~%
+%% appending the footnote text to the
+%% \strong{list} |\FNLN@list| of \strong{footnote texts}.
+%% % \end{itemize}
+%%
+%% |\FNLN@@text| stores the `\@footnotetext' found,
+%% we might check if it is `\FNLN@ltx@fntext' ... %% TODO
+\let\FNLN@@text\@footnotetext
+\def\@footnotetext{%
+ \ifLineNumbers \expandafter \FNLN@text
+ \else \expandafter \FNLN@@text
+ \fi}
+\def \FNLN@text {% %% 2010/12/31 arg read later
+ \vadjust{\penalty-\FNLN@M@swap@codepen}%
+%% Standard \LaTeX's `\@footnotetext' expands `\@thefnmark'
+%% to produce the footnote mark at the page bottom,
+%% right after it has been determined for the mark
+%% in the main text. \emph{Here} the footnote text
+%% will be typeset only when \emph{other} footnote marks
+%% may have been formed for typesetting the main text
+%% paragraph before.
+%% %%% (TODO clearer wording)
+%% In the \strong{footnote list}
+%% macro |\FNLN@list|, the (\dqtd{`&\protect'ed})
+%% \emph{current} expansion <mark> of `\@thefnmark'
+%% is stored as an item preceding the footnote text
+%% <text>. One footnote entry in `\FNLN@list'
+%% thus has the form \lq`<mark>\@lt<text>\@lt'\rq.
+%% \LaTeX's internal `\g@addto@macro' is used to \emph{append}
+%% an entry to the list (at the right). The OTR will later
+%% take the entries from the left of the list.
+%%
+%% The argument of the auxiliary/temporary `\@tempa'
+%% will contain the footnote text and thus must be able to
+%% carry `\par' tokens. We therefore need a `\long' version of
+%% `\protected@edef':
+ \let\@@protect\protect
+ \let\protect\@unexpandable@protect
+ \afterassignment\restore@protect
+ \long \edef \@tempa ##1{%
+ \noexpand\g@addto@macro \noexpand\FNLN@list {%
+ \@thefnmark \noexpand\@lt ##1\noexpand \@lt}}%
+%% ... issuing
+%% \lq`\g@addto@macro\FNLN@list{<mark>\elt<text>\@lt}'\rq\ ...
+ \@tempa %% reads arg
+}
+%% Here we initialize |\FNLN@list|:
+\let\FNLN@list\@empty
+%%
+%% === Output Routines ===
+%% ==== 'lineno''s Output Routine ====
+%% The following is a copy of 'lineno''s OTR
+%% that we are varying. It may be used for a check
+%% if the OTR that 'fnlineno.sty' encounters
+%% is the one expected (TODO).
+\if@FNLN@check@
+ \def\FNLN@lno@output {%
+ \LineNoTest
+ \if@tempswa
+ \ifnum\outputpenalty=-\@Mllbcodepen
+ \WriteLineNo
+ \else
+ \ifnum\outputpenalty=-\@Mppvacodepen
+ \PassVadjustList
+ \else
+ \LineNoLaTeXOutput
+ \fi
+ \fi
+ \else
+ \MakeLineNo
+ \fi
+ }
+%% The ``signal penalties" used here are
+ \mathchardef\FNLN@M@llbl@codepen=11111
+ \mathchardef\FNLN@M@ppva@codepen=11112
+\fi
+%% Their names should mean ```\linelabel' code penalty" and
+%% ```\PostponeVadjust' code penalty."
+%%
+%% |\TheLineNoLaTeXOutput|:
+%% It turns out to be inconvenient here
+%% that 'lineno' sacrifices access
+%% to the \emph{primitive} `\output' (```\@tempa'";
+%% TODO: auxiliary package before loading 'lineno'!?;
+%% later change 'lineno.sty' indeed).
+%% So to change the OTR we use `\LineNoLaTeXOutput' as a hook
+%% for adding additional cases of `\outputpenalt'ies.
+%% We take a copy of `\LineNoLaTeXOutput' here.
+\let\TheLineNoLaTeXOutput\LineNoLaTeXOutput
+%%
+%% ==== Tools for Temporary Parameter Changes ====
+%% |\GStoreReg{<register>}|\quad
+%% (or\quad |\GStoreReg<register>|\\[\smallskipamount]
+%% when <register> is a single token---\lq`\count0'\rq\
+%% being a counterexample ...)\quad
+%% stores the current content of <register>
+%% (\emph{globally}) as an internal macro so that it can be
+%% restored later by\\[\smallskipamount]
+%% |\RestoreReg{<register>}|\quad
+%% \mbox{(or\quad }|\RestoreReg<register>|)\\[\smallskipamount]
+%% or \emph{globally} by\\[\smallskipamount]
+%% |\GRestoreReg{<register>}|\quad (|\GRestoreReg<register>|)
+%% \\[\smallskipamount]
+%% (The OTR runs in a local group!---Recall that assignments
+%% to ``special dimens"---\TeX book p.\,271---are
+%% automatically global.)
+%% <register> is something that can be prefixed by `\the'
+%% to read its content and to which you can assign a value
+%% <value> by \lq<register><value>\rq.
+%% (TODO: could also be some `\catcode'!)
+%% %% and TODO allow changing name space!
+\newcommand*{\GStoreReg}[1]{%
+ \expandafter \xdef \csname GS\string#1\endcsname {\the #1}}
+\newcommand*{\RestoreReg}[1]{#1\csname GS\string#1\endcsname \relax}
+\newcommand*{\GRestoreReg}{\global\RestoreReg}
+%% |\GStoreSetReg{<register>}{<value>}| assigns %%% the new value
+%% <value> to <register> (locally) after executing `\GStoreSet',
+%% |\GStoreGSetReg| does the same \emph{globally}
+%% (and still argument braces aren't needed when a single
+%% token refers to the register).
+\newcommand*{\g@storesetreg}[3]{\GStoreReg{#2}#1#2#3\relax}
+\newcommand*{\GStoreSetReg} {\g@storesetreg\relax}
+\newcommand*{\GStoreGSetReg}{\g@storesetreg\global}
+%% (These preliminaries might go into an own new package, TODO!
+%% + loop on list of <register>s ...) %% 2010/12/19
+%%
+%% ==== The basic hook ====
+%% \label{sec:sw}
+%% We use two more penalties triggering the ``MVL swaps:"
+\mathchardef\FNLN@M@swap@codepen =11113
+\mathchardef\FNLN@M@insert@codepen=11114
+%% v0.41 deals with |\pagebreak| in footnote texts,
+%% using a flag |\if@FNLN@sw@| that must be set globally.
+%% %% 2011/01/07:
+%% It turned out not to work properly; however, the new
+%% switch has served a different purpose for ``continuous
+%% line numbering," cf. section~\ref{sec:cont}.
+\newif\if@FNLN@sw@ \global\@FNLN@sw@false %% v0.41
+%% When a `\pagebreak' triggers the OTR while typesetting
+%% the footnote text, the page content is collected
+%% in a box |\FNLN@holdft|:
+\newsavebox\FNLN@holdft %% v0.41
+%% Using |\LineNoLaTeXOutput| for hooking into the OTR:
+\renewcommand*{\LineNoLaTeXOutput}{%
+ \ifnum\outputpenalty=-\FNLN@M@swap@codepen
+ \SwapFootnoteMain
+ \else
+ \ifnum\outputpenalty=-\FNLN@M@insert@codepen
+ \InsertFootnote
+ \else
+ \if@FNLN@sw@ %% v0.41
+% \showthe\outputpenalty %% 2010/12/20
+ \global\setbox \FNLN@holdft \vbox{%
+ \unvbox\FNLN@holdft
+%% %% moved here, clarified 2010/12/21:
+%% TODO from v0.41: `\pagebreak[4]' does not seem to force (reliably)
+%% splitting a footnote; if the footnote is not split here,
+%% at present the `\baselineskip' is lost,
+%% see the footnote paragraph starting
+%% with \qtd{C} in `edfndemo.pdf' as of 2010/12/21.
+%% We would need some measuring ... `\pagebreak'
+%% might be redefined ... resembling \LaTeX's `\@specialoutput'!
+ \unvbox\@cclv
+%% TODO same problem here, see the footnote paragraph starting
+%% with \qtd{D} in `edfndemo.pdf' as of 2010/12/21.
+ \penalty\outputpenalty}%
+ %% TODO reset page book-keeping!? %% v0.41
+ \else
+ \TheLineNoLaTeXOutput %% "the real \LineNoLaTeXOuput"
+ \fi
+ \fi
+ \fi
+}
+%% \strong{An idea:}\quad Instead of so many `\ifnum', use
+%% \[`\csname<chars>\the\outputpenalty\endcsname'\]
+%% ... in 'lineno.sty', when you really have a broad
+%% range of `\outputpenalties' useful to be
+%% described by `\ifnum' range checks ...
+%%
+%% ==== Typesetting the Footnote Text ====
+%% |\SwapFootnoteMain| is the slot of the OTR that our
+%% modified `\@footnotetext' calls with
+%% $`\outputpenalty'=-`\FNLN@M@swap@codepen'$.
+%% The ``column so far" is stored in a new box register
+%% |\FLNL@holdcol|.
+\newsavebox\FNLN@holdcol
+\newcommand*{\SwapFootnoteMain}{%
+ \global \setbox\FNLN@holdcol \vbox{\unvbox\@cclv}%
+%% (... cf. `\@holdpg' in \LaTeX.)
+%%
+%% The entire text of a footnote is typeset on top of
+%% the MVL. `\vsize' is maximized temporarily to avoid
+%% that the footnote text is broken across pages.
+ \GStoreGSetReg\vsize\maxdimen
+%% However, the user may want to use `\pagebreak'
+%% in a footnote in order to control manually where
+%% a ``long" footnote is split. v0.41 tries to support
+%% this:
+ \global\@FNLN@sw@true %% v0.41
+%% ... cf. Section~\ref{sec:sw}.
+%%
+%% There shouldn't be any `\topskip', the space
+%% on top of a footnote is controlled by `\footnotesep'
+%% entirely:
+ \GStoreGSetReg\topskip\z@skip
+%% (`\nointerlineskip' as well as setting `\topskip'
+%% locally instead fails ... according to `\showlists' ...)
+%%
+%% Resetting |\pagegoal|
+%% (why doesn't it switch to $`\vsize'=`\maxdimen'$ automatically?),
+%% |\pagetotal|, and the other ``special dimens"
+%% (\TeX book p.\,271; rather experimental ...
+%% I think it is important to restore them later ...)
+ \GStoreSetReg\pagegoal \vsize
+ \GStoreSetReg\pagetotal\z@
+ \GStoreSetReg\pagestretch\z@
+ \GStoreSetReg\pagefilstretch\z@
+ \GStoreSetReg\pagefillstretch\z@
+ \GStoreSetReg\pagefilllstretch\z@
+ \GStoreSetReg\pageshrink\z@
+ \GStoreSetReg\pagedepth\z@
+%% We must choose certain settings from `\@footnotetext'
+%% such as font:
+ \reset@font\footnotesize
+ \interlinepenalty\interfootnotelinepenalty
+%% \LaTeX's `split' things here are relevant at
+%% `\insert\footins' only: (TODO!?)
+% \splittopskip\footnotesep
+% \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+ \hsize\columnwidth \@parboxrestore
+%% The previous lines were from \LaTeX's `\@footnotetext'.
+%% Now we need to restore the `\@thefnmark' that belongs
+%% to the current footnote text. We use a macro that
+%% tears two items from |\FNLN@list| and executes the
+%% rest of \LaTeX's `\@footnotetext':
+ \expandafter \FNLN@typeset \FNLN@list \@@
+% \showthe\vsize
+%% ... so a `\vsize' assignment without `\global'
+%% is noted here, and an analogous `\topskip' assignment
+%% is not!? TODO ...
+}
+%% |\FNLN@typeset| first removes something %% reworded 2010/12/26
+%% from the list of footnotes, similarly to \LaTeX's |\@xnext|
+%% and 'lineno''s `\@LN@xnext', then executes a
+%% remaining portion of \LaTeX's `\@footnotetext'.
+%% The footnote text may contain `\par' tokens,
+%% so the definition must be `\long':
+\long\def \FNLN@typeset #1\@lt #2\@lt #3\@@{%
+ \gdef\FNLN@list{#3}%
+ \def\@thefnmark{#1}%
+%% This was our own, and next \LaTeX\ continues:
+ \protected@edef\@currentlabel{%
+ \csname p@footnote\endcsname\@thefnmark
+ }%
+ \color@begingroup
+%% We insert starting the 'lineno' settings ...
+ \linenumbers
+ \setfootnotelinenumbers %% 2010/12/25
+%% ... \LaTeX\ again (v0.41 exports dealing with
+%% closing `\par' to `finstrut.sty'):
+ \@makefntext{%
+ \rule\z@\footnotesep\ignorespaces
+%% We replace `#1' by `#2\par' (`\linenumberpar'),
+%% so we really need `finstrut.sty':
+ #2\par
+ \@finalstrut\strutbox}%
+ \color@endgroup
+%% Now we trigger the ``swap back slot" of the OTR:
+ \penalty-\FNLN@M@insert@codepen
+}
+\RequirePackage{finstrut}
+%%
+%% ==== &\insert\ the Footnote Text ====
+%% |\InsertFootnote| is the slot of the OTR that executes
+%% `\insert\footins' with the numbered footnote text.
+%% The ``column so far" stored in `\FNLN@holdcol'
+%% is put onto the top of the MVL, and then parts of
+%% \LaTeX's `\@footnotetext' are performed that haven't
+%% been done earlier, applied to the footnote text
+%% that the OTR should have found in `\box255'.
+%% Before however, the previous `\topskip', `\vsize', and the
+%% `\page'... book-keeping parameters are restored:
+\newcommand*{\InsertFootnote}{%
+ \GRestoreReg\topskip \GRestoreReg\vsize
+%% (... \emph{global} restoring of `\vsize' proved vital with
+%% 'edfndemo' 2010/12/17 ...)
+ \RestoreReg \pagegoal \RestoreReg\pagetotal
+ \RestoreReg \pagestretch
+ \RestoreReg \pagefilstretch
+ \RestoreReg \pagefillstretch
+ \RestoreReg \pagefilllstretch
+ \RestoreReg \pageshrink \RestoreReg\pagedepth
+ \unvbox\FNLN@holdcol
+ \insert\footins{%
+ \splittopskip\footnotesep
+ \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+%% Support of `\pagebreak' with v0.41:
+ \unvbox\FNLN@holdft %% v0.41
+ \unvbox\@cclv}%
+ \global\@FNLN@sw@false %% v0.41
+%% With v0.5, global settings for ``pagewise" numbering
+%% must be restored: %% 2010/12/26
+ \unsetfootnotelinenumbers
+}
+%%
+%% === ``Continuous'' Numbering ===
+%% \label{sec:cont}
+%% ==== Goal ====
+%% With v0.5, for the first time we try to get a
+%% ``pagewise" numbering such that, if a main text line
+%% has a footnote,
+%% (\textit{i})~its printed number is just the natural
+%% successor of the printed number of the previous main
+%% text line
+%% (instead of continuing previous numbering with the
+%% lines of the footnote first),
+%% and (\textit{ii})~the printed numbers of footnote lines
+%% just continue the printed numbers of the main text lines.
+%% This ``obvious'' desirement is not easy to achieve;
+%% already pagewise numbering of main text lines,
+%% without numbering footnote lines, has been somewhat
+%% ingenious.
+%%
+%% ==== How to Number Lines Pagewise ====
+%% The basic idea of 'lineno''s pagewise numbering is:
+%% \begin{enumerate}
+%% \item Each numbered line of the document is identified
+%% by a unique counter value, an ``absolute" number.
+%% \item For each page (and column), the range of absolute
+%% line numbers occurring on them is recorded
+%% (or actually: the first and the last number).
+%% \item The ``public," ``human-readable" (``pagewise")
+%% format of a given absolute line number $l$ is generated by
+%% (\textit{i})~finding the page (and column) with
+%% first number $n$ and last number $k$ such that
+%% $n\leq l\leq k$,
+%% (\textit{ii}) ``printing" $l-n+1$ in ``columnwise"
+%% mode, otherwise $l-m+1$ where $m$ is the first
+%% absolute line number in the left-hand column of the
+%% same page.
+%% \end{enumerate}
+%% \strong{Generating} the ``pagewise" representation for a
+%% given absolute line number $l$ thus may be summarized as
+%% \emph{finding the corresponding \emph{\strong{offset}} value}
+%% to be subtracted ($n$, $n+1$, $m$, or $m+1$ ...).
+%%
+%% When \emph{footnote} lines are to be numbered as well,
+%% a little problem is the order in which main text and
+%% footnote lines increment the absolute counter.
+%% 'lineno''s mechanism for this is started immediately
+%% after a paragraph has been broken into lines.
+%% Each line of the paragraph then calls a macro
+%% generating the line number. 'fnlineno' now interrupts
+%% numbering of main text lines at a line issuing a footnote.
+%% The footnote text is typeset, including numbering its
+%% lines at each end of a footnote paragraph. When the
+%% footnote text has been sent into the `\insert' register,
+%% numbering of main text lines is resumed.
+%%
+%% Up to v0.4 (a development version), we used the \emph{same}
+%% absolute counter for main text and footnote lines.
+%% When a page $p$ has more than one main text line and the first
+%% one has a long footnote continued on the next page~$p+1$,
+%% there is no ``range" of absolute line numbers
+%% characterizing page~$p$ any more,
+%% because the greatest absolute line number of page~$p$
+%% exceeds the absolute line numbers of the footnote continued
+%% on page~$p+1$.
+%%
+%% 'lineno''s procedure can be revived by numbering
+%% main text lines and footnote lines independently
+%% from each other. We use \emph{two} absolute counters,
+%% one is incremented with main text lines only,
+%% the other with footnote lines only.
+%% Numbering of main text lines just will not be affected
+%% by numbering of the footnote lines.
+%%
+%% Almost the same will hold for footnote lines.
+%% Each page (and column) will have a characteristic
+%% ``range" of absolute footnote line numbers $\{n,\dots,k\}$.
+%% The only notable difference will be that for footnote line~$l$
+%% we print $(l-n+1)+(K-N+1) = (K+l)-(N+n)+2$ instead of
+%% $l-n+1$---where $\{N,\dots,K\}$ is the range of \emph{main text}
+%% line numbers of the page (and column).
+%%
+%% The previous discussion of \strong{generating} the printed
+%% line number from its absolute version
+%% has assumed that corresponding \strong{offset} values
+%% have been given somehow, or that the ``line number ranges"
+%% for pages are known from somewhere.
+%% In fact, these ranges are \strong{computed} at the
+%% \strong{start} of a \LaTeX\ run \emph{before} typesetting,
+%% when reading the `.aux' file for the first
+%% time. They are used in the entire document.
+%% While typesetting, each numbered line of main text leaves
+%% a record of its absolute number and page number in the new
+%% version of the `.aux' file that the run creates,
+%% a two-parameter macro `\@LN'. With 'fnlineno.sty',
+%% there will be new `\@FLN' entries of the same type.
+%% These `.aux' entries are used for building
+%% the page range data for the next run.
+%% When the document source has been changed, at least
+%% \emph{two runs} will usually be required
+%% to get correct line numbers in page margins,
+%% and \emph{another} run will be needed so references
+%% to line numbers by `\ref' and `\linelabel' are correct.
+%%
+%% ==== Summary of Changes ====
+%% Variants of 'lineno.sty''s code for ``pagewise"
+%% numbering are following. Sometimes we generalize
+%% `pagewise' stuff from 'lineno' and re-implement pagewise
+%% numbering of main text lines as a special case,
+%% the other special case being numbering of footnote lines.
+%%
+%% Five things need modifications:
+%% \begin{description}
+%% \item[Building page info macros:]
+%% Processing `\@LN' and `\@FLN' `.aux' entries will
+%% use shared building macros, the difference is
+%% obtained by switching \strong{name spaces}.
+%% (It may be notable that a page may get one
+%% info macro for main text and another for
+%% footnote text, if it contains footnote text.)
+%% \item[Logging:]
+%% While typesetting, the shared logging macro
+%% is switched to write either `\@LN' or `\@FLN'
+%% to the `.aux' file. Also, `\c@linenumber'
+%% may refer to either the main text or to the
+%% footnote text counter.
+%% \item[Generating ``pagewise" format:]
+%% The choice of `\c@linenumber' also determines
+%% which counter is incremented, and again
+%% name spaces for page info macros are switched.
+%% For footnote lines,
+%% a tail macro for adding the number of main text lines
+%% will be activated.
+%% \item[Referencing:]
+%% The `.aux' file may have entries from `\linelabel'
+%% containing large numbers from an ``absolute" counter.
+%% In generating the ``human-readable" number,
+%% it must be known whether it is a main text or a
+%% footnote line number.
+%% %% 2010/12/28:
+%% An additional complication is referring to a
+%% main text line from a footnote and vice versa---thinking
+%% of global changes in generating the number.
+%% Or even think of the case referring from unnumbered text
+%% to numbered text!
+%% (I have wondered before if the entry couldn't be
+%% the ready human-readable number, TODO!)
+%% %% 2010/12/27:
+%% \item[Lists of ``vertical tasks":]
+%% 'lineno.sty' (v4) has introduced two lists of
+%% tasks that were issued in horizontal mode
+%% but only can be completed after breaking a paragraph
+%% into lines: one for `\linelabel's and one for `\vadjust'
+%% items that must wait until the line number has been
+%% attached. It is essential that the tasks are processed
+%% in the same order in vertical mode as they were
+%% issued in horizontal mode. As we are now interrupting
+%% processing of main text paragraphs for processing
+%% footnotes, tasks for footnote text must be lined up
+%% in separate lists than tasks for main text.
+%% This is indeed essential for the previous issue
+%% of getting `\linelabel' work in footnotes as well
+%% as in main text.
+%% \end{description}
+%%
+%% ==== Info Building ====
+%% % These macros
+%% |\@LN|, |\@FLN|, and |\@FNLN|
+%% are processed at reading the `.aux' file before typesetting only.
+%% The \strong{interface} to \strong{generating}
+%% ``pagewise" and footnote line numbers just are |\LN@Pfirst|
+%% and |\FLN@Pfirst|, eventually pointing to the first page/column
+%% with numbered main text lines or footnote lines, resp.
+\def \FLN@Pfirst {\nextLN\relax}
+%% This initialization of `\FLN@Pfirst' is just the same
+%% as the one of `\LN@Pfirst' in 'lineno.sty';
+%% their expansions are changed as soon
+%% as such a page is found, replacing the `\relax' by the
+%% corresponding page info macro.
+%%
+%% `\LN@Pfirst' and `\FLN@Pfirst' are passed to
+%% |\testFirstNumberedPage| via the hook |\FNLN@first@numbered|
+%% that by default is the same as `\LN@first':
+\def \FNLN@first@numbered {\LN@Pfirst}
+%% (oh, it must be `\def' here to recognize the change ...).
+%% This must be changed by `\setfootnotelinenumbers'
+%% (`\let' then, as when called the change will have happened).
+%%
+%% Moreover, they are passed to |\NumberedPageCache|
+%% (the page info macro where a search starts,
+%% ``current" page/column) as its initialization;
+%% the ``generating" macros then change the
+%% latter macro following `\nextLN' in the page info macros.
+%%
+%% In this sense, no other ``name space switching" is needed
+%% for communication with other functions.
+%%
+%% 'lineno.sty' has changed |\LastNumberedPage| globally ...
+%% the last page with numbered \emph{footnote} lines
+%% may well be another one than the last page with
+%% numbered \emph{main} text lines ...
+%% But fortunately, also `\LastNumberedPage'
+%% is needed in reading the `.aux' before typesetting only
+%% (`\@onlypreamble' is \LaTeX's disabling command):
+\@onlypreamble\LastNumberedPage
+%% In 'lineno.sty', we have `\def\LastNumberedPage{first}'.
+%% We need the same for the footnote variant |\FNLN@last@numbered|
+%% (to be handled globally!):
+\global \let \FNLN@last@numbered \LastNumberedPage
+\@onlypreamble \FNLN@last@numbered
+%% |\@FNLN{<names>}<last-numbered>{<line>}{<page>}|
+%% \\[\smallskipamount]
+%% generalizes 'lineno.sty''s `\@LN{<line>}{<page>}'
+%% to re-implement it.
+%% There is an additional parameter argument <names>
+%% for choosing name spaces
+%% and a parameter <last-numbered> for choosing the macro
+%% storing the ``last numbered page."
+%% (An argument without braces expects a macro name.)
+\newcommand* \@FNLN [4]{{%
+ \expandafter\@@LN
+ \csname #1#4C\@LN@column \expandafter\endcsname
+ \csname #1O#4\endcsname
+ {#3}{#4}{#1}{#2}}}
+\@onlypreamble\@FNLN
+%% As in 'lineno.sty' `\@LN' calls `\@@LN', a new variant
+%% of `\@@LN' is called by `\@FLN' here, but it gets one
+%% additional parameter for passing <names>
+%% and another for passing <last-numbered> from `\@FLN'.
+%% So the new syntax is\\[\smallskipamount]
+%% |\@@LN<info><first-page-line>{<line>}{<page>}{<names>}<last-numbered>|:
+\renewcommand* \@@LN [6]{%
+ \ifx#1\relax
+ \ifx#2\relax\gdef#2{#3}\fi
+ \expandafter\@@@LN\csname #5#6\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#6{#4C\@LN@column}}
+\@onlypreamble\@@LN
+%% 'lineno.sty''s |\@@@LN| does not need any adjustment.
+%%
+%% 'lineno.sty''s |\@LN{<line>}{<page>}| is reimplemented as
+\def \@LN {\@FNLN{LN@P}\LastNumberedPage}
+%% ---so `\@LN' really does the same as before, including name spaces.
+%%
+%% |\@FLN{<line>}{<page>}| is the other special case of the
+%% new `\@FNLN'---an `F' precedes the earlier names, and
+%% |\FNLN@last@numbered| is the storing macro initialized above:
+\def \@FLN {\@FNLN{FLN@P}\FNLN@last@numbered}
+%% For logging, we make both unexpandable: %% 2010/12/27
+% \AtBeginDocument{\let\@LN\relax \let\@FLN\relax}
+%% ... but this way nothing appears in the file!? TODO ...
+\@onlypreamble\@LN \@onlypreamble\@FLN
+%% For reading the `.aux' finally, we do what
+%% 'lineno' does with `\@LN':
+\AtEndDocument{\let\@FLN\@gobbletwo}
+%%
+%% ==== Tool for Reusing Global Operations with Macros ====
+%% %% 2010/12/28
+%% 'lineno.sty' v4 provides list handling (changing lists globally)
+%% and global changes of `\NumberedPageCache'.
+%% We want to use them in ``main text" mode
+%% as well as in ``footnote" mode.
+%% To use such an operation on <ln-macro> for <fln-macro>,
+%% we `\global\let<ln-macro><fln-macro>', apply the operations,
+%% and finally `\global\let<fln-macro><ln-macro>'.
+%% However, we are not only interested in how <fln-macro>
+%% is changed this way, rather <ln-macro> also is used as input
+%% for some operations, and we can choose which <fln-macro>
+%% should be used as input. To switch from working on/with
+%% <fln-1> to <fln-2> using <ln-macro> with an option
+%% to use <fln-1> later again, a tool
+%% |\GStoreUse<ln-macro><fln-1><fln-2>| is provided
+%% (should render later switchings much better readable):
+\newcommand* \GStoreUse [3]{\global\let#2#1\global\let#1#3}
+%% I.e., current content of #1 is stored in #2, then
+%% #1 attains the content of #3.
+%%
+%% ==== General Settings for Typesetting Stage ====
+%% % %% 2011/01/01: %% 2011/01/02: wrong!
+%% % With 'ednotes', it turns out that the heading is not quite
+%% % correct, 'ednotes'' special `\newlabel' mechanism evaluates
+%% % `\getpagewiselinelabel' already for building its note
+%% % info macros at the first reading of the `.aux' file.
+%%
+%% %% 2010/12/27:
+%% Oh my dear, it seems that all the switching
+%% for the footnote variant of `pagewise' must be global
+%% (I can't find something useful using `\aftergroup' quickly).
+%% Therefore, I render 'lineno''s |\setpagewisenumbers|
+%% acting globally:
+\renewcommand*\setpagewiselinenumbers{%
+ \global\let \theLineNumber \thePagewiseLineNumber
+ \global\let \c@linenumber \c@pagewiselinenumber
+ \global\let \makeLineNumber \makePagewiseLineNumber
+}
+%% I just force this, hehe ...
+\setpagewiselinenumbers
+%% As a counterpart to `\c@pagelinenumber',
+%% |\c@footnotelinenumber| is reserved for the
+%% absolute footnote line numbers:
+\newcount\c@footnotelinenumber
+%% %% 2011/01/01 severe-bug fix, why didn't show up?:
+%% |\FNLN@@cache| stores `\NumberedPageCache'
+%% as from ``main" mode:
+\let \FNLN@@cache \NumberedPageCache
+%% |\FNLN@cache| stores `\NumberedPageCache'
+%% as from ``footnote" mode; its initial content is the
+%% counterpart or analogue to `\LN@Pfirst':
+\def \FNLN@cache {\FLN@Pfirst}
+%% %% 2010/12/28:
+%% |\FNLN@foot@cache| and |\FNLN@main@cache|
+%% switch |\NumberedPageCache|:
+\def \FNLN@foot@cache {%
+ \GStoreUse \NumberedPageCache \FNLN@@cache \FNLN@cache}
+\def \FNLN@main@cache {%
+ \GStoreUse \NumberedPageCache \FNLN@cache \FNLN@@cache}
+%% |\FNLN@labels| will be the counterpart to
+%% 'lineno.sty''s `\@LN@labellist':
+\global\let \FNLN@labels \@empty
+%% |\FNLN@vadjusts| will be the counterpart to
+%% 'lineno''s `\@LN@vadjustlist':
+\global\let \FNLN@vadjusts \@empty
+%% %% separation for referencing 2010/12/28:
+%% Settings for footnote line numbers first resemble
+%% `\setpagewiselinenumbers'; but more changes
+%% are needed, and results from main text numbering
+%% must be stored.
+%% Some of the settings are needed \emph{locally} for
+%% generating numbers for labels, collected in
+%% |\setgetfootnotelinenumbers|; for this purpose
+%% nothing must be stored explicitly:
+\newcommand* \setgetfootnotelinenumbers {%
+%% Change of `\theLineNumber' is omitted as we are \emph{reading},
+%% not writing a label.
+ \let\c@linenumber\c@footnotelinenumber
+% \let\makeLineNumber\makeFootnoteLineNumber
+%% But in fact, |\makeFootnoteLineNumber| and
+%% |\makePagewiseLineNumber| will be the same.
+%% The difference is made by the choice of
+%% |\FNLN@first@numbered| and |\NumberedPageCache|
+%% for the line range searches.
+ \let \FNLN@first@numbered \FLN@Pfirst
+ \let \FNLN@finish \FNLN@add
+}
+%% |\setfootnotelinenumbers| performs all the settings
+%% for typesetting footnotes in line numbering mode
+%% \emph{globally},
+%% including storing results from typesetting main text:
+\newcommand* \setfootnotelinenumbers {%
+ \globaldefs\@ne
+%% The previous line also renders `\setgetfootnotelinenumbers' global:
+ \setgetfootnotelinenumbers
+%% |\theLineNumber| is used for `\linelabel' entries.
+%% `\thePagewiseLineNumber' is replaced by
+%% |\theFootnoteLineNumber|:
+ \let\theLineNumber\theFootnoteLineNumber
+%% Logging to `.aux':
+ \def \FNLN@log {\string\@FLN}%
+%% %% 2010/12/28:
+%% Starting range search: |\NumberedPageCache|
+ \FNLN@foot@cache
+%% Reusing 'lineno''s task list operations:
+ \GStoreUse \@LN@labellist \FNLN@@labels \FNLN@labels
+ \GStoreUse \@LN@vadjustlist \FNLN@@vadjusts \FNLN@vadjusts
+ \globaldefs\z@
+}
+%% For switching back to ``main text mode,"
+%% again some settings may need a local variant---for
+%% processing line references from footnotes to main text!
+%% This is the purpose of |\setgetpagewiselinenumbers|:
+\newcommand* \setgetpagewiselinenumbers {%
+ \let \FNLN@first@numbered \LN@Pfirst
+ \let \FNLN@finish \@gobbletwo
+}
+%% |\unsetfootnotelinenumbers| stores the ``current"
+%% page with footnote lines and loads the ``most recent"
+%% page with main text lines---and more ...:
+\newcommand* \unsetfootnotelinenumbers {%
+ \gdef \FNLN@log {\string\@LN}%
+ \FNLN@main@cache
+%% Task lists: %% 2010/12/28
+ \GStoreUse \@LN@labellist \FNLN@labels \FNLN@@labels
+ \GStoreUse \@LN@vadjustlist \FNLN@vadjusts \FNLN@@vadjusts
+ \globaldefs\@ne \setgetpagewiselinenumbers \globaldefs\z@ %% v0.53
+ \setpagewiselinenumbers
+}
+%% |\makeFootnoteLineNumber| actually only copies
+%% |\makePagewiseLineNumber|, different results are obtained
+%% be changing hooks. The command first calls
+%% logging---|\logtheLineNumber|,
+%% then generating the ``public" line number---|\getLineNumber|
+%% (which in turn only is a copy of |\testNumberedPage|
+%% in 'lineno.sty').
+\@ifdefinable\makeFootnoteLineNumber
+ {\let \makeFootnoteLineNumber \makePagewiseLineNumber}
+%%
+%% ==== Logging ====
+%% |\logtheLineNumber| is redefined to log both
+%% main text and footnote line numbers.
+\def \logtheLineNumber {%
+ \protected@write\@auxout{}{%
+ \FNLN@log{\the\c@linenumber}{\noexpand\the\c@LN@truepage}}}
+%% |\FNLN@log| is the hook for the difference,
+%% its default expansion |\@LN| is made for
+%% \emph{main text} line numbers:
+\gdef \FNLN@log {\string\@LN}
+%%
+%% ==== ``Public" Line Numbers ====
+%% Fortunately, these commands don't need to know much about
+%% name spaces. The interfaces to them are
+%% |\NumberedPageCache|---changing globally---and
+%% |\FNLN@first@numbered|. Our
+%% |\FNLN@cache| is initialized
+%% by analogy to its counterpart `\NumberedPageCache'
+%% (a minute name space change):
+\def \FNLN@cache {\FLN@Pfirst}
+%% |\testFirstNumberedPage{<integer>}| from 'lineno.sty'
+%% is modified by replacing `\LN@Pfirst' only:
+\renewcommand* \testFirstNumberedPage [1]{%
+ \ifnum#1>\c@linenumber
+ \def\nextLN##1{%
+ \testNextNumberedPage\FNLN@first@numbered}%
+ \else
+ \let\nextLN\@gobble
+ \def\pageLN{\gotNumberedPage{#1}}%
+ \fi}
+%% |\testNumberedPage| and |\testNextNumberedPage| from 'lineno'
+%% don't need any modification. |\testLastNumberedPage|
+%% is modified in 'edfnotes.sty'. %% 2011/01/07
+%%
+%% |\gotNumberedPage| just needs a closing hook
+%% `\FNLN@finish' to allow for footnote lines.
+\renewcommand* \gotNumberedPage [4]{%
+ \oddNumberedPagefalse
+ \ifodd \if@twocolumn #3\else #2\fi\relax\oddNumberedPagetrue\fi
+ \advance\c@linenumber\@ne
+ \ifcolumnwiselinenumbers
+ \subtractlinenumberoffset{#1}%
+ \else
+ \subtractlinenumberoffset{#4}%
+ \fi
+% \show\FNLN@finish
+ \FNLN@finish{#2}{#3}%
+}
+%% |\FNLN@finish{<page>}{<column>}| gobbles both
+%% arguments with \emph{main} text lines,
+%% but will add the number of main text lines to
+%% \emph{footnote} line numbers:
+\global\let \FNLN@finish \@gobbletwo
+%% Then it will act as |\FNLN@add|. We run the page info macro
+%% for the same page (column; if defined).
+\newcommand* \FNLN@add [2]{%
+ \expandafter \let\expandafter \@tempa\csname LN@P#1C#2\endcsname
+ \ifx\@tempa\relax
+ \else
+ \advance\c@linenumber\@ne
+ \ifcolumnwiselinenumbers
+ \let\firstLN\subtractlinenumberoffset
+%% ... rather assuming `\realpagewiselinenumbers'.
+ \let\pageLN\@gobblethree
+ \else
+ \let\firstLN\@gobble
+ \def\pageLN##1##2##3{\subtractlinenumberoffset{##3}}%
+ \fi
+ \def\lastLN##1{\subtractlinenumberoffset{-##1}}%
+ \let\nextLN\@gobble
+%% ... TODO all needed?
+ \@tempa
+ \fi
+}
+%%
+%% ==== Referencing ====
+%% Now that we are using two separate counters for main text lines
+%% and footnote lines (v0.5), correct references to footnote lines
+%% using |\linelabel| and `\ref' need further adjustments.
+%% %
+%% 'lineno.sty''s `\thePagewiseLineNumber'
+%% and `\getpagewiselinenumber{<integer>}'
+%% are generalized and re-implemented
+%% % by |\theWiseLineNumber| and |\getwiselinenumber|
+%% by macros that then serve to implement
+%% referring to footnote line numbers.
+%%
+%% |\theWiseLineNumber{<trans>}| leaves a `\protect'ed call
+%% to a one-parameter macro <trans> in the `.aux' file:
+\newcommand* \theWiseLineNumber [1]{\protect #1{\the\c@linenumber}}
+%% |\getwiselinenumber{<choice>}{<integer>}| executes <choice>
+%% before applying `\testNumberedPage' to <integer>---within
+%% a local group:
+\newcommand* \getwiselinenumber [2]{{%
+%% Some wisdom is needed to take account of the current
+%% ``numbering state" from which `\ref' was called.
+%% \begin{description}
+%% \item[Referring to main text line:]\leavevmode
+%% \begin{itemize}
+%% \item Unless called from numbered footnote,
+%% no extra care is needed.
+%% \item If called from numbered footnote,
+%% `\setgetpagewiselinenumbers'
+%% and temporary switching of `\NumberedPageCache'
+%% is needed.
+%% \end{itemize}
+%% \item[Referring to footnote line:]\leavevmode
+%% \begin{itemize}
+%% \item If called from numbered footnote,
+%% no extra care is needed.
+%% \item Otherwise, `\setgetfootnotelinenumbers'
+%% and temporary switching of `\NumberedPageCache'
+%% is needed.
+%% \end{itemize}
+%% \end{description}
+ \ifx#1\relax %% to main text
+ \if@FNLN@sw@ %% from footnote
+ \setgetpagewiselinenumbers
+ \FNLN@main@cache
+ \let \FNLN@restore@cache \FNLN@foot@cache
+ \fi
+ \else %% to footnote
+ \if@FNLN@sw@ \else %% from elsewhere
+ #1%
+ \FNLN@foot@cache
+ \let \FNLN@restore@cache \FNLN@main@cache
+ \fi
+ \fi
+ \c@linenumber #2\relax\testNumberedPage
+ \thelinenumber
+ \FNLN@restore@cache
+}}
+\let \FNLN@restore@cache \relax
+%% |\getpagewiselinenumber| doesn't need any <choice>---we
+%% assume that the label was written in the default `pagewise'
+%% mode (but it is difficult, though, `\relax' is essential!):
+% \renewcommand* \getpagewiselinenumber {\getwiselinenumber\relax} %!!
+%% 2010/12/31, a compatibility problem with 'ednotes'' `\newlabel'
+%% mechanism shows up. 'ednotes' ``undefines" `\getpagewiselinenumber'
+%% and restores it only `\AtBeginDocument'. We must ensure that
+%% 'ednotes' will not override our new version of
+%% `\getpagewiselinenumber'.
+%% (TODO in my view another motivation to write ``ready" numbers
+%% without `\getpagewiselinenumbers' directly.)
+%%
+%% We might assume that 'ednotes' (if at all) is loaded directly
+%% and loads 'lineno.sty'
+%% (that is the usual and recommended way of using 'ednotes')
+%% and that this will happen before 'fnlineno.sty' is loaded.
+%% But now that we have spent some time understanding the
+%% situation, we can deal with the case as well that 'lineno.sty'
+%% is loaded first, then 'fnlineno.sty' is loaded, and then 'ednotes'.
+%% (I have assumed earlier that 'fnlineno.sty' is loaded after
+%% 'lineno.sty' ...)
+\AtBeginDocument{%
+ \def \getpagewiselinenumber {\getwiselinenumber\relax}% sic!
+ \let \@EN@getpagewiselno \getpagewiselinenumber}
+%% For |\thePagewiseLineNumber|, <trans> is `\getpagewiselinenumber':
+\renewcommand* \thePagewiseLineNumber {%
+ \theWiseLineNumber\getpagewiselinenumber}
+%% |\getfootnotelinenumber{<integer>}| considers <integer>
+%% the absolute number of a \emph{footnote} line. The <choice>
+%% therefore is `\setgetfootnotelinenumbers':
+\newcommand* \getfootnotelinenumber {%
+ \getwiselinenumber\setgetfootnotelinenumbers}
+%% Finally, |\theFootnoteLineNumber| is how `\linelabel'
+%% refers to a \emph{footnote} line. `\theWiseLineNumber'
+%% is called with <trans> being `\getfootnotelinenumber':
+\newcommand* \theFootnoteLineNumber {%
+ \theWiseLineNumber\getfootnotelinenumber}
+%%
+%% === Leaving the Package File ===
+\endinput
+%%
+%% == Acknowledgements ==
+%% %% 2010/12/19
+%% On the 'texhax' mailing list, Boris Veytsman recommended
+%% using Victor \mbox{Eijk}\-hout's \textit{\TeX\ by Topic} to me,
+%% and Andrej Lapshin pointed me to David Salomon's work
+%% on output routines
+%% (TUGboat 1990 and 1994, also available as a book,
+%% as Ulrich Dirr tells me).
+%% It helped me a lot to read about output routines
+%% in these works, beyond the \TeX book.
+%% The abbreviations \lq OTR\rq\ and \lq MVL\rq\ are
+%% Salomon's.---And %% added 2010/12/27
+%% recall Christian's work and support
+%% by the DFG named at the start of the package file.---And
+%% ... the ideas of how to implement
+%% (\textit i)~attaching line numbers,
+%% (\textit{ii})~`\linelabel', and
+%% (\textit{iii})~numbering lines ``pagewise"---so flexibly,
+%% compatibly with many other \LaTeX\ packages, still
+%% are Stephan's ...
+%%
+%% == VERSION HISTORY ==
+v0.1 2010/12/08 very first, \linelabel works in footnote
+ SENT TO Christian, problems with "long" footnotes
+
+v0.2 2010/12/08 corr. "manifoot"
+ 2010/12/09 moving doc. from .tex to here,
+ different doc. sectioning;
+ \@footnotetext modified (user feature!);
+ \@doclearpage NOT modified!; \if@FNLN@placing@
+ 2010/12/10 ignore dummy footnote split;
+ \FNLNpar, \AutoPars, \ExplicitPars,
+ more on limitations
+ 2010/12/11 more trying, almost anew ...
+ JUST STORED
+
+v0.3 2010/12/12 new approach, removed much before proceeding
+ 2010/12/13 -- this was putting \box\footins onto MVL,
+ bad with those penalties
+ JUST STORED
+
+v0.4 2010/12/14 another new approach:
+ typeset footnote on MVL immediately --
+ described strategy
+ 2010/12/15 ... continued, choice of hooking into \output
+ (...swap...)
+ 2010/12/16 ... continued; rearranged sections ...
+ \FNLN@@fntext vs. ...ltx...
+ 2010/12/17 success with \pagegoal ...; \GStoreReg etc.;
+ ...@fntext shortened
+ 2010/12/18 another two limitations: \pagebreak in fn.,
+ guessed/tested; another note to <register>;
+ ack. Christian; directed -> organized!?
+ SENT TO Christian/Stephan
+
+v0.41 2010/12/19 support of \pagebreak with \if@FNLN@sw@ etc.;
+ TODO on lists of <register>s
+ 2010/12/20 debugging: \if...true; \setbox...ft;
+ \@finalstrut in vmode exported to finstrut.sty;
+ notes on how v0.41 still fails with \pagebreak
+ 2010/12/21 additional notes on *two* \pagebreak's
+
+v0.5 2010/12/21 restructuring doc., check@latex@ -> check@,
+ own account of lineno's pagewise mode
+ 2010/12/22 ... continued ...
+ 2010/12/23 ... continued ...
+ 2010/12/24 ... continued ...
+ 2010/12/25 moved this to pwlineno, replaced ...
+ more on \FNLN@typeset, + \setfootnotelinenumbers
+ 2010/12/26 new summary of implementation,
+ rearranged code sections; logging settled
+v0.51 2010/12/27 "build" settled, typesetting, logging reformated;
+ ack.s: "recall"; all settings global,
+ "public" works
+ JUST STORED, MARGINAL NUMBERS OK,
+ \linelabel in footnote broken
+ [2010/12/28]
+v0.52 2010/12/28 own label and vadjust lists for footnotes;
+ local settings for referencing,
+ tool and care for global changes (...Cache)
+ (TODO write ready in .aux? needs another run)
+ \linelabel's ok, MARGINAL NOTES MAIN BROKEN
+v0.53 2010/12/28 debugging; OK; minor doc. modifications;
+ less "limitations"; \\[\smallskipamount]
+ TO CHRISTIAN 2010-12-29
+v0.54 2010/12/31 typo options; \FNLN@text without arg,
+ \getpagewiselinenumber with ednotes
+ 2011/01/01 \FNLN@cache, \FNLN@@cache initialized;
+ doc. "Typesetting Stage" qualification
+ 2011/01/02 that qualification was wrong
+ 2011/01/03 samepage@hook
+ TO CHRISTIAN SAME DAY
+v0.55 2011/01/04 samepage@hook emptied here as well;
+ 2011/01/06 edited version history
+ 2011/01/07 note on \if@FNLN@sw@ with v0.5;
+ finally without support for samepage@hook!
+ note on \testLastNumberedPage
+ PART OF EDFN RELEASE r0.5 (together with edfnotes v0.2)
+v0.55a 2011/02/09 corr. owner; "Limitations" updated; \pagebreak
diff --git a/Master/texmf-dist/tex/latex/lineno/vplref.sty b/Master/texmf-dist/tex/latex/lineno/vplref.sty
index 51dd815bd48..d3b0697f131 100644
--- a/Master/texmf-dist/tex/latex/lineno/vplref.sty
+++ b/Master/texmf-dist/tex/latex/lineno/vplref.sty
@@ -1,7 +1,7 @@
%% `vplref.sty'
%% -- extended line number referencing with lineno.sty.
-\def\filedate{2005/04/25} \def\fileversion{0.2}
+\def\filedate{2005/04/25} \def\fileversion{0.2a}
%% Copyright (C) 2004, 2005 Uwe Lueck,
%% http://contact-ednotes.sty.de.vu --author-maintained
@@ -38,7 +38,8 @@
%% IMPLEMENTATION:
\NeedsTeXFormat{LaTeX2e}[1994/12/01] %% \Declare...*
-\ProvidesPackage{vplref}[\filedate\space v\fileversion]
+\ProvidesPackage{vplref}[\filedate\space v\fileversion \space
+ page-line cross-refs] %% UL 2011/02/13
\AtBeginDocument{\RequirePackage{lineno,varioref}}
@@ -69,4 +70,5 @@ v0.1 2004/10/19 First, sent to Sergei Mariev.
v0.11 2004/10/19 Fit to recent varioref version;
sent to Sergei.
v0.2 2005/04/25 \Require... \AtBeginDocument.
+v0.2a 2011/02/13 add. caption to \ProvidesPackage