[Rivet-svn] r2601 - trunk/doc

blackhole at projects.hepforge.org blackhole at projects.hepforge.org
Mon Jul 19 13:51:58 BST 2010


Author: hoeth
Date: Mon Jul 19 13:51:58 2010
New Revision: 2601

Log:
yet another TeX style file

Added:
   trunk/doc/picinpar.sty

Added: trunk/doc/picinpar.sty
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/doc/picinpar.sty	Mon Jul 19 13:51:58 2010	(r2601)
@@ -0,0 +1,535 @@
+\typeout{%
+Pictures in Paragraphs. Version 1.2a, July 13, 1993}
+% This is picinpar.sty version 1.2a as of july 13, 1993
+% Macros for making windows with LaTeX
+%
+% By Friedhelm Sowa, Heinrich-Heine-University D\"usseldorf,
+%                    Computing Center
+%                    In case of emergency try to get the email adress
+%                    after having checked the input :-)
+%                    Okay, for those who are too lazy:
+%                          sowa at uni-duesseldorf.de
+% Distributed under the terms of the GNU General Public License.
+% This program is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as
+% published by the Free Software Foundation; either version 2, or (at your
+% option) any later version.
+%
+% Incorporated are basic ideas of Alan Hoenig (Thanks Alan!)
+% Thanks to Phil Taylor, who gave some useful hints during his
+% tutorial at the EURO TeX 92 in Prague.
+%
+% Also thanks to Ulrik Vieth, who incorporated the macros for
+% generating captions within the windows.
+%
+%----------------
+% Known problems:
+%
+%    - Don't use \samepage
+%    - Use \footnotemark within and \footnotetext outside the
+%      window-environment instead of \footnote
+%    - When using the epic-package load picinpar before epic
+%      like \documentstyle[...,picinpar,epic]{...}
+%----------------
+% Changes:
+%
+% 1.1  If \brokenpenalty\maxdimen then it's set to 9999 within the
+%      window's group
+%
+%      Reported by kuhlmav at elec.canterbury.ac.nz
+%
+% 1.2  When centering a window and the right column contains less
+%      lines than the left column then the right lines are raised
+%      by using \vfill
+%
+%      Reported by Wolfgang Riedel, TU Chemnitz
+%
+% 1.2a A better way to shift the right box. There was some trouble
+%      when the window is on the left. I don't know why I didn't
+%      notice TeX's overfull \vbox
+%
+%      Reported by Stephan Seidl, seidl at rcs.urz.tu-dresden.de
+
+%
+%
+%
+%                       Here we go
+%
+% Counts
+\newcount\br
+\newcount\bl
+\newcount\na
+\newcount\nb
+\newcount\tcdsav
+\newcount\tcl
+\newcount\tcd
+\newcount\tcn
+\newcount\cumtcl
+\newcount\cumpartcl
+% Dimens
+\newdimen\lftside
+\newdimen\rtside
+\newdimen\hpic
+\newdimen\vpic
+\newdimen\strutilg
+\newdimen\picwd
+\newdimen\topheight
+\newdimen\ilg
+\newdimen\lpic
+\newdimen\lwindowsep \newdimen\rwindowsep	% VK 10 Feb 93
+\lwindowsep0.5\baselineskip			% "
+\rwindowsep0.5\baselineskip			% "
+\newdimen\cumpar
+% Tokens
+\newtoks\twa
+\newtoks\la
+\newtoks\ra
+\newtoks\ha
+\newtoks\pictoc
+% Boxes
+\newbox\rawtext
+\newbox\holder
+\newbox\windowbox
+\newbox\wartext
+\newbox\finaltext
+\newbox\aslice
+\newbox\bslice
+\newbox\wbox
+\newbox\wstrutbox
+\newbox\picbox
+\newbox\waslice
+\newbox\wbslice
+\newbox\fslice
+% Another strut
+\def\wstrut{\relax\ifmmode\copy\wstrutbox\else\unhcopy\wstrutbox\fi}
+%
+\long\def\window[#1,#2,#3,#4] {%
+% #1 is an integer---no.  of lines down from par top
+% #2 is l, r or c what means left, right or centered
+%    default is, that the picture is printed at the left side
+% #3 is the material for setting a graphic box
+% #4 is the explanation for the graphic
+\vskip\parskip\everypar{}
+\global\cumpar=0pt
+\global\cumpartcl=0
+\global\cumtcl=0
+    \tcd=#1
+    \lftside=0pt \rtside=0pt
+%    \hpic=\linewidth
+    \twa={} \la={} \ra={} \ha={}
+\setbox\wbox=\hbox{(}
+\computeilg
+\pictoc={#3}
+\setbox\windowbox=\vbox{\hbox{#3}}
+\setbox\wbox=\vbox{\hbox{\noindent#4}}
+\picwd=\wd\windowbox
+\hpic=\picwd
+\vpic=\ht\windowbox\advance\vpic\dp\windowbox
+\if #2c\lftside=\linewidth\advance\lftside-\picwd\rtside=0.5\lftside
+       \lftside=\rtside
+\else \if #2r\lftside=\linewidth\advance\lftside-\picwd
+              \rtside=0pt
+      \else\rtside=\linewidth\advance\rtside-\picwd
+           \lftside=0pt
+      \fi
+\fi
+%
+% In case of a centered picture, that does not allow text beside
+% we have to add some glue between preceding text, window and
+% following text.
+%
+\if #2c
+ \ifdim\rtside<72pt
+  \rtside=0pt\lftside=0pt
+  \setbox\windowbox=\vbox{%
+    \hrule width\picwd height0pt depth0pt
+    \vskip.5\parskip\box\windowbox\vskip.5\parskip
+    \hrule width\picwd height0pt depth0pt}
+  \vpic=\ht\windowbox\advance\vpic\dp\windowbox
+ \fi
+ \parskip0pt % Within the window area a \parskip>0pt may look ugly
+\fi
+\ifnum\picwd=0\setbox\picbox=\vbox{\hbox{\noindent#4}}   % without picture
+                               \hpic=\wd\picbox % calculate dimensions
+              \ifnum\lftside=0\rtside=\linewidth\advance\rtside-\hpic
+              \else\ifnum\rtside=0\lftside=\linewidth\advance\lftside-\hpic
+              \else\rtside=0.5\linewidth\advance\rtside-0.5\hpic
+                   \lftside=\rtside
+              \fi\fi
+\else\setbox\picbox=\vbox{\hsize=\hpic\vbox to\vpic{\box\windowbox\vfill}%
+\ifdim\ht\wbox>0pt\vskip\ilg\vbox{\hsize=\hpic\noindent#4
+%
+% See above, this is the second part of glue
+%
+\if #2c
+ \ifdim\rtside=0pt \ifdim\lftside=0pt
+ \vskip\parskip\hrule width\hpic height0pt depth0pt
+ \fi \fi
+\fi
+}
+\fi}\fi
+\vpic=\ht\picbox\advance\vpic\dp\picbox
+%\ifdim\lftside>0pt\advance\lftside-0.5\baselineskip\fi  % put in a distance
+%\ifdim\rtside>0pt\advance\rtside-0.5\baselineskip\fi    % between text and
+%                                                        % window
+\ifdim\lftside>0pt\advance\lftside-\lwindowsep\fi  % VK 10 Feb 93
+\ifdim\rtside>0pt\advance\rtside-\rwindowsep\fi    % "
+\global\br=\rtside \global\bl=\lftside
+\ifnum\picwd=0
+\ifdim\vpic>0pt\picwd=\hpic
+\else\vpic=\ht\picbox\advance\vpic\dp\picbox
+\fi
+\fi
+    \global\tcl=0 \lpic=0pt
+    \loop\global\advance\tcl by 1 \lpic=\tcl\baselineskip
+    \ifdim\lpic<\vpic\repeat
+    \vpic=\lpic
+    \global\cumtcl=\tcl
+%
+% Here we know exactly the number of indented lines and
+% are able to generate the tokens for the \parshape list
+%
+    \ifnum\bl>0\la={ 0pt \lftside}\fi
+    \ifnum\br>0\ra={ 0pt \rtside}\fi
+    \ifnum\tcd>0\ha={ 0pt \linewidth}\fi
+    \ifnum\tcl<1\global\tcl=1\fi
+    \createparshapespec
+    \tcd=#1                        % restore the lintel
+    \global\tcdsav=#1
+%
+% This is a very tricky part of the package. Some day there
+% will exist a detailed documentation.
+%
+\ifdim\parskip>0pt
+    \def\par{\hfill\vadjust{\vskip0pt\vbox to\parskip{\vss}}
+             \global\advance\cumpartcl by 1
+             \global\advance\cumpar by \parskip
+             \global\lpic=\ht\wstrutbox
+             \global\advance\lpic by \dp\wstrutbox
+             \ifdim\cumpar<\lpic
+             \else\advance\cumpar by -\lpic
+                  \advance\cumtcl by -1
+             \fi
+             \egroup\global\tcd=\tcdsav
+             \setbox\wartext=\vbox{\unvbox\rawtext}
+\setbox\rawtext=\vbox\bgroup
+\clubpenalty=0\widowpenalty=0
+\ifnum\brokenpenalty<\maxdimen\else\brokenpenalty=9999\fi
+\tolerance=1000
+\global\lpic=\ht\wstrutbox
+\global\advance\lpic by \dp\wstrutbox
+%
+% Pick up header lines
+%
+\ifnum\tcd>0\vbadness=10000\splittopskip0pt
+ \loop\setbox\holder=\vsplit\wartext to \lpic
+  \hpic=\wd\holder\prune\holder\hpic
+  \ifdim\ht\holder=\parskip
+   \hbox{\vrule height\parskip width0pt depth0pt}
+   \typeout{A paragraph ended within headlines! Please change }
+   \typeout{the number of headlines for the window environment!}
+   \global\advance\tcd by -1
+  \else\hbox{\vbox{\box\holder\unskip}}
+   \global\advance\tcd by -1
+  \fi
+ \ifnum\tcd>0\repeat
+ \global\tcd=0
+ \ifdim\ht\wartext>0pt
+ \ifdim\ht\wartext=\parskip\global\advance\tcdsav by 1
+       \setbox\holder=\vsplit\wartext to \lpic
+       \hbox{\vrule height\parskip width0pt depth0pt}
+       \global\advance\cumpar by -\parskip
+       \global\advance\cumpartcl by -1
+ \fi\fi
+\fi
+%
+% Pick up lines beside window, the rest too
+%
+\global\tcn=0
+\topheight=0pt
+\ifdim\ht\wartext>0pt\vbadness=10000\splittopskip0pt
+ \loop\setbox\holder=\vsplit\wartext to \lpic
+  \hpic=\wd\holder\prune\holder\hpic
+  \ifdim\ht\holder=\parskip
+  \hbox{\vrule height\parskip width0pt depth0pt}
+  \global\advance\topheight by \parskip
+  \else
+   \setbox\fslice=\hbox{\box\holder}
+    \hpic=\ht\fslice
+    \advance\hpic by\dp\fslice
+   \ifdim\hpic>\lpic
+   \global\advance\topheight by\hpic
+   \hbox{\vbox{\box\fslice\vss}}
+   \else\ifdim\hpic=0pt\relax
+   \else\global\advance\topheight by \lpic
+   \hbox{\vbox{\box\fslice}}\fi\fi
+  \fi
+ \ifdim\ht\wartext>0pt\repeat
+\tcn=0
+\loop\advance\tcn by 1
+\advance\topheight by -\lpic
+\ifdim\topheight>0pt\repeat
+\hpic=\topheight
+\ifdim\hpic<0pt\advance\tcn by -1\fi
+\global\topheight=\tcn\lpic
+\fi
+%
+% If the indented part is not completed we have to generate a
+% new token for the \parshape list
+%
+\ifnum\tcn<\cumtcl
+\global\tcl=\cumtcl
+\global\advance\topheight by\cumpartcl\parskip
+             \global\advance\tcl by -\tcn \global\twa={}
+             \ifnum\tcl>0
+\global\vpic=\topheight
+\global\topheight=\tcl\lpic
+\global\advance\vpic by \topheight
+\global\advance\vpic by \lpic
+             \createparshapespec
+             \parshape=\tcn \the\twa
+             \else\parshape=0
+             \fi
+\else\parshape=0\fi}
+\else\def\par{\\}
+\fi % new definition of \par in case of \parskip>0 ends here
+%
+% This is where we start to pick up the paragraph(s)
+%
+    \setbox\rawtext=\vbox\bgroup\unvbox\rawtext\unskip
+    \clubpenalty=0\widowpenalty=0
+    \ifnum\brokenpenalty<\maxdimen\else\brokenpenalty=9999\fi
+    \tolerance=1000
+    \parshape=\tcn \the\twa }
+%
+\def\endwindow{%
+    \global\tcd=\tcdsav
+    \egroup\vskip\parskip\parshape=0 % reset parshape; end \box\rawtext
+    \vbadness=10000
+    \splittopskip=0pt
+%
+% Typeset the lines above the window
+%
+\ifnum\tcd>0\setbox\holder=\vsplit\rawtext to \tcd\baselineskip
+\tcn=\tcd
+\loop\advance\tcn -1
+\setbox\fslice=\vsplit\holder to\baselineskip
+\prune\fslice\linewidth
+\topheight=0pt
+\ifnum\dp\fslice>\dp\wstrutbox
+       \advance\topheight-\dp\fslice
+       \advance\topheight\dp\wstrutbox
+       \advance\topheight\ilg\fi
+\hbox to\linewidth{\box\fslice}
+\vskip-\topheight
+\ifdim\ht\holder>0pt\repeat
+\fi
+%
+% Now we build the boxes beside the window
+%
+\global\topheight=\tcl\baselineskip
+\ifnum\cumpartcl>0\global\tcl=\cumtcl
+      \global\topheight=\vpic
+\fi
+\ifnum\bl>0 \ifnum\br>0 \multiply\topheight by 2\fi\fi
+\ifnum\bl>0\setbox\holder=\vsplit\rawtext to\topheight
+\else\ifnum\br>0\setbox\holder=\vsplit\rawtext to\topheight\fi\fi
+\tcn=\tcl \na=0 \nb=0
+\ifnum\bl>0 \ifnum\br>0 \multiply\tcn by 2\fi\fi
+\ifnum\bl>0\na=\tcn\ifnum\br>0\divide\na by 2\fi\fi
+\ifnum\br>0\nb=\tcn\ifnum\bl>0\divide\nb by 2\fi\fi
+\ifnum\na=0\ifnum\nb=0
+      \setbox\waslice=\vbox to\vpic{\vss}
+      \setbox\wbslice=\vbox to\vpic{\vss}
+      \bl=1\br=1
+      \vskip\ilg
+\fi\fi
+%
+% both sides
+%
+\ifnum\na>0 \ifnum\nb>0
+\loop\advance\nb -1
+\advance\na -1
+\setbox\aslice=\vsplit\holder to\baselineskip
+\prune\aslice\lftside
+\setbox\waslice=\vbox{\unvbox\waslice\hbox
+to\lftside{\box\aslice\hfil}}
+\setbox\bslice=\vsplit\holder to\baselineskip
+\prune\bslice\rtside
+\setbox\wbslice=\vbox{\unvbox\wbslice\hbox
+to\rtside{\box\bslice\hfil}}
+\ifnum\nb>0\repeat
+\fi\fi
+%
+% only text on the left side
+%
+\ifnum\na>0
+    \loop\advance\na -1
+    \setbox\aslice=\vsplit\holder to\baselineskip
+    \prune\aslice\lftside
+    \setbox\waslice=\vbox{\unvbox\waslice\hbox
+    to\lftside{\box\aslice\hfil}}
+    \ifdim\ht\holder>0pt\repeat
+\fi
+%
+% only text on the right side
+%
+\ifnum\nb>0
+    \loop\advance\nb -1
+    \setbox\bslice=\vsplit\holder to\baselineskip
+    \prune\bslice\rtside
+    \setbox\wbslice=\vbox{\unvbox\wbslice\hbox
+    to\rtside{\box\bslice\hfil}}
+    \ifdim\ht\holder>0pt\repeat
+\fi
+%
+% fixing the dimensions of the window part
+%
+\ifnum\bl=0\topheight=\ht\wbslice
+\else\ifnum\br=0\topheight=\ht\waslice
+      \else\ifdim\ht\waslice>\ht\wbslice\topheight=\ht\waslice
+            \else\topheight=\ht\wbslice\fi\fi\fi
+%
+% ship out the window material to the main vertical list
+%
+\ifnum\bl>0 \ifnum\br>0 \ifdim\ht\wbslice<\topheight
+\setbox\wbslice=\vbox to\topheight{\box\wbslice\vfill}
+\fi\fi\fi
+\setbox\windowbox=\vbox{\hbox to\linewidth{%
+\ifnum\bl>0\box\waslice\hfill\fi%
+\vbox to\topheight{\hrule width\picwd height0pt depth0pt\vskip0pt%
+\vfill\unvbox\picbox%
+\ifnum\picwd>0\vfill\fi%
+\vss}\ifnum\br>0\hfill\vbox{\box\wbslice}\fi}}%
+\unvbox\windowbox%
+\loop
+ \setbox\bslice=\vsplit\rawtext to\baselineskip
+ \prune\bslice\linewidth
+ \setbox\wbslice=\vbox{\hbox to\linewidth{\box\bslice\hfil}}
+ \unvbox\wbslice
+ \ifdim\ht\rawtext>0pt
+\repeat
+}% FINITO
+%
+% What else do we need?
+%
+\def\prune#1#2{
+% take a \vbox containing a single \hbox,
+% \unvbox it, and cancel the \lastskip
+% put in a \hbox of width #2
+ \unvbox#1 \setbox#1=\lastbox % \box#1 now is an \hbox
+ \ifdim\ht#1=\parskip
+ \setbox#1=\hbox to#2{\vrule height\parskip depth0pt width0pt\hfill}
+ \else\ifdim\ht#1=0pt\relax
+ \else\setbox#1=\hbox to#2{\wstrut\unhbox#1\unskip}\fi\fi}
+%
+% Here the token \twa is generated.
+% It's not so difficult as it looks like.
+%
+\def\createparshapespec{%
+\global\tcn=0
+\ifnum\bl>0\global\tcn=\tcl\else\ifnum\br>0\global\tcn=\tcl\fi\fi
+\na=0 \nb=0
+\ifnum\bl>0 \ifnum\br>0 \multiply\tcn by 2\fi\fi
+\ifnum\bl>0\na=\tcn\ifnum\br>0\divide\na by 2\fi\fi
+\ifnum\br>0\nb=\tcn\ifnum\bl>0\divide\nb by 2\fi\fi
+\global\advance\tcn by\tcd \global\advance\tcn by1
+\ifnum\tcd>0
+\loop\twa=\expandafter{\the\twa\the\ha}\advance\tcd -1
+\ifnum\tcd>0\repeat
+\fi
+\ifnum\bl>0 \ifnum\br>0
+\loop\twa=\expandafter{\the\twa\the\la}\advance\na -1
+\twa=\expandafter{\the\twa\the\ra}\advance\nb -1
+\ifnum\na>0\repeat
+\fi\fi
+\ifnum\na>0
+\loop\twa=\expandafter{\the\twa\the\la}\advance\na -1
+\ifnum\na>0\repeat
+\fi
+\ifnum\nb>0
+\loop\twa=\expandafter{\the\twa\the\ra}\advance\nb -1
+\ifnum\nb>0\repeat
+\fi
+\global\twa=\expandafter{\the\twa 0pt \the\linewidth}}
+%
+\def\computeilg{% compute the interline glue
+ \tcl=0\ilg=0pt\strutilg=0pt
+ \loop\setbox\wbox=\hbox{\char\tcl}
+ \ifdim\ht\wbox>\ilg\ilg=\ht\wbox\fi
+ \ifdim\dp\wbox>\strutilg\strutilg=\dp\wbox\fi
+ \advance\tcl by 1
+ \ifnum\tcl<128\repeat
+ \ht\wbox=\ilg
+ \dp\wbox=\strutilg
+ \strutilg=\ht\wbox %\advance\strutilg by\ilg
+ \ifdim\strutilg>\baselineskip
+  \typeout{character with height greater baselineskip found in font}
+  \typeout{baselineskip changed to 1.5 of that height!}
+  \baselineskip=1.5\strutilg
+ \fi
+ \global\ilg=\baselineskip
+ \global\advance\ilg-\ht\wbox \global\advance\ilg-\dp\wbox
+ \strutilg=\ht\wbox \advance\strutilg by\ilg
+ \setbox\wstrutbox=\hbox{\vrule height\strutilg depth\dp\wbox width0pt}}
+%
+% frames
+%
+\def\framepic#1{\vbox{%
+\hsize\expandafter\wd\csname #1box\endcsname
+\advance\hsize .8pt \hrule%
+\hbox to\hsize%
+{\vrule\hfill\vbox to\expandafter\ht\csname #1box\endcsname{%
+\expandafter\box\csname #1box\endcsname }\hfill\vrule}\hrule\vss}}
+%
+\def\wframepic#1{\vbox{%
+\hsize\expandafter\wd\csname #1box\endcsname
+\advance\hsize 3.8pt\hrule%
+\hbox to\hsize%
+{\vrule\hfill\vbox{\kern1.5pt%
+\expandafter\box\csname #1box\endcsname
+\kern1.5pt}\hfill\vrule}\hrule\vss}}
+%
+% caption
+%
+\def\winstepcounter#1{\global\advance\csname c@#1\endcsname 1
+    {\let\@elt\@stpelt \csname cl@#1\endcsname}}
+
+\def\winrefstepcounter#1{\winstepcounter{#1}\let\@tempa\protect
+\def\protect{\noexpand\protect\noexpand}%
+\edef\@currentlabel{\csname p@#1\endcsname\csname the#1\endcsname}%
+\let\protect\@tempa}
+\long\def\w at dblarg#1{\@ifnextchar[{#1}{\w at xdblarg{#1}}}
+\long\def\w at xdblarg#1#2\par{#1[{#2}]#2\par}
+
+\def\wincaption{\winrefstepcounter\@captype \w at dblarg{\@wincaption\@captype}}
+
+\long\def\@wincaption#1[#2]#3\par{\par\addcontentsline{\csname
+  ext@#1\endcsname}{#1}{\protect\numberline{\csname
+  the#1\endcsname}{\ignorespaces #2}}\begingroup
+    \@parboxrestore
+    \normalsize
+    \@makewincaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+  \endgroup}
+
+\long\def\@makewincaption#1#2{%
+   \setbox\@tempboxa\hbox{\footnotesize{\bf #1:\enspace}{#2}}%
+   \ifdim\wd\@tempboxa>\picwd
+      {\footnotesize{\bf #1:\enspace}{#2\par}}
+   \else
+      \hbox to\picwd{\hfil\box\@tempboxa\hfil}
+   \fi}
+
+\long\def\figwindow[#1,#2,#3,#4] {%
+     \advance\c at figure -1
+     \begin{window}[#1,#2,{#3},{\def\@captype{figure}%
+        \wincaption#4\par}] }
+
+\long\def\tabwindow[#1,#2,#3,#4] {%
+     \advance\c at table -1
+     \begin{window}[#1,#2,{#3},{\def\@captype{table}%
+        \wincaption#4\par}] }
+
+\def\endfigwindow{\end{window}}
+\def\endtabwindow{\end{window}}
+\endinput


More information about the Rivet-svn mailing list