diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/ednotes/lblchng1.sty |
Initial commit
Diffstat (limited to 'macros/latex/contrib/ednotes/lblchng1.sty')
-rw-r--r-- | macros/latex/contrib/ednotes/lblchng1.sty | 260 |
1 files changed, 260 insertions, 0 deletions
diff --git a/macros/latex/contrib/ednotes/lblchng1.sty b/macros/latex/contrib/ednotes/lblchng1.sty new file mode 100644 index 0000000000..379a7a5654 --- /dev/null +++ b/macros/latex/contrib/ednotes/lblchng1.sty @@ -0,0 +1,260 @@ +%% LblChng1.sty--tell about the first changed LaTeX label. +\def\fileversion{0.32c} \def\filedate{2005/10/01} + +%% Copyright (C) 2005 Uwe L\"uck +%% Munich, http://contact-ednotes.sty.de.vu. +%% Current maintainer is Uwe L\"uck. + +%% 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.3a of the License, or any later version. +%% We did our best to help you, but there is NO WARRANTY. + +%% * SUMMARY: * +%% +% This package is intended to be a (primitive) tool for +% fixing oscillating page breaks -- a problem that especially +% sometimes occurs in typesetting critical editions. Thus it +% addresses especially users of LaTeX packages lineno, ednotes, +% and ledmac (maybe even manyfoot and numline). When it has been +% invoked and some label(s) get an entry in the .aux file +% differing, with respect to page number, to that of the +% previous run, the first such label is reported on screen (and +% in the .log), including the differing page numbers. This +% should help in finding the first unstable page -- which is +% vital. The file also contains rather detailed explanations and +% discussions. +% +%% * CRITICAL EDITIONS, PACKAGES: * +%% +% For informations about macro packages mentioned in the present +% text, or about critical edition typesetting in general, I +% refer you to the web page http://ednotes.sty.de.vu . +% +%% * THE PROBLEM TO BE SOLVED: * +%% +% Sometimes it happens that LaTeX's final warning "Label(s) may +% have changed. Rerun to get cross-references right." appears at +% *every* run, i.e., rerunning doesn't help. Or instead, it may +% be noticed that certain cross-references keep being wrong. +% The only reason I know of is that the runs oscillate between +% two decisions about what material should be put onto a certain +% page. And the only reason I know for this is that the space +% consumed by some cross-reference depends on the page breaking. +% I know this problem from critical edition typesetting. +% +%% * OUTLINE of the SOLUTION offered here: * +%% +% I simply propose that the user makes up her mind on the nasty +% page breaks and forces some at a certain lines, or contributes +% her opinion, through \pagebreak (or maybe even \nopagebreak, I +% have no idea whether this can be useful). -- A float (`figure' +% or `table') may contribute to the problem as well, so you may +% move its LaTeX code or change the placement options (through +% the brackets argument). +% +% Typically, one position of such oscillating causes further +% page breaking oscillations for many ensuing pages, yielding a +% bunch of wrong cross-references and countings. Of course, the +% user then should settle the first occurrence of oscillating +% before bothering with others -- all the rest of them may +% disappear when the first one is fixed. +% +% One problem with this solution ("?") is that it may be +% bothersome to find out where the first oscillation occurs +% indeed (by looking through the .dvi's or .pdf's). The present +% package tries to help with this. +% +% With Peter R. Wilson's ledmac, you have the "ballast" +% procedure for influencing page breaks. (It is due to John +% Lavagnino, Dominik Wujastyk, and Wayne Sullivan, inherited +% from EDMAC). It saves you from looking for good positions for +% \pagebreak's. I might offer something similar (with +% lineno.sty/ednotes.sty). However, I would like to object that +% the "ballast" procedure chooses between two page break +% possibilities rather "by chance" (reinforcing the first break +% idea encountered while the other idea might turn out to be +% better). But I must concede: One of the two breaks between the +% runs oscillate may turn out not to work, or even both of them +% -- when the cross-references have been adjusted to that +% decision. The "ballast" procedure may then save some time for +% you. On the other hand, if *both* decisions turn out not to +% work, I wonder whether the "ballast" method will certainly +% find a working one. +% +%% * USAGE: * +%% +% 1. \usepackage{lblchng1} in every LaTeX document that you +% create, or in every critical edition LaTeX document that you +% create, or only when you run into the problem of not settling +% label definitions. (Hope that you then remember that there is +% such a package!) +% +% 2a. You will be told about the page numbers where some \label +% (or, with Stephan I. B\"ottcher's lineno.sty or its extension +% ednotes.sty, some \linelabel) appears. Observe the page breaks +% in the .dvi's or .pdf's in the corresponding region. Note that +% the passage which causes the oscillation may be a number of +% pages earlier than the page number mentioned in the warning. +% (Sorry, this is the price of cheapness.) You can get rid of +% the warning without fixing the real problem -- fixing a late +% page break preceding the \label -- but this may cause badly +% filled pages earlier. So it will be wise to identify the very +% first passage causing oscillating page breaks. -- Another +% conjecturing hint: According to the diagnosis that I delivered +% above, the first oscillation happens near a cross-reference +% whose length varies due to the oscillation. So look for some +% \ref (or \lineref) referring forward(!). If you are lucky, the +% \ref refers to the label whose change has been warned about. +% +% 2b. If you are working with *ednotes.sty*: ednotes.sty v1.1 +% does something similar with internal informations about each +% note, and it delivers a similar message on screen and in .log. +% It reports on three page numbers. However, the first +% oscillation happens (I think) at most one page before the +% reported ones. +% +% 3a. As indicated above, try to force a certain page break at +% this passage through \pagebreak (or \nopagebreak?) -- or +% change the position of a `figure' or `table' in code or in +% output (brackets argument), if it seems to contribute to the +% problem. Concerning \pagebreak (\nopagebreak), I personally +% also think of using the optional argument in the brackets, +% while I feel unable to judge the value of this. -- I also +% recommend that you use \typeout near the \pagebreak or so to +% remind yourself of the \pagebreak -- in case the \pagebreak +% after some changes suddenly produces a very bad page break +% and you don't examine the output with sufficient carefulness, +% being in a hurry, e.g. +% +% 3b. With *ledmac*, you may experiment with the "ballast" +% amount until that first oscillation stops. +% +%% * A minor WARNING: * (LaTeX version) +%% +% A remark as of 1995/07/13 in ltmiscen.dtx makes me wonder +% whether the present package works with older versions of +% LaTeX. +% +%% * CRITICAL EDITIONS: * (lineno.sty, ednotes.sty, ledmac) +%% +% 1. With Stephan I. B\"ottcher's lineno.sty and its extension +% ednotes.sty, oscillating page breaking also results in wrong +% pagewise numbering of lines and in wrongly placed-and-numbered +% footnotes. I am thinking of refining lineno.sty in addition to +% the present package. On the other hand, I conjecture that +% wrong pagewise numbering is *always* (at least sufficiently +% often) closely accompanied by oscillating cross-references, so +% the present package may offer sufficient help. -- Well, sorry, +% this may remain being true with respect to lineno.sty, but +% since March 2005, ednotes.sty treats its internal line number +% references in a way that makes them "invisible" to +% lblchng1.sty. This is very necessary for huge editions with, +% say, 10.000 notes or more, for a memory capacity reason. +% ednotes.sty uses an own procedure to detect page number +% changes, to which lblchng1.sty adds perhaps only little. +% +% 2. I guess that even ledmac users may find the present package +% useful, to find out where they have to watch when trying to +% adjust the "ballast" appropriately. However, its usefulness +% depends on how dense LaTeX \label's appear in the edited text. +% Indeed, it is the pages with the numerous critical footnotes +% fall where oscillations are likely to occur. \label's may be +% here when the comments refer to certain sections etc. of the +% edited text, OK, but will they? The line number references +% preceding the single notes (just on these "critical" -- in +% two senses -- pages) might be much more helpful, yet they are, +% with ledmac.sty, not implemented by \label. And it is wise not +% to implement them by \label, similarly as with ednotes.sty +% above. (ednotes.sty still uses \label, to be sure, but it +% redefines \newlabel in a way that is specific to ednotes.sty's +% way of storing data about the notes.) +% +%% * WONDERING REMARK: * +%% +% Oscillating label definitions do not necessarily result in +% anything wrong. The page number in the label definition may +% oscillate while not being used by any \pageref. -- I have no +% idea at present what this tells us to do if it happens so ... +% +%% * ACKNOWLEDGEMENTs: * +%% +% This package is due to Roy Flechner's confidence in our +% ednotes.sty and to frightening observations he reported to +% us. Thanks also to Peter Wilson for moral support. + +%% Please send comments via http://contact-ednotes.sty.de.vu. + +%% * IMPLEMENTATION: * %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\NeedsTeXFormat{LaTeX2e}[1994/10/30] +%% <- \@onelevel@sanitize; also \CheckCommand \reserved@a. +\ProvidesPackage{lblchng1}[\filedate\space\fileversion\space + ^^Jexhibiting first changed label] + +%% * Main idea: * +% Testing on label changes is done by \@testdef -- at least I +% assume this here (and I will somewhat check it). I refine it +% so it shows the label name and the page numbers -- clearly, +% what could I do else? (Well, I could redefine \label so ...) +% +%% If LaTeX's \@testdef changes, the present package may better +%% be updated: +\CheckCommand*\@testdef[3]{% + \def\reserved@a{#3}\expandafter \ifx \csname #1@#2\endcsname + \reserved@a \else \@tempswatrue \fi} +\def\@testdef#1#2#3{%% This is what I expect LaTeX to use. + \@ifundefined{#1@#2}\@tempswatrue{%% Like LaTeX: + \def\@tempa{#3}% + \expandafter + \ifx \csname #1@#2\endcsname \@tempa + \else \@tempswatrue +%% v0.3: moved disabling \@newl@bel from here to below. + \fi %% But now: +%% To be sure, I additionally assume that the page number is the +%% second thing, and more. I have had bad experience with +%% hyperref and thus do not assume that there are just two +%% things in the last argument of \newlabel. + \def\@tempb##1##2##3\@nil##4{% + \def##4{##2}\@onelevel@sanitize##4}% +%% Well, why not use some initially defined \@LC@extractpno +%% instead of this \@tempb? %% TODO +%% -- With modern large and fast TeX versions, one should not +%% waste a second with such considerations. -- However: +%% different effects concerning compatibility. + \expandafter \@tempb \@tempa \@nil\@tempa + \expandafter\expandafter\expandafter + \@tempb \csname#1@#2\endcsname \@nil\@tempb + \ifx\@tempa\@tempb \else + \typeout{^^JPackage `lblchng1':^^J% + *** Page number of label `#2' is changing: ***^^J% + \space\space\space\space + was \@tempb, will be \@tempa.^^JWatch whether + this stops and references get right.}% +%% Further testing wouldn't change anything: + \def\@newl@bel{\@gobblefour\relax}\fi}} +%% Warning: this could create an incompatibility with some other +%% package or with some LaTeX version. +%% Again: this extra line doesn't pay well nowadays. + +\endinput + +VERSION HISTORY: + +v0.1 2005/02/15 First release for Roy Flechner. +v0.2b 2005/02/16 Attempt at \getpagewiselinenumbers -- in + vain. Improved explanations. +v0.2 2005/02/17 Changed implementation back; but keep + completely disabling \newlabel after the + report. Only page numbers are reported. + (CTAN and ednotes.news received slightly + different explanations than Roy Flechner.) +v0.3 2005/02/17 \@newl@ble turned off with page no. change + only. Doc. warns on compatibility. +v0.31 2005/02/27 Additional line on screen. +v0.32 2005/03/08 Adapted explanations to ednotes.sty v1.1; + warned about usefulness with critical + editions. Changed some headings. + Acknowledgements. +v0.32a 2005/03/21 Minor corrections. +v0.32c 2005/10/01 Another typo fix. |