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/latex209/contrib/window |
Initial commit
Diffstat (limited to 'macros/latex209/contrib/window')
-rw-r--r-- | macros/latex209/contrib/window/window.sty | 206 | ||||
-rw-r--r-- | macros/latex209/contrib/window/window.tex | 70 |
2 files changed, 276 insertions, 0 deletions
diff --git a/macros/latex209/contrib/window/window.sty b/macros/latex209/contrib/window/window.sty new file mode 100644 index 0000000000..43b201b689 --- /dev/null +++ b/macros/latex209/contrib/window/window.sty @@ -0,0 +1,206 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% This is WINDOW.STY (Elmar Schal\"uck Apr 1991) % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\message{This is WINDOW.STY by Elmar Schalueck April 1991} +% These routines and macros are mainly due to Alan Hoenig +% I myself found them in a lovely book named +% \TeX: applications, uses, methods (Malcolm Clark, ed.), +% Horwood, New York 1990 +% Please report errors, suggestions for better versions, etc. to +% elmar@uni-paderborn.de +% +\newdimen\@totalheight % the height of the included box +\newdimen\@wordskip % interspace between box and text +\newcount\@numberlines % lines corresponding to boxheight +\newdimen\@tempdim % vskip box to have middle height +\def\z@pt{0pt} +\newdimen\point@strut % help dimension +\newdimen\strut@depth \newdimen\strut@height % approximate values +\newcount\n@ % count value for parshaping +\newcount\old@vbadness % backup value +\newcount\@top % number of full lines +\newcount\@window % number of window lines +\newdimen\shave@height % backup values +\newdimen\old@split@top@skip \newdimen\old@prevdepth +\newdimen\old@lineskip +\newdimen\@side % length of windowtext left and right +\newdimen\left@side \newdimen\right@side % text left and right +\newcount\ratio@left % ratio of text left versus right +\newcount\ratio@right +\newcount\ratio@sum +\newcount\ratio@zero % instead of a \newif +\newtoks\parshape@spec % build the wanted parshape +\newbox\window@parbox % the textbox with empty window +\newbox\left@box % help box to reassemble line +\newbox\right@box +\newbox\build@par % text before reassembling +\newbox\in@window % what to put in the window +% +\def\windowbox[toplines: #1][inwindow: #2][ratio: #3 #4]#5\par{% +% #1 number of lines before the window starts +% #2 what will be displayed in the window +% #3 how many parts of the text will be on the left side of the window +% #4 how many parts of the text will be on the right side of the window +% #5 the actual text of the window +\old@vbadness=\vbadness \vbadness=10000 +\@top=#1 +\setbox\in@window\hbox{#2} +\ratio@left=#3 +\ratio@right=#4 +\ratio@zero=0 % ratio@zero = 0 iff text appears on + % both sides of the window and cutting + % and reassembling must be done. +\ifnum\ratio@left=0\ratio@zero=1\fi +\ifnum\ratio@right=0\ratio@zero=1\fi +\calculate@dimens % collect all values that are necessary +\create@parshapespec % create the parshape of the text +\setbox\build@par=\vbox{\parshape=\n@ \the\parshape@spec \strut#5} + % build the paragraph +\ifnum\ratio@zero=1 +\let\window@parbox=\build@par % the paragraph is ok +\else\open@window\fi % cut and reassemble +\vskip0.5\@tempdim +\vskip\@top\baselineskip % place the box inside the window +\noindent +\ifnum\ratio@left=0 +\else\hskip\left@side +\hskip\@wordskip +\fi +\box\in@window % jump back to the normal beginning of +\par\nobreak % the paragraph. Avoid page breaks +\vskip-0.5\@tempdim +\vskip-\@totalheight +\vskip-\@top\baselineskip +\box\window@parbox % place the actual text +\vbadness=\old@vbadness % restore old settings +\splittopskip=\old@split@top@skip +} +% +\def\open@window{% % cut and paste +\old@split@top@skip=\splittopskip \global\splittopskip=0pt +\ifnum\@top=0 +\old@prevdepth=\strut@depth\else +\shave@height=\@top\baselineskip +\advance\shave@height by-\strut@depth +\global\setbox\window@parbox=\vsplit\build@par to \shave@height +\old@prevdepth=\dp\window@parbox +\fi +%% \window@parbox contains the top part of the paragraph +\count10=\@numberlines % for lines := 1 to @numberlines do +\shave@height=\strut@height +\loop \setbox\left@box=\vsplit\build@par to\shave@height +\setbox\right@box=\vsplit\build@par to\shave@height +%% the left and the right boxes of one line are built +\advance\count10 by-1 \make@line[\left@box,\right@box] +%% now they are reassembled +\ifnum\@top=0 % if in first line without toplines +\ifnum\count10=\@numberlines +\global\setbox\window@parbox\vbox{\box0} % initiate window@parbox +\else\addline@to@windowpar % else addlines +\fi +\else\addline@to@windowpar +\fi +\ifnum\count10>0 \repeat % end of window-loop +%% \window@parbox has the window part too +%% paste the bottom +\old@lineskip=\lineskip +\global\setbox\window@parbox=\vbox{\prevdepth=\old@prevdepth% +\lineskip=1.5pt % This value doesn't seem to fit + % for big fontsizes +\unvbox\window@parbox\box\build@par} +\lineskip=\old@lineskip +} +% +\def\calculate@dimens{% +\setbox0\hbox{[} % to calculate strut@height and strut@depth +\point@strut=\baselineskip +\advance\point@strut by -\ht0 +\advance\point@strut by -\dp0 +\divide\point@strut by 2 +\global\strut@height=\ht0 % just approximate values +\global\strut@depth=\dp0 +\global\advance\strut@height by\point@strut +\global\advance\strut@depth by\point@strut +\global\setbox\strutbox=\hbox{\vrule height\strut@height +depth\strut@depth width0pt} % adjust the \strutbox +\global\@totalheight=\ht\in@window +\global\advance\@totalheight by\dp\in@window % the total height of the + % included window +\global\@numberlines=\@totalheight +\global\divide\@numberlines by\baselineskip +\global\@tempdim=\baselineskip +\global\multiply\@tempdim by-\@numberlines +\global\advance\@tempdim by\@totalheight +\ifdim\@tempdim>0.3pt% + \global\advance\@numberlines by 1 + \global\@tempdim=\baselineskip + \global\multiply\@tempdim by\@numberlines + \global\advance\@tempdim by-\@totalheight +\fi % number of lines for the window + % and additional vskip for window +\global\@wordskip=\fontdimen2\font +\global\@window=\@numberlines +\global\@side=\hsize +\global\advance\@side by-\wd\in@window +\global\advance\@side by-\@wordskip +\ifnum\ratio@zero=0\global\advance\@side by-\@wordskip\fi +\ratio@sum=\ratio@left +\advance\ratio@sum by\ratio@right +\global\left@side=\@side +\global\multiply\left@side by\ratio@left +\global\divide\left@side by\ratio@sum +\global\right@side=\@side +\global\multiply\right@side by\ratio@right +\global\divide\right@side by\ratio@sum % left side and right side + % according to the chosen ratio +} +% +\def\create@parshapespec{% +\global\n@=\@top % number of lines for parshape +\global\advance\n@ by\@window +\ifnum\ratio@zero=0\global\advance\n@ by\@window\fi +\global\advance\n@ by1 +\global\parshape@spec={} % initialize parshape@spec +\count10=\@top % for i := 1 to @top do +\ifnum\@top>0{ % add complete lines to shape +\loop \global\parshape@spec=\expandafter{\the\parshape@spec \z@pt\hsize} +\advance\count10 by-1 \ifnum\count10>0 \repeat +}\fi +\count10=\@window % for i := 1 to @window do +\loop % add two shorter lines +\ifnum\ratio@zero=0 % both ratio values \neq 0 +\global\parshape@spec=\expandafter{\the\parshape@spec +\z@pt\left@side \z@pt\right@side} +\else % one ratio value is zero +\ifnum\ratio@left=0 +\@side=\hsize\advance\@side by-\right@side % window at the left side +\global\parshape@spec=\expandafter{\the\parshape@spec +\@side\right@side}\fi +\ifnum\ratio@right=0\global\parshape@spec=\expandafter{\the\parshape@spec +\z@pt\left@side}\fi % window at the right side +\fi +\advance\count10 by-1 \ifnum\count10>0 \repeat % end of loop +\global\parshape@spec=\expandafter{\the\parshape@spec \z@pt\hsize} +} % add full line to shape +% +% unwrap the vertical glue and remove the final glue +\def\unwrap#1#2{\unvbox#1 \setbox#1=\lastbox +\setbox#1=\hbox to#2{\strut\unhbox#1 \unskip}% +} +% +% make a line of two halfs +\def\make@line[#1,#2]{% +\unwrap\left@box\left@side \unwrap\right@box\right@side +\setbox0=\hbox to\hsize{\box#1\hss\box#2}% +} +% +\def\addline@to@windowpar{% add the reassembled lines to the output +\global\setbox\window@parbox=\vbox{\prevdepth=\old@prevdepth +\unvbox\window@parbox \box0}% +\old@prevdepth=\dp\window@parbox +} +% +% + diff --git a/macros/latex209/contrib/window/window.tex b/macros/latex209/contrib/window/window.tex new file mode 100644 index 0000000000..b19069f73f --- /dev/null +++ b/macros/latex209/contrib/window/window.tex @@ -0,0 +1,70 @@ +\documentstyle[window]{article} +\begin{document} +This is a test of the new technique for building +windows. Use them to display pictures in text. + +\windowbox[toplines: 2][inwindow: {\fbox{\Huge\shortstack{H\\e\\l\\l\\o}}}]% +[ratio: 2 1]% +London. Mich\ae{}lmas Term lately over, and the Lord Chancellor sitting +in Lincoln's Inn Hall. Implacable November weather. As much mud in the +streets, as if the waters had but newly retired from the face of the +earth, and it would not be wonderful to meet a Megalosaurus, forty feet +long or so, waddling like an elephantine lizard up Holborn Hill. Smoke +lowering down from chimney-pots, making a soft black drizzle, with +flakes of soot in it as big as full-grown snow-flakes --- gone into +mourning, one might imagine, for the death of the sun. Dogs, +indistinguishable in mire. Horses, scarcely better; splashed to their +very blinkers. Foot passengers, jostling one another's umbrellas, in a +general infection of ill-temper, and losing their foot-hold at +street-corners, where tens of thousands of other foot passengers habe +been slipping and sliding since the day broke (if this day ever broke), +adding new deposits to the crust upon crust of mud, sticking at those +points tenaciously to the pavement, and accumulating at compound +interest. + +\parskip1ex +\large +\windowbox[toplines: 0][inwindow: {\fbox{\Huge\shortstack{H\\e\\l\\l\\o}}}]% +[ratio: 0 1]% +London. Mich\ae{}lmas Term lately over, and the Lord Chancellor sitting +in Lincoln's Inn Hall. Implacable November weather. As much mud in the +streets, as if the waters had but newly retired from the face of the +earth, and it would not be wonderful to meet a Megalosaurus, forty feet +long or so, waddling like an elephantine lizard up Holborn Hill. Smoke +lowering down from chimney-pots, making a soft black drizzle, with +flakes of soot in it as big as full-grown snow-flakes --- gone into +mourning, one might imagine, for the death of the sun. Dogs, +indistinguishable in mire. Horses, scarcely better; splashed to their +very blinkers. Foot passengers, jostling one another's umbrellas, in a +general infection of ill-temper, and losing their foot-hold at +street-corners, where tens of thousands of other foot passengers habe +been slipping and sliding since the day broke (if this day ever broke), +adding new deposits to the crust upon crust of mud, sticking at those +points tenaciously to the pavement, and accumulating at compound +interest. +\par + +\small +\windowbox[toplines: 3][inwindow: {\fbox{\huge Hello}}]% +[ratio: 1 0]% +London. Mich\ae{}lmas Term lately over, and the Lord Chancellor sitting +in Lincoln's Inn Hall. Implacable November weather. As much mud in the +streets, as if the waters had but newly retired from the face of the +earth, and it would not be wonderful to meet a Megalosaurus, forty feet +long or so, waddling like an elephantine lizard up Holborn Hill. Smoke +lowering down from chimney-pots, making a soft black drizzle, with +flakes of soot in it as big as full-grown snow-flakes --- gone into +mourning, one might imagine, for the death of the sun. Dogs, +indistinguishable in mire. Horses, scarcely better; splashed to their +very blinkers. Foot passengers, jostling one another's umbrellas, in a +general infection of ill-temper, and losing their foot-hold at +street-corners, where tens of thousands of other foot passengers habe +been slipping and sliding since the day broke (if this day ever broke), +adding new deposits to the crust upon crust of mud, sticking at those +points tenaciously to the pavement, and accumulating at compound +interest. +\par + +I hope these three examples make clear, what possibilties you have and +how these routines are used. +\end{document} |