% \iffalse meta-comment
%
% Copyright (C) 2012 by Sigitas Tolu\v{s}is <
[email protected]>
% ---------------------------------------------------------------------------
% 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 your option) any later version.
% The latest version of this license is in
%
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.
%
% This work has the LPPL maintenance status `maintained'.
%
% The Current Maintainer of this work is Sigitas Tolu\v{s}is.
%
% This work consists of the files marginal.dtx and marginal.ins
% and the derived filebase marginal.sty.
%
% \fi
%
% \iffalse
%<*driver>
\ProvidesFile{marginal.dtx}
%</driver>
%<*package>
%% Copyright (C) 1997-2012 by Sigitas Tolu\v{s}is <
[email protected]>
%% VTeX Ltd., Akademijos 4, Vilnius, Lithuania
%%
http://www.vtex.lt/tex/download/macros/
%% --------------------------------------------------------------------------
%% 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 your option) any later version.
%% The latest version of this license is in
%%
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.
%%
%% PURPOSE: Enlarge free and show lost marginal inserts.
%%
%</package>
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{marginal}
%<*package>
[2012/05/29 v1.1 Enlarge free and show lost marginal inserts]
%</package>
%
%<*driver>
\documentclass{ltxdoc}
\usepackage{marginal}[2012/05/29]
%%\EnableCrossrefs
%%\CodelineIndex
\RecordChanges
\begin{document}
\DocInput{marginal.dtx}
%%\PrintChanges
%%\PrintIndex
\end{document}
%</driver>
% \fi
%
% \CheckSum{374}
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
% Digits \0\1\2\3\4\5\6\7\8\9
% Exclamation \! Double quote \" Hash (number) \#
% Dollar \$ Percent \% Ampersand \&
% Acute accent \' Left paren \( Right paren \)
% Asterisk \* Plus \+ Comma \,
% Minus \- Point \. Solidus \/
% Colon \: Semicolon \; Less than \<
% Equals \= Greater than \> Question mark \?
% Commercial at \@ Left bracket \[ Backslash \\
% Right bracket \] Circumflex \^ Underscore \_
% Grave accent \` Left brace \{ Vertical bar \|
% Right brace \} Tilde \~}
%
%
% \changes{v1.1}{2012/05/29}{Converted to DTX file}
%
% \DoNotIndex{\newcommand,\newenvironment}
%
% \providecommand*{\url}{\texttt}
% \GetFileInfo{marginal.dtx}
% \title{The \textsf{marginal} package}
% \author{Sigitas Tolu\v{s}is \\ \url{
[email protected]}}
% \date{\fileversion~from \filedate}
%
% \maketitle
%
% \section{Introduction}
%
% Enlarge free and show lost marginal inserts.
%
% \section{Usage}
%
% \DescribeMacro{\showlostmarginals}
% \indent Outputs lost marginal notes at the left of page.
%
% \medskip
% \DescribeMacro{\enlargefreelist}
% Adds more(34) free inserts to freelist.
%
% \medskip
% \DescribeMacro{\onesidemarginals}
% Outputs marginal notes only on one side. It saves one half
% of the available free inserts.
%
% \StopEventually{}
%
% \section{Implementation}
%
% \iffalse
%<*package>
% \fi
%
% \begin{macrocode}
\newif\if@mparlost \@mparlostfalse
% \end{macrocode}
%
% \begin{macrocode}
\newbox\@mparlostbox
\setbox\@mparlostbox\vbox{}
% \end{macrocode}
%
% \begin{macro}{\@fltovfpar}
%
% \begin{macrocode}
\gdef\@fltovfpar{\global\@mparlosttrue
\@latex@warning{Too many unprocessed (marginal)floats}\relax
}
% \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\@fltovfmess}
% \begin{macrocode}
\gdef\@fltovfmess{%
\@latex@error{Too many unprocessed floats}\@ehb
}
% \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\marginpar}
%
% \begin{macrocode}
\def\marginpar{%
\ifhmode
\@bsphack\@floatpenalty -\@Mii
\else
\@floatpenalty-\@Miii
\fi
\ifinner
\@parmoderr\@floatpenalty\z@
\else
\@next\@currbox\@freelist{}{}%
\@next\@marbox\@freelist{\global\count\@marbox\m@ne}{\@floatpenalty\z@
\@fltovfmess \def\@currbox{\@tempboxa}\def\@marbox{\@tempboxa}}%
\fi
\@ifnextchar[\@xmpar\@ympar
}
% \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\@savemarbox}
%
% \begin{macrocode}
\long\def\@savemarbox#1#2{%
\global\setbox#1%
\color@vbox
\vtop{%
\hsize\marginparwidth
\@parboxrestore
\@marginparreset
#2%
\global\@minipagefalse
\outer@nobreak
}%
\color@endbox
\if@mparlost
\global\setbox\@mparlostbox\vbox{\unvbox\@mparlostbox\copy#1}%
\global\@mparlostfalse
\fi
}
% \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\showlostmarginals}
% Outputs lost marginal notes at the left of the page.
% \begin{macrocode}
\def\showlostmarginals{%
\global\let\old@textbottom\@textbottom
\gdef\@textbottom{%
\vtop to\z@{%
\hbox to\z@{\kern-\wd\@mparlostbox
\vbox to\z@{\kern-\ht\@mparlostbox
\box\@mparlostbox
\vfill
}%
}%
}%
\old@textbottom
}%
\global\let\@fltovfmess\@fltovfpar
}
% \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\enlargefreelist}
% Adds more(34) free inserts to freelist
% \begin{macrocode}
\def\enlargefreelist{%
\@for\curr@option:={S,T,U,W,X,Y,Z,a,b,c,d,e,f,g,h,i,%
j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}%
\do{\expandafter\newinsert\csname bx@\curr@option\endcsname}%
\gdef\@freelist{%
\@elt\bx@A \@elt\bx@B \@elt\bx@C \@elt\bx@D \@elt\bx@E \@elt\bx@F
\@elt\bx@G \@elt\bx@H \@elt\bx@I \@elt\bx@J \@elt\bx@K \@elt\bx@L
\@elt\bx@M \@elt\bx@N \@elt\bx@O \@elt\bx@P \@elt\bx@Q \@elt\bx@R
\@elt\bx@S \@elt\bx@T \@elt\bx@U \@elt\bx@V \@elt\bx@W \@elt\bx@X
\@elt\bx@Y \@elt\bx@Z
\@elt\bx@a \@elt\bx@b \@elt\bx@c \@elt\bx@d \@elt\bx@e \@elt\bx@f
\@elt\bx@g \@elt\bx@h \@elt\bx@i \@elt\bx@j \@elt\bx@k \@elt\bx@l
\@elt\bx@m \@elt\bx@n \@elt\bx@o \@elt\bx@p \@elt\bx@q \@elt\bx@r
\@elt\bx@s \@elt\bx@t \@elt\bx@u \@elt\bx@v \@elt\bx@w \@elt\bx@x
\@elt\bx@y \@elt\bx@z
}%
}%
% \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\onesidemarginals}
%
%% \onesidemarginals - outputs marginals only on one side
%
% \begin{macrocode}
\def\onesidemarginals{%
\newbox\@marbox
% \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\@addmarginpar}
% \begin{macrocode}
\gdef\@addmarginpar{\@cons\@freelist\@currbox
\@tempdima\@mparbottom
\advance\@tempdima -\@pageht
\advance\@tempdima\ht\@currbox
\ifdim\@tempdima >\z@
\@latex@warning@no@line {Marginpar on page \thepage\space moved}%
\else
\@tempdima\z@
\fi
\global\@mparbottom\@pageht
\global\advance\@mparbottom\@tempdima
\global\advance\@mparbottom\dp\@currbox
\global\advance\@mparbottom\marginparpush
\advance\@tempdima -\ht\@currbox
\global\setbox\@currbox
\vbox {\vskip\@tempdima \box\@currbox}%
\global \ht\@currbox \z@
\global \dp\@currbox \z@
\kern -\@pagedp
\nointerlineskip
\hb@xt@\columnwidth
{\hskip\columnwidth \hskip\marginparsep \box\@currbox \hss}%
\nointerlineskip
\hbox{\vrule \@height\z@ \@width\z@ \@depth\@pagedp}%
}%
% \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\marginpar}
%
% \begin{macrocode}
\gdef\marginpar{%
\ifhmode
\@bsphack\@floatpenalty -\@Mii
\else
\@floatpenalty-\@Miii
\fi
\ifinner
\@parmoderr\@floatpenalty\z@
\else
\@next\@currbox\@freelist{\global\count\@currbox\m@ne}{\@floatpenalty\z@
\@fltovfmess \def\@currbox{\@tempboxa}}%
\fi
\@ifnextchar[\@xmpar\@ympar
}%
% \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\@xmpar}
%
% \begin{macrocode}
\long\gdef\@xmpar[##1]##2{\@savemarbox\@currbox{##2}\@xympar}%
% \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\@ympar}
% \begin{macrocode}
\long\gdef\@ympar##1{\@savemarbox\@currbox{##1}\@xympar}%
% \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\@xympar}
% \begin{macrocode}
\def\@xympar{%
\ifnum\@floatpenalty<\z@ \@cons\@currlist\@marbox \fi
\setbox\@tempboxa
\color@vbox
\vbox\bgroup
\end@float
\global\@ignorefalse \@esphack
}%
}
% \end{macrocode}
% \end{macro}
%
% \begin{macrocode}
%\endinput
% \end{macrocode}
%
% \iffalse
%</package>
% \fi
%
% \Finale