%D \module %D [ file=typo-bal, %D version=2024.11.27, %D title=\CONTEXT\ Typesetting Macros, %D subtitle=Balancing, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \writestatus{loading}{ConTeXt Typesetting Macros / Balancing} \unprotect %D Experimental: %D %D \starttyping %D \starttext %D %D \definebalancing %D [demo] %D %D \setupbalancing %D [demo] %D [align={tolerant,stretch}, %D after=\page] %D %D \startbalancing[demo][1] %D \dorecurse {10} { %D \samplefile{tufte}\par %D \startlinecorrection %D \externalfigure[dummy] %D \stoplinecorrection %D \samplefile{ward}\par %D }% %D \stopbalancing %D %D \startbalancing[demo] %D \dorecurse {5} { %D \blank %D \samplefile{knuthmath} %D }% %D \stopbalancing %D %D \startbalancing[demo][2] %D \dorecurse {12} { %D \samplefile{ward}\par %D \startlinecorrection %D \externalfigure[dummy] %D \stoplinecorrection %D \samplefile{davis}\par %D }% %D \stopbalancing %D %D \startsetups MyBalance %D \balancetolerance 2000 %D \balanceemergencystretch 2\lineheight %D \balancebottomskip 0pt plus 2\lineheight %D \stopsetups %D %D \placebalancing[demo] % [setups=MyBalance] %D %D \stoptext %D \stoptyping % todo: \newmvl % todo: more than two \installcorenamespace{balancing} \installcommandhandler \??balancing {balancing} \??balancing \setupbalancing [\c!distance=\emwidth, \c!height=\textheight, \c!setups=, \c!n=\plustwo] % \appendtoks % \to \everydefinebalancing \permanent\tolerant\protected\def\startbalancing[#1]#*[#2]% [name] [n] | [name] | [n] {\par \begingroup \ifchknumber#2\or \scratchcounter\lastchknumber \cdef\currentbalancing{#1}% \orelse\ifchknumber#1\or \scratchcounter\lastchknumber \lettonothing\currentbalancing \orelse\ifparameter#1\or \scratchcounter\plusone \cdef\currentbalancing{#1}% \else \scratchcounter\plusone \lettonothing\currentbalancing \fi \setrigidcolumnhsize\hsize{\balancingparameter\c!distance}\plustwo % {\balancingparameter\c!n}% \usealignparameter\balancingparameter \beginmvl \scratchcounter} \permanent\protected\def\stopbalancing {\endmvl \endgroup \par} \permanent\tolerant\protected\def\placebalancing[#1]#*[#2]% {\begingroup \cdef\currentbalancing{#1}% \ifparameter#2\or \setupcurrentbalancing[#2]% \fi % todo: loop and use box stack \setbox\scratchboxone \flushmvl \plusone \setbox\scratchboxtwo \flushmvl \plustwo % % \ifcstok{\balancingparameter\c!height}\v!max % % can overflow so we need slack % \balancevsize\htdp\ifdim\htdp\scratchboxone>\htdp\scratchboxtwo\scratchboxone\else\scratchboxtwo\fi % \else % \balancevsize\lastnamedcs % \fi % \balancevsize {\balancingparameter\c!height}% \balancetolerance \plustwothousand \balanceemergencystretch 2\lineheight \balancetopskip \strutht \balancebottomskip \zeropoint \s!plus 2\lineheight % \usesetupsparameter\balancingparameter % \setbox\scratchboxthree\ifvoid\scratchboxone\voidbox\else\vbalance\scratchboxone exactly\relax\fi \setbox\scratchboxfour \ifvoid\scratchboxtwo\voidbox\else\vbalance\scratchboxtwo exactly\relax\fi % \doloop { \ifvoid\scratchboxthree \ifvoid\scratchboxfour \donefalse \else \donetrue \fi \else \donetrue \fi \ifdone \balancingparameter\c!before\relax \hpack to \hsize \bgroup \setrigidcolumnhsize\hsize{\balancingparameter\c!distance}\plustwo % {\balancingparameter\c!n}% \hbox to \hsize{\ifvoid\scratchboxthree\else\vbalancedtop\scratchboxthree\fi}% \hss \hbox to \hsize{\ifvoid\scratchboxfour \else\vbalancedtop\scratchboxfour \fi}% \egroup \balancingparameter\c!after\relax \else \exitloop \fi }% \endgroup} %D \starttyping %D \definebalancing %D [demo] %D [align={tolerant,stretch}, %D after=\page] %D %D \startbalancing[demo][1] %D \samplefile{tufte}\par %D \the\prevdepth\par %D \stopbalancing %D \startbalancing[demo][2] %D xxxxxxxxxxxxxx %D \stopbalancing %D \startbalancing[demo] %D \the\prevdepth\par %D \samplefile{knuthmath} %D \stopbalancing %D %D \placebalancing[demo] %D %D \samplefile{tufte}\par %D \the\prevdepth\par %D \the\prevdepth\par %D \samplefile{knuthmath} %D \stoptyping \protect \endinput % timestamp: Nov 2024, LEPROUS – Atonement (Drum Playthrough by Baard Kolstad)