From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Mon, 2 Sep 2019 13:46:59 +0900
Subject: Initial commit

---
 macros/lamstex/inputs/places.tex | 288 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 288 insertions(+)
 create mode 100644 macros/lamstex/inputs/places.tex

(limited to 'macros/lamstex/inputs/places.tex')

diff --git a/macros/lamstex/inputs/places.tex b/macros/lamstex/inputs/places.tex
new file mode 100644
index 0000000000..99a523c6de
--- /dev/null
+++ b/macros/lamstex/inputs/places.tex
@@ -0,0 +1,288 @@
+\catcode`\@=11
+\long\def\islandpairdata#1#2{{\data@true
+ \place@true
+ #1%
+ \global\setbox\islandboxi\box\islandbox@
+ \global\setbox\captionboxi\box\Captionbox@
+ #2%
+ \global\setbox\islandboxii\box\islandbox@
+ \global\setbox\captionboxii\box\Captionbox@
+ }}
+\long\def\islandpairbox#1#2{\islandpairdata{#1}{#2}%
+ \dimen@\ht\captionboxi
+ \ifdim\ht\captionboxii>\dimen@\dimen@\ht\captionboxii\fi
+ \ifdim\dimen@>\z@
+  \ifdim\ht\captionboxi<\dimen@
+   \global\setbox\captionboxi\vbox to\dimen@{\unvbox\captionboxi\vfil}\fi
+  \ifdim\ht\captionboxii<\dimen@
+   \global\setbox\captionboxii\vbox to\dimen@{\unvbox\captionboxii\vfil}\fi
+ \fi
+ \global\setbox\islandbox@\vbox
+ {\hbox to\hsize{\hfil\box\islandboxi\hfil\box\islandboxii\hfil}%
+ \ifdim\dimen@>\z@\nointerlineskip
+ {\rm\global\skipi@\dp\strutbox}\global\advance\skipi@\medskipamount
+  \vskip\skipi@
+  \hbox to\hsize{\hfil\box\captionboxi\hfil\box\captionboxii\hfil}\fi}}	
+\long\def\islandpairboxa#1#2{\islandpairdata{#1}{#2}%
+ \dimen@\ht\captionboxi
+ \ifdim\ht\captionboxii>\dimen@\dimen@\ht\captionboxii\fi
+ \ifdim\dimen@>\z@
+  \ifdim\ht\captionboxi<\dimen@
+   \global\setbox\captionboxi\vbox to\dimen@{\vfil\unvbox\captionboxi}\fi
+  \ifdim\ht\captionboxii<\dimen@
+   \global\setbox\captionboxii\vbox to\dimen@{\vfil\unvbox\captionboxii}\fi
+ \fi
+ \dimen@ii\ht\islandboxi
+ \ifdim\ht\islandboxii>\dimen@ii \dimen@ii\ht\islandboxii\fi
+ \ifdim\dimen@ii>\z@
+  \ifdim\ht\islandboxi<\dimen@ii
+   \global\setbox\islandboxi\vbox to\dimen@ii{\box\islandboxi\vfil}\fi
+  \ifdim\ht\islandboxii<\dimen@ii
+   \global\setbox\islandboxii\vbox to\dimen@ii{\box\islandboxii\vfil}\fi
+ \fi
+ \global\setbox\islandbox@\vbox{\ifdim\dimen@>\z@
+  \hbox to\hsize{\hfil\box\captionboxi\hfil\box\captionboxii\hfil}%
+  \nointerlineskip{\rm\global\skipi@-\dp\strutbox}%
+  \global\advance\skipi@\bigskipamount\vskip\skipi@\fi
+  \hbox to\hsize{\hfil\box\islandboxi\hfil\box\islandboxii\hfil}}}
+\long\def\islandtripledata#1#2#3{{\data@true\place@true
+ #1%
+ \global\setbox\islandboxi\box\islandbox@
+ \global\setbox\captionboxi\box\Captionbox@
+ #2%
+ \global\setbox\islandboxii\box\islandbox@
+ \global\setbox\captionboxii\box\Captionbox@
+ #3%
+ \global\setbox\islandboxiii\box\islandbox@
+ \global\setbox\captionboxiii\box\Captionbox@
+ }}
+\long\def\islandtriplebox#1#2#3{\islandtripledata{#1}{#2}{#3}%
+ \dimen@\ht\captionboxi
+ \ifdim\ht\captionboxii>\dimen@ \dimen@\ht\captionboxii\fi
+ \ifdim\ht\captionboxiii>\dimen@ \dimen@\ht\captionboxiii\fi
+ \ifdim\dimen@>\z@
+  \ifdim\ht\captionboxi<\dimen@
+   \global\setbox\captionboxi\vbox to\dimen@{\unvbox\captionboxi\vfil}\fi
+  \ifdim\ht\captionboxii<\dimen@
+   \global\setbox\captionboxii\vbox to\dimen@{\unvbox\captionboxii\vfil}\fi
+  \ifdim\ht\captionboxiii<\dimen@
+   \global\setbox\captionboxiii\vbox to\dimen@{\unvbox\captionboxiii\vfil}\fi
+ \fi
+ \global\setbox\islandbox@\vbox
+  {\hbox to\hsize{\hfil\box\islandboxi\hfil\box\islandboxii\hfil
+   \box\islandboxiii\hfil}%
+ \ifdim\dimen@>\z@\nointerlineskip
+  {\rm\global\skipi@\dp\strutbox}\global\advance\skipi@\medskipamount
+  \vskip\skipi@
+  \hbox to\hsize{\hfil\box\captionboxi\hfil\box\captionboxii\hfil
+   \box\captionboxiii\hfil}\fi}}
+\def\islandtripleboxa#1#2#3{\islandtripledata{#1}{#2}{#3}%
+ \dimen@\ht\captionboxi
+ \ifdim\ht\captionboxii>\dimen@ \dimen@\ht\captionboxii\fi
+ \ifdim\ht\captionboxiii>\dimen@ \dimen@\ht\captionboxiii\fi
+ \ifdim\dimen@>\z@
+  \ifdim\ht\captionboxi<\dimen@
+   \global\setbox\captionboxi\vbox to\dimen@{\vfil\unvbox\captionboxi}\fi
+  \ifdim\ht\captionboxii<\dimen@
+   \global\setbox\captionboxii\vbox to\dimen@{\vfil\unvbox\captionboxii}\fi
+  \ifdim\ht\captionboxiii<\dimen@
+   \global\setbox\captionboxiii\vbox to\dimen@{\vfil\unvbox\captionboxiii}\fi
+ \fi
+ \dimen@ii\ht\islandboxi
+ \ifdim\ht\islandboxii>\dimen@ii \dimen@ii\ht\islandboxii\fi
+ \ifdim\ht\islandboxiii>\dimen@ii \dimen@ii\ht\islandboxiii\fi
+ \ifdim\dimen@ii>\z@
+  \ifdim\ht\islandboxi<\dimen@ii
+   \global\setbox\islandboxi\vbox to\dimen@ii{\box\islandboxi\vfil}\fi
+  \ifdim\ht\islandboxii<\dimen@ii
+   \global\setbox\islandboxii\vbox to\dimen@ii{\box\islandboxii\vfil}\fi
+  \ifdim\ht\islandboxiii<\dimen@ii
+   \global\setbox\islandboxiii\vbox to\dimen@ii{\box\islandboxiii\vfil}\fi
+ \fi
+ \global\setbox\islandbox@\vbox
+  {\ifdim\dimen@>\z@
+  \hbox to\hsize{\hfil\box\captionboxi\hfil\box\captionboxii\hfil
+   \box\captionboxiii\hfil}%
+  \nointerlineskip{\rm\global\skipi@-\dp\strutbox}%
+  \global\advance\skipi@\bigskipamount\vskip\skipi@\fi
+  \hbox to\hsize{\hfil\box\islandboxi\hfil\box\islandboxii\hfil
+   \box\islandboxiii\hfil}}}
+\def\Figurepair#1\and#2\endFigurepair{\island@true
+ \islandpairbox{\Figure#1\endFigure}{\Figure#2\endFigure}}
+\def\Figuretriple#1\and#2\and#3\endFiguretriple{\island@true
+ \islandtriplebox{\Figure#1\endFigure}{\Figure#2\endFigure}%
+  {\Figure#3\endFigure}}
+\def\Tablepair#1\and#2\endTablepair{\island@true
+ \islandpairboxa{\Table#1\endTable}{\Table#2\endTable}}
+\def\Tabletriple#1\and#2\and#3\endTabletriple{\island@true
+ \islandtripleboxa{\Table#1\endTable}{\Table#2\endTable}%
+ {\Table#3\endTable}}
+\def\Par{\par\global\csname Parprev1\endcsname\prevdepth
+ \global\Parcount@\@ne
+ \global\Par@true\global\let\Parlist@\empty
+ \global\setbox\Parbox@\vbox\bgroup\break}
+\long\def\AAplace#1{\prevanish@\place@true\island@false
+ #1%
+ \place@ A\AAplace@
+ \postvanish@}
+\def\AAplace@{\AA@true\Aplace@\AA@false}
+\long\def\Bplace#1{\prevanish@\place@true\island@false
+ #1%
+ \place@ b\Bplace@
+ \postvanish@}
+\def\Bplace@{\allowbreak
+ \ifnum\topinscount@=\z@
+  \setbox\z@\vbox{\vbox to-\belowtopfigskip{}}%
+  \dimen@-\skip\topins
+  \ht\z@\dimen@
+  \storedim@
+  \advancedimtopins@
+  \insert\topins{\boxz@}%
+  \global\advance\topinscount@\@ne
+  \xdef\AAlist@{\AAlist@0}%
+ \fi
+ \dimen@\ht\islandbox@
+ \advance\dimen@\abovebotfigskip
+ \ht\islandbox@\dimen@
+ \advance\dimen@\dp\islandbox@
+ \storedim@
+ \xdef\AAlist@{\AAlist@0}%
+ \ifnum\topinscount@>\@ne\else\advancedimtopins@\fi
+ \insert\topins{\penalty\z@\splittopskip\z@
+  \floatingpenalty\z@
+  \box\islandbox@}%
+ \global\advance\topinscount@\@ne}
+\def\Place@#1#2{%
+ \ifisland@
+  \ifhmode
+   \ifPar@
+    \ifnum\Parcount@>5
+     \Err@{Only 5 \string\place's allowed per
+       \string\Par...\noexpand\endPar paragraph}%
+    \else
+     \expandafter\expandafter\expandafter\global\expandafter\setbox
+      \csname Parfigbox\number\Parcount@\endcsname\box\islandbox@
+     \global\advance\Parcount@\@ne
+     \xdef\Parlist@{\Parlist@#1}%
+     \vadjust{\break}%
+    \fi
+   \else
+    \Err@{\noexpand#2allowed only in a \string\Par...\noexpand\endPar
+     paragraph}%
+   \fi
+  \else
+   #2%
+  \fi
+ \else
+  \Err@{Who ... there's no \string\Figure, \string\Table,
+   etc., here}%
+ \fi
+ \place@false}
+\long\def\Cplace#1{\prevanish@\place@true\island@false
+ #1%
+ \Place@ c\Cplace@
+ \postvanish@}
+\def\Cplace@{\allowbreak
+ \ifnum\topinscount@>\z@\else
+  \global\C@true\global\Cdim@\pagetotal\fi
+ \Aplace@}
+\long\def\Mplace#1{\prevanish@\place@true\island@false
+ #1%
+ \Place@ m\Mplace@
+ \postvanish@}
+\long\def\MXplace#1{\prevanish@\place@true\island@false
+ #1%
+ \Place@ M\MXplace@
+ \postvanish@}
+\def\MXplace@{\MX@true\Mplace@\MX@false}
+\def\Mplace@{\allowbreak
+ \dimen@\ht\islandbox@\advance\dimen@\dp\islandbox@
+ \ifdim\pagetotal=\z@\else
+  \ifdim\lastskip<\abovebotfigskip\advance\dimen@\abovebotfigskip
+  \advance\dimen@-\lastskip\fi
+ \fi
+ \advance\dimen@\pagetotal
+ \ifdim\dimen@>\pagegoal
+  \Aplace@
+ \else
+  \nointerlineskip
+  \ifdim\lastskip<\abovebotfigskip\removelastskip\vskip\abovebotfigskip\fi
+  \setbox\z@\vbox{\unvbox\islandbox@
+   \breakisland@}%
+  \printisland@
+  \ifnum\topinscount@=\z@
+   \setbox\z@\vbox{\vbox to-\belowtopfigskip{}}%
+   \dimen@-\skip\topins
+   \ht\z@\dimen@
+   \storedim@
+   \advancedimtopins@
+   \insert\topins{\boxz@}%
+   \global\advance\topinscount@\@ne
+   \xdef\AAlist@{\AAlist@0}%
+  \fi
+  \ifMX@
+   \ifnum\topinscount@=\@ne
+    \setbox\z@\vbox{\vbox to-\abovebotfigskip{}}%
+    \ht\z@\z@
+    \dimen@\z@
+    \storedim@
+    \advancedimtopins@
+    \insert\topins{\boxz@}%
+    \global\advance\topinscount@\@ne
+    \xdef\AAlist@{\AAlist@0}%
+   \fi
+  \fi
+  \nointerlineskip
+  \vskip\belowtopfigskip
+ \fi}
+\def\endPar{\egroup
+ \count@\@ne
+ {\vbadness\@M\vfuzz\maxdimen\splitmaxdepth\maxdimen\splittopskip\ht\strutbox
+ \setbox\z@\vsplit\Parbox@ to\ht\Parbox@
+ \loop
+  \ifnum\count@<\Parcount@
+  \expandafter\expandafter\expandafter\global\expandafter\setbox
+   \csname Parbox\number\count@\endcsname\vsplit\Parbox@ to\ht\Parbox@
+  \count@@\count@\advance\count@@\@ne
+  \global\csname Parprev\number\count@@\endcsname
+   \dp\csname Parbox\number\count@\endcsname
+  \advance\count@\@ne
+  \repeat}%
+ \vskip\parskip
+ \count@\@ne
+ \def\nextv@##1##2\nextv@{\DN@{##1}\gdef\Parlist@{##2}}%
+ \loop
+  \ifnum\count@<\Parcount@
+   \dimen@\csname Parprev\number\count@\endcsname
+   \advance\dimen@\ht\strutbox
+   \ifdim\dimen@<\baselineskip
+    \advance\dimen@-\baselineskip\vskip-\dimen@
+   \else
+    \vskip\lineskip
+   \fi
+   \unvbox\csname Parbox\number\count@\endcsname
+   \global\setbox\islandbox@\box\csname Parfigbox\number\count@\endcsname
+   \expandafter\nextv@\Parlist@\nextv@
+   \if a\next@\Aplace@\else
+   \if A\next@\AAplace@\else
+   \if b\next@\Bplace@\else
+   \if c\next@\Cplace@\else
+   \if m\next@\Mplace@\else
+   \if M\next@\MXplace@\fi\fi\fi\fi\fi\fi
+  \advance\count@\@ne
+  \repeat
+ \global\Par@false
+ \ifvoid\Parbox@
+  \prevdepth\csname Parprev\number\count@\endcsname
+ \else
+  \dimen@\csname Parprev\number\count@\endcsname\advance\dimen@\ht\strutbox
+  \ifdim\dimen@<\baselineskip
+    \advance\dimen@-\baselineskip\vskip-\dimen@
+  \else
+    \vskip\lineskip
+  \fi
+  \dimen@\dp\Parbox@
+  \unvbox\Parbox@
+  \prevdepth\dimen@
+ \fi}
+\catcode`\@=\active
-- 
cgit v1.2.3

