texlive[59106] Master/texmf-dist: pbalance (6may21)
commits+karl at tug.org
commits+karl at tug.org
Thu May 6 22:24:08 CEST 2021
Revision: 59106
http://tug.org/svn/texlive?view=revision&revision=59106
Author: karl
Date: 2021-05-06 22:24:08 +0200 (Thu, 06 May 2021)
Log Message:
-----------
pbalance (6may21)
Modified Paths:
--------------
trunk/Master/texmf-dist/doc/latex/pbalance/LICENSE
trunk/Master/texmf-dist/doc/latex/pbalance/README.md
trunk/Master/texmf-dist/doc/latex/pbalance/pbalance.pdf
trunk/Master/texmf-dist/source/latex/pbalance/pbalance.dtx
trunk/Master/texmf-dist/source/latex/pbalance/pbalance.ins
trunk/Master/texmf-dist/tex/latex/pbalance/pbalance.sty
Modified: trunk/Master/texmf-dist/doc/latex/pbalance/LICENSE
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pbalance/LICENSE 2021-05-06 20:23:54 UTC (rev 59105)
+++ trunk/Master/texmf-dist/doc/latex/pbalance/LICENSE 2021-05-06 20:24:08 UTC (rev 59106)
@@ -1,7 +1,7 @@
-Copyright 2020 Nelson Lago <lago at ime.usp.br>
+Copyright 2020-2021 Nelson Lago <lago at ime.usp.br>
This work may be distributed and/or modified under the conditions of the
-LaTeX Project Public License, either version 1.3 of this license or (at
+LaTeX Project Public License, either version 1.3c of this license or (at
your option) any later version. The latest version of this license can be
found at http://www.latex-project.org/lppl.txt and version 1.3 or later
is part of all distributions of LaTeX version 2005/12/01 or later.
Modified: trunk/Master/texmf-dist/doc/latex/pbalance/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pbalance/README.md 2021-05-06 20:23:54 UTC (rev 59105)
+++ trunk/Master/texmf-dist/doc/latex/pbalance/README.md 2021-05-06 20:24:08 UTC (rev 59106)
@@ -13,8 +13,8 @@
Code etc: <https://gitlab.com/lago/pbalance>
-Copyright 2020 Nelson Lago <lago at ime.usp.br>
+Copyright 2020-2021 Nelson Lago <lago at ime.usp.br>
This work may be distributed and/or modified under the conditions of the
-LaTeX Project Public License, either version 1.3 of this license or (at
+LaTeX Project Public License, either version 1.3c of this license or (at
your option) any later version.
Modified: trunk/Master/texmf-dist/doc/latex/pbalance/pbalance.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/source/latex/pbalance/pbalance.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/pbalance/pbalance.dtx 2021-05-06 20:23:54 UTC (rev 59105)
+++ trunk/Master/texmf-dist/source/latex/pbalance/pbalance.dtx 2021-05-06 20:24:08 UTC (rev 59106)
@@ -1,8 +1,8 @@
% \iffalse meta-comment
-% Copyright 2020 Nelson Lago <lago at ime.usp.br>
+% Copyright 2020-2021 Nelson Lago <lago at ime.usp.br>
%
% This work may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License, either version 1.3 of this license or (at
+% LaTeX Project Public License, either version 1.3c of this license or (at
% your option) any later version. The latest version of this license can be
% found at http://www.latex-project.org/lppl.txt and version 1.3 or later
% is part of all distributions of LaTeX version 2005/12/01 or later.
@@ -15,7 +15,7 @@
% \iffalse
%
%<package>\NeedsTeXFormat{LaTeX2e}[2015/01/01]
-%<package>\ProvidesPackage{pbalance}[2020/12/16 v1.0.1 Poor man's balance]
+%<package>\ProvidesPackage{pbalance}[2021/04/26 v1.1.0 Poor man's balance]
%
%<*driver>
@@ -26,24 +26,15 @@
\urlstyle{sf}
\usepackage{hyperref}
\hypersetup{
- pdfborder={0 0 .6},
- pdfborderstyle={/S/U/W .6},
- urlbordercolor=DodgerBlue,
- citebordercolor=White,
- linkbordercolor=White,
- filebordercolor=White,
+ colorlinks=true,
+ citecolor=DarkGreen,
+ linkcolor=NavyBlue,
+ urlcolor=DarkRed,
+ filecolor=green,
+ anchorcolor=black,
}
\usepackage[draft]{pbalance}
-\makeatletter
-\dimgdef\@PBtmpHeight{0pt}
-\dimgdef\@PBtmpLeftHeight{0pt}
-\dimgdef\@PBtmpLeftFloatsHeight{0pt}
-\dimgdef\@PBtmpRightHeight{0pt}
-\dimgdef\@PBtmpRightFloatsHeight{0pt}
-\dimgdef\@PBtmpUsedLeft{0pt}
-\dimgdef\@PBtmpUsedRight{0pt}
-\makeatother
\usepackage{libertinus}
\usepackage[scale=.85]{sourcecodepro}
@@ -66,6 +57,7 @@
%
% \changes{v1.0}{2020/09/14}{Initial version}
% \changes{v1.0.1}{2020/12/16}{Improvements to documentation}
+% \changes{v1.1.0}{2021/04/26}{Do not crash in one-column mode}
%
% \GetFileInfo{pbalance.sty}
%
@@ -131,7 +123,7 @@
% need for extra passes during document preparation.
%
% If the last page does not have floats, footnotes, or marginpars, the
-% package simply uses \verb|\balance|, from the \texttt{balance} package;
+% package simply uses \verb|\balance|, from the \texttt{balance} package,
% otherwise it uses its own algorithm. You may instead use
% \verb|\shrinkLastPage{some-measurement}| to manually define how much
% shorter the first column of the last page should be. This, however, will
@@ -138,6 +130,14 @@
% not eliminate the need for extra passes (the package needs to find out
% which page is the last).
%
+% The package actually balances the last \emph{text} page; if the last
+% page is a float page, it is ignored. It also \emph{should} work if you
+% switch to single-column mode mid-document (with \verb|\onecolumn|); it
+% will then balance the last two-column text page. The same should happen
+% in a document that is mainly typeset in one column and you switch to
+% two-column layout (with \verb|\twocolumn|), but \emph{only} if the page
+% to be balanced does \emph{not} contain the \verb|\twocolumn| command.
+%
% If there are many floats near the end of the document, the \LaTeX{}
% float placement parameters (\verb|\topfraction|, \verb|topnumber|,
% etc.) may interfere negatively with the algorithm. In some rare
@@ -171,12 +171,13 @@
%
% \begin{enumerate}
%
-% \item It uses a \LaTeX{} pass to gather information: which is the last page?
-% Does it have floats? Footnotes? How much free space in each column?
+% \item It uses a \LaTeX{} pass to gather information: which is the last
+% two-column text page? Does it have floats? Footnotes? How much
+% free space in each column?
%
-% \item It uses this information in a subsequent pass to balance the last
+% \item It uses this information in a subsequent pass to balance that
% page. If there are no floats or footnotes, it uses the balance
-% package; otherwise it uses the measurements collected to shrink
+% package, otherwise it uses the measurements collected to shrink
% the first column (using \verb|\enlargethispage|) by a
% ``reasonable'' amount.
%
@@ -198,10 +199,10 @@
% To prevent this, it would be ideal to only start the process after all
% passes needed to stabilize the document have run. In practice, however,
% this would be too hard to detect (and demand even more passes). What
-% we do instead is simply wait for two consecutive passes to result
-% in columns of the same size in the last page. When this happens, we
-% proceed to balance in the next pass and assume (quite reasonably) that,
-% as long as the document is not modified, the effect of concurrent
+% we do instead is simply wait for two consecutive passes to result in
+% columns of the same size in the last two-column page. When this happens,
+% we proceed to balance in the next pass and assume (quite reasonably)
+% that, as long as the document is not modified, the effect of concurrent
% changes during that pass in the last page is small, so ignoring it
% disturbs the balancing only slightly\footnote{Like I said on the
% introduction: this package is a hack.}.
@@ -212,9 +213,6 @@
%
% \begin{itemize}
%
-% \item add \verb|\if at twocolumn| tests to prevent crashes and
-% other problems;
-%
% \item add options to (1) allow using the balance package on pages with
% floats and (2) completely disable the balance package;
%
@@ -237,11 +235,12 @@
% \section{The implementation}
%
% We define \verb|\@PBlastPage| using \texttt{zref-abspage}; It is the page
-% number for the last page of text. This might \emph{not} be the last page
-% of the document: there may be one or more float pages after it. Still,
-% it \emph{is} the page we want to balance. We do not act on it, however;
-% instead, we save its value to the aux file as \verb|\@PBprevLastPage| and
-% proceed to balance on the next \LaTeX{} pass.
+% number for the last two-column page of text. This might \emph{not} be the
+% last page of the document: there may be one or more float pages after it
+% or the user may have issued \verb|\onecolumn|. Still, it \emph{is} the page
+% we want to balance. We do not act on it, however; instead, we save its value
+% to the aux file as \verb|\@PBprevLastPage| and proceed to balance on the next
+% \LaTeX{} pass.
%
% We also define two toggles:
%
@@ -320,7 +319,7 @@
{#2}
{
% abspage refers to the finished page, not the nascent page
- \ifnumcomp{\@PBprevLastPage - 1}{=}{\value{abspage}}
+ \ifnumcomp{\@PBprevLastPage - 1}{=}{\value{abspage}}
{#1}
{#2}
}
@@ -429,10 +428,10 @@
% For the mechanism above to work, we need to know:
%
% \begin{enumerate}
-% \item The page number of the last page;
-% \item Whether the last page has floats, footnotes etc.;
-% \item The available height in the last page;
-% \item The height of the columns in the last page.
+% \item The page number of the last two-column text page;
+% \item Whether it has floats, footnotes etc.;
+% \item The available height in it;
+% \item The height of the columns in it.
% \end{enumerate}
%
% Let's collect this info for every page.
@@ -601,25 +600,30 @@
\ExplSyntaxOn
\AtBeginShipout{
- \ifboolexpr
- {
- % A float page is not the last text page, ignore
- togl {@PBtmpIsFloatPage}
- or
- % A page with a float column on the left and an empty
- % column on the right is not the last text page, ignore
- (
- togl {@PBtmpHasFloatcol}
- and
- test {\ifdimcomp{\@PBtmpUsedRight}{=}{\topskip}}
- )
- }
- {}
- {
- % This page is a candidate to be the last page
- \xdef\@PBlastPage{\the\value{abspage}}
- \@PBcopyPageData{tmp}{candidate}
- }
+ % It only makes sense to consider pages that actually have two
+ % columns. LaTeX3 does not do short-circuit evaluation, so we
+ % cannot add this test to the ifboolexpr below.
+ \if at twocolumn
+ \ifboolexpr
+ {
+ % A float page is not the last text page, ignore
+ togl {@PBtmpIsFloatPage}
+ or
+ % A page with a float column on the left and an empty
+ % column on the right is not the last text page, ignore
+ (
+ togl {@PBtmpHasFloatcol}
+ and
+ test {\ifdimcomp{\@PBtmpUsedRight}{=}{\topskip}}
+ )
+ }
+ {}
+ {
+ % This page is a candidate to be the last two-column text page
+ \xdef\@PBlastPage{\the\value{abspage}}
+ \@PBcopyPageData{tmp}{candidate}
+ }
+ \fi
% Reset before processing next page
\global\togglefalse{@PBtmpHasFloats}
@@ -635,8 +639,8 @@
% \end{macrocode}
%
-% All pages processed, the last candidate page is actually the last page.
-% Instead of continuing to use the \texttt{@PBcandidate*} macros we already
+% All pages processed, the last candidate page is actually the last two-column
+% page. Instead of continuing to use the \texttt{@PBcandidate*} macros we already
% have, we will keep the information we just gathered associated with the
% page number. We do this because, in the future, we may want to add suport
% for balancing multiple pages (such as the last page of each chapter) and
@@ -645,14 +649,20 @@
%
% \begin{macrocode}
-\AfterLastShipout{\@PBcopyPageData{candidate}{pg\@Roman{\@PBlastPage}}}
+\AfterLastShipout{
+ % If there are no two-column pages in the
+ % document, there is no candidate page.
+ \ifcsdef{@PBlastPage}
+ {\@PBcopyPageData{candidate}{pg\@Roman{\@PBlastPage}}}
+ {}
+}
% \end{macrocode}
%
% \subsubsection{Saving measurements}
% The whole document has already been processed and data about the last
-% page has been collected in macros with names \texttt{@PBpgNUM*}. We now
-% process this collected data and save whatever is relevant in the aux
+% two-column page has been collected in macros with names \texttt{@PBpgNUM*}.
+% We now process this collected data and save whatever is relevant in the aux
% file for the next \LaTeX{} pass.
%
% In the first \LaTeX{} pass, we will save data to the aux file in macros
@@ -978,19 +988,25 @@
\newcommand\@PBsaveUnbalancedInfo[1][]{
- \immediate\write\@mainaux{\gdef\string\@PBprevLastPage{\@PBlastPage}}
+ % If there are no two-column pages in the
+ % document, there is nothing to save.
+ \ifcsdef{@PBlastPage}
+ {
+ \immediate\write\@mainaux{\gdef\string\@PBprevLastPage{\@PBlastPage}}
- \ifboolexpr{test {\ifdefvoid{\@PBprevLastPage}} or test {\ifstrequal{#1}{update}}}
- % Columns are currently unbalanced, either because this is
- % the first pass (we do not have any previous information)
- % or because the document has not stabilized yet, so any
- % previous information is unreliable. Save the information
- % we just collected as ``unbalanced''.
- {\@PBsavePageDataAs{pg\@Roman{\@PBlastPage}}{unbalpg\@Roman{\@PBlastPage}}}
- % Not the first pass, so columns are possibly balanced;
- % to save the unbalanced information, repeat what was
- % gathered during the first pass.
- {\@PBsavePageData{unbalpg\@Roman{\@PBprevLastPage}}}
+ \ifboolexpr{test {\ifdefvoid{\@PBprevLastPage}} or test {\ifstrequal{#1}{update}}}
+ % Columns are currently unbalanced, either because this is
+ % the first pass (we do not have any previous information)
+ % or because the document has not stabilized yet, so any
+ % previous information is unreliable. Save the information
+ % we just collected as ``unbalanced''.
+ {\@PBsavePageDataAs{pg\@Roman{\@PBlastPage}}{unbalpg\@Roman{\@PBlastPage}}}
+ % Not the first pass, so columns are possibly balanced;
+ % to save the unbalanced information, repeat what was
+ % gathered during the first pass.
+ {\@PBsavePageData{unbalpg\@Roman{\@PBprevLastPage}}}
+ }
+ {}
}
\def\@PBsaveBalancedInfo{
@@ -1002,8 +1018,14 @@
\def\@PBnotifyRerun{
\AtVeryEndDocument{
- \PackageWarningNoLine{pbalance}
- {Last page columns not balanced. Rerun LaTeX}
+ % If there are no two-column pages in the document,
+ % it makes no sense to emit this warning.
+ \ifcsdef{@PBlastPage}
+ {
+ \PackageWarningNoLine{pbalance}
+ {Last two-column page cols not balanced. Rerun LaTeX}
+ }
+ {}
}
}
Modified: trunk/Master/texmf-dist/source/latex/pbalance/pbalance.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/pbalance/pbalance.ins 2021-05-06 20:23:54 UTC (rev 59105)
+++ trunk/Master/texmf-dist/source/latex/pbalance/pbalance.ins 2021-05-06 20:24:08 UTC (rev 59106)
@@ -1,7 +1,7 @@
-%% Copyright 2020 Nelson Lago <lago at ime.usp.br>
+%% Copyright 2020-2021 Nelson Lago <lago at ime.usp.br>
%%
%% This work may be distributed and/or modified under the conditions of the
-%% LaTeX Project Public License, either version 1.3 of this license or (at
+%% LaTeX Project Public License, either version 1.3c of this license or (at
%% your option) any later version. The latest version of this license can be
%% found at http://www.latex-project.org/lppl.txt and version 1.3 or later
%% is part of all distributions of LaTeX version 2005/12/01 or later.
@@ -16,10 +16,10 @@
\usedir{tex/latex/pbalance}
\preamble
-Copyright 2020 Nelson Lago <lago at ime.usp.br>
+Copyright 2020-2021 Nelson Lago <lago at ime.usp.br>
This work may be distributed and/or modified under the conditions of the
-LaTeX Project Public License, either version 1.3 of this license or (at
+LaTeX Project Public License, either version 1.3c of this license or (at
your option) any later version. The latest version of this license can be
found at http://www.latex-project.org/lppl.txt and version 1.3 or later
is part of all distributions of LaTeX version 2005/12/01 or later.
Modified: trunk/Master/texmf-dist/tex/latex/pbalance/pbalance.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/pbalance/pbalance.sty 2021-05-06 20:23:54 UTC (rev 59105)
+++ trunk/Master/texmf-dist/tex/latex/pbalance/pbalance.sty 2021-05-06 20:24:08 UTC (rev 59106)
@@ -5,10 +5,10 @@
%% The original source files were:
%%
%% pbalance.dtx (with options: `package')
-%% Copyright 2020 Nelson Lago <lago at ime.usp.br>
+%% Copyright 2020-2021 Nelson Lago <lago at ime.usp.br>
%%
%% This work may be distributed and/or modified under the conditions of the
-%% LaTeX Project Public License, either version 1.3 of this license or (at
+%% LaTeX Project Public License, either version 1.3c of this license or (at
%% your option) any later version. The latest version of this license can be
%% found at http://www.latex-project.org/lppl.txt and version 1.3 or later
%% is part of all distributions of LaTeX version 2005/12/01 or later.
@@ -18,7 +18,7 @@
%% The Current Maintainer of this work is Nelson Lago <lago at ime.usp.br>.
%%
\NeedsTeXFormat{LaTeX2e}[2015/01/01]
-\ProvidesPackage{pbalance}[2020/12/16 v1.0.1 Poor man's balance]
+\ProvidesPackage{pbalance}[2021/04/26 v1.1.0 Poor man's balance]
\RequirePackage{etoolbox}
\RequirePackage{expl3}
@@ -290,25 +290,30 @@
\ExplSyntaxOn
\AtBeginShipout{
- \ifboolexpr
- {
- % A float page is not the last text page, ignore
- togl {@PBtmpIsFloatPage}
- or
- % A page with a float column on the left and an empty
- % column on the right is not the last text page, ignore
- (
- togl {@PBtmpHasFloatcol}
- and
- test {\ifdimcomp{\@PBtmpUsedRight}{=}{\topskip}}
- )
- }
- {}
- {
- % This page is a candidate to be the last page
- \xdef\@PBlastPage{\the\value{abspage}}
- \@PBcopyPageData{tmp}{candidate}
- }
+ % It only makes sense to consider pages that actually have two
+ % columns. LaTeX3 does not do short-circuit evaluation, so we
+ % cannot add this test to the ifboolexpr below.
+ \if at twocolumn
+ \ifboolexpr
+ {
+ % A float page is not the last text page, ignore
+ togl {@PBtmpIsFloatPage}
+ or
+ % A page with a float column on the left and an empty
+ % column on the right is not the last text page, ignore
+ (
+ togl {@PBtmpHasFloatcol}
+ and
+ test {\ifdimcomp{\@PBtmpUsedRight}{=}{\topskip}}
+ )
+ }
+ {}
+ {
+ % This page is a candidate to be the last two-column text page
+ \xdef\@PBlastPage{\the\value{abspage}}
+ \@PBcopyPageData{tmp}{candidate}
+ }
+ \fi
% Reset before processing next page
\global\togglefalse{@PBtmpHasFloats}
@@ -323,7 +328,13 @@
\ExplSyntaxOff
-\AfterLastShipout{\@PBcopyPageData{candidate}{pg\@Roman{\@PBlastPage}}}
+\AfterLastShipout{
+ % If there are no two-column pages in the
+ % document, there is no candidate page.
+ \ifcsdef{@PBlastPage}
+ {\@PBcopyPageData{candidate}{pg\@Roman{\@PBlastPage}}}
+ {}
+}
\AfterLastShipout{
@@ -544,19 +555,25 @@
\newcommand\@PBsaveUnbalancedInfo[1][]{
- \immediate\write\@mainaux{\gdef\string\@PBprevLastPage{\@PBlastPage}}
+ % If there are no two-column pages in the
+ % document, there is nothing to save.
+ \ifcsdef{@PBlastPage}
+ {
+ \immediate\write\@mainaux{\gdef\string\@PBprevLastPage{\@PBlastPage}}
- \ifboolexpr{test {\ifdefvoid{\@PBprevLastPage}} or test {\ifstrequal{#1}{update}}}
- % Columns are currently unbalanced, either because this is
- % the first pass (we do not have any previous information)
- % or because the document has not stabilized yet, so any
- % previous information is unreliable. Save the information
- % we just collected as ``unbalanced''.
- {\@PBsavePageDataAs{pg\@Roman{\@PBlastPage}}{unbalpg\@Roman{\@PBlastPage}}}
- % Not the first pass, so columns are possibly balanced;
- % to save the unbalanced information, repeat what was
- % gathered during the first pass.
- {\@PBsavePageData{unbalpg\@Roman{\@PBprevLastPage}}}
+ \ifboolexpr{test {\ifdefvoid{\@PBprevLastPage}} or test {\ifstrequal{#1}{update}}}
+ % Columns are currently unbalanced, either because this is
+ % the first pass (we do not have any previous information)
+ % or because the document has not stabilized yet, so any
+ % previous information is unreliable. Save the information
+ % we just collected as ``unbalanced''.
+ {\@PBsavePageDataAs{pg\@Roman{\@PBlastPage}}{unbalpg\@Roman{\@PBlastPage}}}
+ % Not the first pass, so columns are possibly balanced;
+ % to save the unbalanced information, repeat what was
+ % gathered during the first pass.
+ {\@PBsavePageData{unbalpg\@Roman{\@PBprevLastPage}}}
+ }
+ {}
}
\def\@PBsaveBalancedInfo{
@@ -568,8 +585,14 @@
\def\@PBnotifyRerun{
\AtVeryEndDocument{
- \PackageWarningNoLine{pbalance}
- {Last page columns not balanced. Rerun LaTeX}
+ % If there are no two-column pages in the document,
+ % it makes no sense to emit this warning.
+ \ifcsdef{@PBlastPage}
+ {
+ \PackageWarningNoLine{pbalance}
+ {Last two-column page cols not balanced. Rerun LaTeX}
+ }
+ {}
}
}
More information about the tex-live-commits
mailing list.