%% %% This is file `boxhandler.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% boxhandler.dtx (with options: `package') %% %% IMPORTANT NOTICE: %% %% For the copyright see the source file. %% %% Any modified versions of this file must be renamed %% with new filenames distinct from boxhandler.sty. %% %% For distribution of the original source see the terms %% for copying and modification in the file boxhandler.dtx. %% %% This generated file may be distributed as long as the %% original source files, as listed above, are part of the %% same distribution. (The sources need not necessarily be %% in the same archive or directory.) %% %% boxhandler.sty %% Copyright Steven B. Segletes. %% %% This file may be redistributed and/or modified with attribution. %% %% This is boxhandler.sty, derived from earlier incarnations of savcap.sty & %% arlcaptions.sty. %% \ProvidesPackage{boxhandler} [2006/07/29 v1.10 Flexible Captioning Styles and Deferred Box/List Printing] \NeedsTeXFormat{LaTeX2e} %% Examples of a number of calls provided in this style are given below, %% in no particular order: %% %%| |\\ %%|\bxtable[t] |\\ %%| {This is a test of nonwrapping caption\label{tb:mytable}} |\\ %%| { |\\ %%| \begin{tabular}{|c|c|c|} |\\ %%| \hline |\\ %%| column 1 data & 2nd column data & and the third column data\\|\\ %%| \hline |\\ %%| \end{tabular} |\\ %%| } |\\ %%| |\\ %%|\usepackage{graphicx} |\\ %%|\bxfigure[h] |\\ %%| {Here is an example of a particularly long caption that will |\\ %%| test wrapping} |\\ %%| {\includegraphics[width=3.64in,height=4.30in]{Atest1.eps}} |\\ %%| |\\ %%|\relaxCaptionWidth[2in] |\\ %%| |\\ %%|\captionStyle{}{c} |\\ %%| |\\ %%|\setlength\captionGap{3ex} |\\ %%| |\\ %%|\setcounter{abovecaptionskipterm}{10} |\\ %%|\setcounter{belowcaptionskipterm}{0} |\\ %%| |\\ %%|\TableFontSize\normalsize |\\ %%| |\\ %%|\LRFigurePlacement{flushleft} |\\ %%| |\\ %%|\killtableofcontents |\\ %%| |\\ %%|\holdFigures |\\ %%| |\\ %%|\clearFigures |\\ %%| |\\ %%|\newsavebox{\mybox} |\\ %%|\SaveCBox{\mybox}{\framebox(200,100){Ack!}} |\\ %%| |\\ %%|\ReciteFigure[h]{\figcapii}{\figii}{\figcapwdthii} |\\ %% %% \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 \~} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage{pbox} \newcounter{TableIndex} \setcounter{TableIndex}{0} \newcounter{FigureIndex} \setcounter{FigureIndex}{0} \newcounter{TableClearedIndex} \setcounter{TableClearedIndex}{0} \newcounter{FigureClearedIndex} \setcounter{FigureClearedIndex}{0} \let\old@makecaption \@makecaption% SAVE PREVAILING \@makecaption STYLE \newlength\oldabovecaptionskip \setlength\oldabovecaptionskip \abovecaptionskip \newlength\oldbelowcaptionskip \setlength\oldbelowcaptionskip \belowcaptionskip %% \captionGap CAN BE INCREASED TO PLACE MORE SPACE BETWEEN THE CAPTION %% LABEL AND THE ACTUAL CAPTION TEXT. \newlength\captionGap \setlength\captionGap{1ex} %% \TableDeadMargin AND \FigureDeadMargin REFER TO THE TABLE & FIGURE %% MARGIN OF A BOX THAT COUNTS TOWARDS ITS SIZE, BUT IN WHICH NO %% ACTIVE DATA FALLS; DEADMARGIN ASSUMED ON BOTH LEFT & RIGHT SIDE. \newlength\TableDeadMargin \setlength\TableDeadMargin{0.375em} \newlength\FigureDeadMargin \setlength\FigureDeadMargin{0em} %% INITIALIZE \above- AND \belowcaptionskip VALUES; CAN BE RESET %% USED TO SET GAPS ABOVE & BELOW CAPTIONS \newcounter{abovecaptionskipterm} \setcounter{abovecaptionskipterm}{10} \newcounter{belowcaptionskipterm} \setcounter{belowcaptionskipterm}{7} %% RESET \@minCaptionBoxWidth TO Default VALUE WITH \relaxCaptionWidth %% SET \@minCaptionBoxWidth TO USER VALUE WITH \relaxCaptionWidth[] \newlength\@minCaptionBoxWidth \newlength\@minCaptionBoxWidthDefault \setlength\@minCaptionBoxWidthDefault{1in} %% RESET \@maxCaptionBoxWidth TO Default WITH \limitCaptionWidth %% SET \@maxCaptionBoxWidth WITH \limitCaptionWidth[] \newlength\@maxCaptionBoxWidth \newlength\@maxCaptionBoxWidthDefault \setlength\@maxCaptionBoxWidthDefault{\textwidth} %% DEFINE promptTablesFlag & PROVIDE ROUTINE TO CHANGE IT FROM %% "PROMPT"(1) TO "ON HOLD"(0) \newcounter{promptTablesFlag} \setcounter{promptTablesFlag}{1} \newcommand\holdTables{\setcounter{promptTablesFlag}{0}} %% SAME FOR promptFiguresFlag \newcounter{promptFiguresFlag} \setcounter{promptFiguresFlag}{1} \newcommand\holdFigures{\setcounter{promptFiguresFlag}{0}} %% DEFAULT CaptionFontSize & TableFontSize AS \small; CAN BE RESET \let \CaptionFontSize \small \let \TableFontSize \small %% DEFAULT TABLE & FIGURE LR ALIGNMENT TO center; %% CAN RESET TO flushleft/-right \def \LRTablePlacement {center} \def \LRFigurePlacement {center} %% WITHIN-CAPTION JUSTIFICATION CAN BE SET %% OPTIONS: {}, {\raggedleft}, {\raggedright}, or {\centering} \def\CaptionJustification{} % <---DEFAULT IS FULL JUSTIFICATION %% WORKING VARIABLES \newlength\DeadMargin \newlength\@DataBoxWidth \newlength\CaptionBoxWidth \newlength\@DataBoxOffset \newlength\@CaptionBoxOffset \newlength\@captionIDwidth \newlength\@captionWidth \newlength\@DataBoxSurplus \newcommand\bxtable[3][t]{ \StoreTable[#1]{#2}{#3} \ifnum \arabic{promptTablesFlag} = 1 \addtocounter{TableClearedIndex}{1} \def\TableBoxLabel{tbl\roman{TableIndex}} \def\TableCaptionLabel{tblcap\roman{TableIndex}} \def\TblCaptionWidthLabel{tblcapwdth\roman{TableIndex}} \ReciteTable[#1]{\csname\TableCaptionLabel\endcsname} {\csname\TableBoxLabel\endcsname} {\csname\TblCaptionWidthLabel\endcsname} \fi } \newcommand\StoreTable[3][]{ \addtocounter{TableIndex}{1} \setlength\DeadMargin\TableDeadMargin \def\TableBoxLabel{tbl\roman{TableIndex}} \def\TableCaptionLabel{tblcap\roman{TableIndex}} \def\TblCaptionWidthLabel{tblcapwdth\roman{TableIndex}} \expandafter\SaveCBox\csname\TableBoxLabel\endcsname{\TableFontSize#3} \expandafter\def\csname\TableCaptionLabel\endcsname{#2} \expandafter\newlength\csname\TblCaptionWidthLabel\endcsname \expandafter\setlength\csname\TblCaptionWidthLabel\endcsname \CaptionBoxWidth } \newcommand\ReciteTable[4][h]{ \begin{table}[#1] \begin{\LRTablePlacement} \let\@makecaption \new@makecaption \setlength\abovecaptionskip{\arabic{abovecaptionskipterm}\p@} \setlength\belowcaptionskip{\arabic{belowcaptionskipterm}\p@} \set@DataBoxWidth{#3} \setlength\CaptionBoxWidth{#4} \set@BoxOffsets \rule{\@CaptionBoxOffset}{0em}% \parbox{\CaptionBoxWidth}{\caption {#2}}% \rule{\@CaptionBoxOffset}{0em}% \par \rule{\@DataBoxOffset}{0in}% \usebox{#3} \rule{\@DataBoxOffset}{0in}% \let\@makecaption \old@makecaption \setlength\abovecaptionskip \oldabovecaptionskip \setlength\belowcaptionskip \oldbelowcaptionskip \end{\LRTablePlacement} \end{table} } \newcommand\nextTable[1][h]{ \ifnum \arabic{TableClearedIndex} < \arabic{TableIndex}{ \addtocounter{TableClearedIndex}{1} %% \TableBoxLabel : tbli, tblii, tbliii, tbliv, etc. %% \TableCaptionLabel : tblcapi, tblcapii, tblcapiii, tblcapiv, etc. %% \TblCaptionWidthLabel: tblcapwdthi, tblcapwdthii, tblcapwdthiii,etc. \def\TableBoxLabel{tbl\roman{TableClearedIndex}} \def\TableCaptionLabel{tblcap\roman{TableClearedIndex}} \def\TblCaptionWidthLabel{tblcapwdth\roman{TableClearedIndex}} \ReciteTable[#1]{\csname\TableCaptionLabel\endcsname} {\csname\TableBoxLabel\endcsname} {\csname\TblCaptionWidthLabel\endcsname} }\fi } \newcommand\clearTables{ \clearpage \clearlistoftables \clearpage %%DO UNTIL ALL HELD TABLES ARE CLEARED \whiledo{\arabic{TableClearedIndex} < \arabic{TableIndex}}{ \addtocounter{TableClearedIndex}{1} %% \TableBoxLabel : tbli, tblii, tbliii, tbliv, etc. %% \TableCaptionLabel : tblcapi, tblcapii, tblcapiii, tblcapiv, etc. %% \TblCaptionWidthLabel: tblcapwdthi, tblcapwdthii, tblcapwdthiii,etc. \def\TableBoxLabel{tbl\roman{TableClearedIndex}} \def\TableCaptionLabel{tblcap\roman{TableClearedIndex}} \def\TblCaptionWidthLabel{tblcapwdth\roman{TableClearedIndex}} \theClearedTable{\csname\TableCaptionLabel\endcsname} {\csname\TableBoxLabel\endcsname} {\csname\TblCaptionWidthLabel\endcsname} } } %% \theClearedTable CAN BE RENEWED IF DIFFERENT OUTPUT FORMAT IS DESIRED \newcommand\theClearedTable[4][h]{ %% CLEAR THIS TABLE ON A PAGE BY ITSELF, CENTERED VERTICALLY \vspace*{\fill} \ReciteTable[#1]{#2}{#3}{#4} \vspace*{\fill} \clearpage } \newcommand\bxfigure[3][t]{ \StoreFigure[#1]{#2}{#3} \ifnum \arabic{promptFiguresFlag} = 1 \addtocounter{FigureClearedIndex}{1} \def\FigureBoxLabel{fig\roman{FigureIndex}} \def\FigureCaptionLabel{figcap\roman{FigureIndex}} \def\FigCaptionWidthLabel{figcapwdth\roman{FigureIndex}} \ReciteFigure[#1]{\csname\FigureCaptionLabel\endcsname} {\csname\FigureBoxLabel\endcsname} {\csname\FigCaptionWidthLabel\endcsname} \fi } \newcommand\StoreFigure[3][]{ \addtocounter{FigureIndex}{1} \setlength\DeadMargin\FigureDeadMargin \def\FigureBoxLabel{fig\roman{FigureIndex}} \def\FigureCaptionLabel{figcap\roman{FigureIndex}} \def\FigCaptionWidthLabel{figcapwdth\roman{FigureIndex}} \expandafter\SaveCBox\csname\FigureBoxLabel\endcsname{#3} \expandafter\def\csname\FigureCaptionLabel\endcsname{#2} \expandafter\newlength\csname\FigCaptionWidthLabel\endcsname \expandafter\setlength\csname\FigCaptionWidthLabel\endcsname \CaptionBoxWidth } \newcommand\ReciteFigure[4][h]{ \begin{figure}[#1] \begin{\LRFigurePlacement} \let\@makecaption \new@makecaption \setlength\abovecaptionskip{\arabic{abovecaptionskipterm}\p@} \setlength\belowcaptionskip{\arabic{belowcaptionskipterm}\p@} \set@DataBoxWidth{#3} \setlength\CaptionBoxWidth{#4} \set@BoxOffsets \rule{\@DataBoxOffset}{0in}% \usebox{#3}% \rule{\@DataBoxOffset}{0in}% \par \rule{\@CaptionBoxOffset}{0em}% \parbox{\CaptionBoxWidth}{\caption {#2}}% \rule{\@CaptionBoxOffset}{0em}% \let\@makecaption \old@makecaption \setlength\abovecaptionskip \oldabovecaptionskip \setlength\belowcaptionskip \oldbelowcaptionskip \end{\LRFigurePlacement} \end{figure} } \newcommand\nextFigure[1][h]{ \ifnum \arabic{FigureClearedIndex} < \arabic{FigureIndex}{ \addtocounter{FigureClearedIndex}{1} %% \FigureBoxLabel: : figi, figii, figiii, figiv, etc. %% \FigureCaptionLabel : figcapi, figcapii, figcapiii, figcapiv, etc. %% \FigCaptionWidthLabel: figcapwdthi, figcapwdthii, figcapwdthiii,etc. \def\FigureBoxLabel{fig\roman{FigureClearedIndex}} \def\FigureCaptionLabel{figcap\roman{FigureClearedIndex}} \def\FigCaptionWidthLabel{figcapwdth\roman{FigureClearedIndex}} \ReciteFigure[#1]{\csname\FigureCaptionLabel\endcsname} {\csname\FigureBoxLabel\endcsname} {\csname\FigCaptionWidthLabel\endcsname} }\fi } \newcommand\clearFigures{ \clearpage \clearlistoffigures \clearpage %%DO UNTIL ALL HELD FIGURES ARE CLEARED \whiledo{\arabic{FigureClearedIndex} < \arabic{FigureIndex}}{ \addtocounter{FigureClearedIndex}{1} %% \FigureBoxLabel: : figi, figii, figiii, figiv, etc. %% \FigureCaptionLabel : figcapi, figcapii, figcapiii, figcapiv, etc. %% \FigCaptionWidthLabel: figcapwdthi, figcapwdthii, figcapwdthiii,etc. \def\FigureBoxLabel{fig\roman{FigureClearedIndex}} \def\FigureCaptionLabel{figcap\roman{FigureClearedIndex}} \def\FigCaptionWidthLabel{figcapwdth\roman{FigureClearedIndex}} \theClearedFigure{\csname\FigureCaptionLabel\endcsname} {\csname\FigureBoxLabel\endcsname} {\csname\FigCaptionWidthLabel\endcsname} } } %% \theClearedFigure CAN BE RENEWED IF DIFFERENT OUTPUT FORMAT DESIRED \newcommand\theClearedFigure[4][h]{ %% CLEAR THIS FIGURE ON A PAGE BY ITSELF, CENTERED VERTICALLY \vspace*{\fill} \ReciteFigure[#1]{#2}{#3}{#4} \vspace*{\fill} \clearpage } \newcommand\relaxCaptionWidth[1][\@minCaptionBoxWidthDefault]{ \setlength\@minCaptionBoxWidth{#1} \ifdim \@minCaptionBoxWidth > \@maxCaptionBoxWidth \setlength\@maxCaptionBoxWidth\@minCaptionBoxWidth \fi } \relaxCaptionWidth% SET INITIAL \@minCaptionBoxWidth TO DEFAULT VALUE \newcommand\limitCaptionWidth[1][\@maxCaptionBoxWidthDefault]{ \setlength\@maxCaptionBoxWidth{#1} \ifdim \@maxCaptionBoxWidth < \@minCaptionBoxWidth \setlength\@minCaptionBoxWidth\@maxCaptionBoxWidth \fi } \limitCaptionWidth% SET INITIAL \@maxCaptionBoxWidth TO DEFAULT VALUE \newcommand\constrainCaptionWidth[2][-1in]{ \ifdim #1 < 0in \setlength\@minCaptionBoxWidth{#2} \setlength\@maxCaptionBoxWidth{#2} \else \ifdim #1 < #2 \setlength\@minCaptionBoxWidth{#1} \setlength\@maxCaptionBoxWidth{#2} \else \setlength\@minCaptionBoxWidth{#2} \setlength\@maxCaptionBoxWidth{#1} \fi \fi } \newcommand\SaveCBox[2]{ \newsavebox{#1} \sbox{#1}{#2} \set@BoxWidths{#1} } \newcommand\set@BoxWidths[1]{% of DataBox & CaptionBox (-2\DeadMargin) \set@DataBoxWidth{#1} \set@CaptionBoxWidth } \newcommand\set@DataBoxWidth[1]{ \setlength {\@DataBoxWidth}{\widthof{\usebox{#1}}} } \newcommand\set@CaptionBoxWidth{ \setlength\CaptionBoxWidth\@DataBoxWidth \addtolength{\CaptionBoxWidth}{-2\DeadMargin} \ifdim \CaptionBoxWidth < \@minCaptionBoxWidth \setlength\CaptionBoxWidth\@minCaptionBoxWidth \fi \ifdim \CaptionBoxWidth > \@maxCaptionBoxWidth \setlength\CaptionBoxWidth\@maxCaptionBoxWidth \fi } \newcommand\set@BoxOffsets{ \setlength\@DataBoxSurplus{\@DataBoxWidth} \addtolength\@DataBoxSurplus{-\CaptionBoxWidth} \ifdim \@DataBoxSurplus > 0in \setlength\@CaptionBoxOffset{0.5\@DataBoxSurplus} \setlength\@DataBoxOffset{0in} \else \setlength\@CaptionBoxOffset{0in} \setlength\@DataBoxOffset{-0.5\@DataBoxSurplus} \fi } \long\def\offset@caption#1#2{ \setlength\@captionIDwidth{\widthofpbox{\CaptionFontSize{#1.}}} \addtolength\@captionIDwidth\captionGap \setlength\@captionWidth\CaptionBoxWidth \addtolength\@captionWidth{-\@captionIDwidth} \CaptionFontSize{#1.}\hfill\parbox[t]{\@captionWidth} {\CaptionJustification\CaptionFontSize{#2.}}% } \long\def\nooffset@caption#1#2{% \CaptionJustification\CaptionFontSize #1.\rule{\captionGap}{0in}#2.% } \long\def\shortleft@caption#1#2{% \raggedright \CaptionFontSize #1.\rule{\captionGap}{0in}#2.% } \long\def\shortcenter@caption#1#2{% \centering \CaptionFontSize #1.\rule{\captionGap}{0in}#2.% } \long\def\shortright@caption#1#2{% \raggedleft \CaptionFontSize #1.\rule{\captionGap}{0in}#2.% } \long\def\new@makecaption#1#2{% \vskip\abovecaptionskip \sbox\@tempboxa{\CaptionFontSize #1.\rule{\captionGap}{0in}#2.}% \ifdim \wd\@tempboxa >\hsize \long@caption{#1}{#2} \else \short@caption{#1}{#2} \fi \vskip\belowcaptionskip } \newcommand\captionStyle[2]{ \if o#1 \let\long@caption \offset@caption \fi \if n#1 \let\long@caption \nooffset@caption \fi \if l#2 \let\short@caption \shortleft@caption \fi \if c#2 \let\short@caption \shortcenter@caption \fi \if r#2 \let\short@caption \shortright@caption \fi } %% SET DEFAULT CAPTION STYLE: CAPTION ID OFFSET FOR LONG CAPTIONS, %% SHORT CAPTIONS LEFT ALIGNED \captionStyle{o}{l} \newcommand\killtableofcontents{ \renewcommand\tableofcontents{} } %%LIST OF FIGURES HANDLING: \newcounter{lofInvocations} \setcounter{lofInvocations}{0} \newcounter{lofPrints} \setcounter{lofPrints}{0} \let\oldlistoffigures\listoffigures \newcommand\killlistoffigures{ \def\oldlistoffigures {} \renewcommand\listoffigures{} } \newcommand\holdlistoffigures{ \renewcommand\listoffigures{\addtocounter{lofInvocations}{1}} } \newcommand\clearlistoffigures{ \whiledo{\arabic{lofPrints} < \arabic{lofInvocations}}{ \addtocounter{lofPrints}{1} \oldlistoffigures } } %%LIST OF TABLES HANDLING: \newcounter{lotInvocations} \setcounter{lotInvocations}{0} \newcounter{lotPrints} \setcounter{lotPrints}{0} \let\oldlistoftables\listoftables \newcommand\killlistoftables{ \def\oldlistoftables {} \renewcommand\listoftables{} } \newcommand\holdlistoftables{ \renewcommand\listoftables{\addtocounter{lotInvocations}{1}} } \newcommand\clearlistoftables{ \whiledo{\arabic{lotPrints} < \arabic{lotInvocations}}{ \addtocounter{lotPrints}{1} \oldlistoftables } } %% TO RETAIN BACKWARD COMPATIBILITY WITH THE PREDECESSOR TO boxhandler, %% THE FOLLOWING ASSIGNMENTS ARE MADE. \let\arltable\bxtable \let\arlfigure\bxfigure \endinput %% %% End of file `boxhandler.sty'.