1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
%%
%% This is file `fitbox.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% fitbox.dtx (with options: `style')
%%
%% IMPORTANT NOTICE:
%%
%% For the copyright see the source file.
%%
%% Any modified versions of this file must be renamed
%% with new filenames distinct from fitbox.sty.
%%
%% For distribution of the original source see the terms
%% for copying and modification in the file fitbox.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.)
%% Copyright 2015, Boris Veytsman <borisv@lk.net
%% 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 the license is in
%% http://www.latex-project.org/lppl.txt
%% and version 1.3 or later is part of all distributions of
%% LaTeX version 2003/06/01 or later.
%%
%% This work has the LPPL maintenance status `maintained'.
%%
%% The Current Maintainer of this work is Boris Veytsman
%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{fitbox}
[2015/02/02 v1.00 Fitting boxes on a page]
\newdimen\fitboxnatheight
\newdimen\fitboxnatwidth
\RequirePackage{xkeyval}
\define@cmdkeys{FTBX}{maxheight, minheight, maxwidth, minwidth,
belowboxspace, maxenlargepage}
\def\fitboxset#1{\setkeys{FTBX}{#1}}
\fitboxset{maxheight=\textheight, minheight=\fitboxnatheight,
maxwidth=\textwidth, minwidth=\fitboxnatwidth,
belowboxspace=0pt, maxenlargepage=0pt}
\newbox\FTBX@box
\newdimen\FTBX@desired@maxheight
\newdimen\FTBX@desired@minheight
\newdimen\FTBX@available@height
\newcommand\fitbox[2][]{\leavevmode
\fitboxset{#1}%
\setbox\FTBX@box=\hbox{#2}%
\fitboxnatwidth=\wd\FTBX@box\relax
\fitboxnatheight=\ht\FTBX@box\relax
\advance\fitboxnatheight by \dp\FTBX@box\relax
% Checking the sizes
\expandafter\ifdim\cmdKV@FTBX@minwidth>\columnwidth\relax
\PackageWarning{fitbox}{Minimal width is larger than page
width. Adjusting...}%
\def\cmd@KV@FTBX@minwidth{\columnwidth}%
\fi
\expandafter\ifdim\cmdKV@FTBX@maxwidth>\columnwidth\relax
\PackageWarning{fitbox}{Desired width is larger than page
width. Adjusting...}%
\def\cmd@KV@FTBX@maxwidth{\columnwidth}%
\fi
\expandafter\ifdim\cmdKV@FTBX@minheight>\textheight\relax
\PackageWarning{fitbox}{Minimal height is larger than page
height. Adjusting...}%
\def\cmd@KV@FTBX@minheight{\textheight}%
\fi
\expandafter\ifdim\cmdKV@FTBX@maxheight>\textheight\relax
\PackageWarning{fitbox}{Desired height is larger than page
height. Adjusting...}%
\def\cmd@KV@FTBX@maxheight{\textheight}%
\fi
% Calculating the minimal and maximal height
\Gscale@div{\@tempa}{\cmdKV@FTBX@maxwidth}{\fitboxnatwidth}%
\FTBX@desired@maxheight=\@tempa\fitboxnatheight\relax
\expandafter\ifdim\cmdKV@FTBX@maxheight<\FTBX@desired@maxheight\relax
\expandafter\FTBX@desired@maxheight=\cmdKV@FTBX@maxheight\relax
\fi
\Gscale@div{\@tempa}{\cmdKV@FTBX@minwidth}{\fitboxnatwidth}%
\FTBX@desired@minheight=\@tempa\fitboxnatheight\relax
\expandafter\ifdim\cmdKV@FTBX@minheight>\FTBX@desired@minheight\relax
\expandafter\FTBX@desired@minheight=\cmdKV@FTBX@minheight\relax
\fi
\ifdim\FTBX@desired@minheight>\FTBX@desired@maxheight\relax
\PackageWarning{fitbox}{Desired min scale exceeds desired min
scale. Adjusting...}%
\FTBX@desired@minheight=\FTBX@desired@maxheight\relax
\fi
\FTBX@available@height=\pagegoal\relax
\ifdim\FTBX@available@height>\vsize\relax
\FTBX@available@height=\vsize
\fi
\advance\FTBX@available@height by -\pagetotal\relax
\advance\FTBX@available@height by -\cmdKV@FTBX@belowboxspace\relax
\advance\FTBX@available@height by -\baselineskip\relax
\ifdim\FTBX@desired@maxheight>\FTBX@available@height\relax
\ifdim\FTBX@available@height<\FTBX@desired@minheight\relax
\@tempdima=\FTBX@desired@minheight\relax
\advance\@tempdima by
-\FTBX@available@height\relax
\expandafter\ifdim\cmdKV@FTBX@maxenlargepage<\@tempdima\relax
\newpage
\resizebox*{!}{\FTBX@desired@maxheight}{\box\FTBX@box}%
\else
\enlargethispage{\@tempdima}%
\resizebox*{!}{\FTBX@desired@minheight}{\box\FTBX@box}%
\fi
\else
\resizebox*{!}{\FTBX@available@height}{\box\FTBX@box}%
\fi
\else
\resizebox*{!}{\FTBX@desired@maxheight}{\box\FTBX@box}%
\fi
}
\endinput
%%
%% End of file `fitbox.sty'.
|