diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/fitbox |
Initial commit
Diffstat (limited to 'macros/latex/contrib/fitbox')
-rw-r--r-- | macros/latex/contrib/fitbox/Makefile | 61 | ||||
-rw-r--r-- | macros/latex/contrib/fitbox/README | 18 | ||||
-rw-r--r-- | macros/latex/contrib/fitbox/fitbox.bib | 14 | ||||
-rw-r--r-- | macros/latex/contrib/fitbox/fitbox.dtx | 529 | ||||
-rw-r--r-- | macros/latex/contrib/fitbox/fitbox.ins | 25 | ||||
-rw-r--r-- | macros/latex/contrib/fitbox/fitbox.pdf | bin | 0 -> 295166 bytes | |||
-rw-r--r-- | macros/latex/contrib/fitbox/napoleon.png | bin | 0 -> 31195 bytes | |||
-rw-r--r-- | macros/latex/contrib/fitbox/sample-subfigure.pdf | bin | 0 -> 88777 bytes | |||
-rw-r--r-- | macros/latex/contrib/fitbox/sample-subfigure.tex | 73 | ||||
-rw-r--r-- | macros/latex/contrib/fitbox/sample.pdf | bin | 0 -> 83215 bytes | |||
-rw-r--r-- | macros/latex/contrib/fitbox/sample.tex | 40 | ||||
-rw-r--r-- | macros/latex/contrib/fitbox/vitruvian.jpg | bin | 0 -> 63756 bytes |
12 files changed, 760 insertions, 0 deletions
diff --git a/macros/latex/contrib/fitbox/Makefile b/macros/latex/contrib/fitbox/Makefile new file mode 100644 index 0000000000..d363063c17 --- /dev/null +++ b/macros/latex/contrib/fitbox/Makefile @@ -0,0 +1,61 @@ +# +# +# This file is in public domain +# +# $Id$ +# + +PACKAGE=fitbox +SAMPLES = sample.tex sample-subfigure.tex + +all: $(PACKAGE).pdf ${SAMPLES:%.tex=%.pdf} + +%.pdf: %.dtx $(PACKAGE).sty + pdflatex $< + - bibtex $* + pdflatex $< + - makeindex -s gind.ist -o $*.ind $*.idx + - makeindex -s gglo.ist -o $*.gls $*.glo + pdflatex $< + while ( grep -q '^LaTeX Warning: Label(s) may have changed' $*.log) \ + do pdflatex $<; done + + + + +%.sty: %.ins %.dtx + pdflatex $< + +%.pdf: %.tex $(PACKAGE).sty + pdflatex $* + -bibtex $* + pdflatex $* + while ( grep -q '^LaTeX Warning: Label(s) may have changed' $*.log) \ + do pdflatex $*; done + + +.PRECIOUS: $(PACKAGE).cfg $(PACKAGE).sty + + +clean: + $(RM) $(PACKAGE).sty *.log *.aux \ + *.cfg *.glo *.idx *.toc \ + *.ilg *.ind *.out *.lof \ + *.lot *.bbl *.blg *.gls *.hd \ + *.dvi *.ps *.tgz *.zip *.brf + +veryclean: clean + $(RM) $(PACKAGE).pdf ${SAMPLES:%.tex=%.pdf} + +distclean: veryclean + +# +# Archive for the distribution. Includes typeset documentation +# +archive: all clean + COPYFILE_DISABLE=1 tar -C .. -czvf ../$(PACKAGE).tgz --exclude '*~' --exclude '*.tgz' --exclude '*.zip' --exclude CVS --exclude '.git*' $(PACKAGE); mv ../$(PACKAGE).tgz . + +zip: all clean + ${MAKE} $(PACKAGE).sty + $(RM) *.log + zip -r $(PACKAGE).zip * -x '*~' -x '*.tgz' -x '*.zip' -x CVS -x 'CVS/*' diff --git a/macros/latex/contrib/fitbox/README b/macros/latex/contrib/fitbox/README new file mode 100644 index 0000000000..bdd64eb941 --- /dev/null +++ b/macros/latex/contrib/fitbox/README @@ -0,0 +1,18 @@ + Fit graphics on a page + Boris Veytsman + +The fitbox package allows a box (usually an \includegraphics box) to +fit on the page. It scales the box to the maximal allowed size within +the user-set limits. If there there is not enough space on the page, +the box is moved to the next one. + + +version 1.02 2019/02/20 Bug fixes + New command \fitbox* for boxes inside floats + New command \SetFitboxLayout for emulation of figsize + package functionality + +version 1.01 2019/02/10 Use the width of the box around the graphics for + default max width. + Do not adjust user provided values even if they + seem nonsensical (but warn the user) diff --git a/macros/latex/contrib/fitbox/fitbox.bib b/macros/latex/contrib/fitbox/fitbox.bib new file mode 100644 index 0000000000..e7fbc0b6bb --- /dev/null +++ b/macros/latex/contrib/fitbox/fitbox.bib @@ -0,0 +1,14 @@ +@misc{TeXFAQ, + author = {{UK \TeX{} Users Group}}, + howpublished = {\url{http://www.tex.ac.uk/cgi-bin/texfaq2html}}, + title = {{UK} List of {\TeX} Frequently Asked Questions}, + year = {2015}, +} + +@Manual{FigSize, + title = {The \textsl{FigSize} Package}, + author = {Anthony A. Tanbakuchi}, + month = {March}, + year = 2002, + note = {\url{https://ctan.org/pkg/figsize}}} + diff --git a/macros/latex/contrib/fitbox/fitbox.dtx b/macros/latex/contrib/fitbox/fitbox.dtx new file mode 100644 index 0000000000..c445c03d87 --- /dev/null +++ b/macros/latex/contrib/fitbox/fitbox.dtx @@ -0,0 +1,529 @@ +% \iffalse +% +%% Copyright 2015-2019, 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 +%% +% \begin{macrocode} +%<style>\NeedsTeXFormat{LaTeX2e} +%<*gobble> +\ProvidesFile{fitbox.dtx} +%</gobble> +%<style>\ProvidesPackage{fitbox} +%<*style> +[2019/02/20 v1.02 Fitting boxes on a page] +% \end{macrocode} +%</style> +%<*gobble> +% \fi +% +% +%% \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 \~} +% +%\iffalse +% \begin{macrocode} +\documentclass{ltxdoc} +\usepackage{hypdoc} +\PageIndex +\CodelineIndex +\RecordChanges +\EnableCrossrefs +\begin{document} + \DocInput{fitbox.dtx} +\end{document} +% \end{macrocode} +%</gobble> +% \fi +% \MakeShortVerb{|} +% \GetFileInfo{fitbox.dtx} +% +% +% \title{Fit graphics on a page\thanks{\copyright 2015--2019 Boris Veytsman} +% \thanks{This package was commissined by Neadwerx, \url{http://www.neadwerx.com/}}} +% \author{Boris Veytsman \thanks{borisv@lk.net}} +% \date{\filedate, \fileversion} +% \maketitle +% +% \begin{abstract} +% The \textsl{fitbox} package allows a box (usually an +% |\includegraphics| box) to fit on the page. It scales the box +% to the maximal allowed size within the user-set limits. If there +% there is not enough space on the page, the box is moved to the +% next one. +% \end{abstract} +% +% \tableofcontents +% +% \clearpage +% +%\section{Introduction} +%\label{sec:intro} +% +% How often one puts a picture on a page only to see that \LaTeX\ +% decides to move it to the next one because there is not enough +% space---while shaving a millimeter off the height would make the +% difference? This package is intended to alleviate this difference. +% It uses several strategies to fit a picture on the page, and only if +% they fail, the picture is moved to the next one. +% +%\section{User Guide} +%\label{sec:ug} +% +% +%\subsection{Installation} +%\label{sec:ug_install} +% +% The installation of the class follows the usual +% practice~\cite{TeXFAQ} for \LaTeX{} packages: +% \begin{enumerate} +% \item Run \textsf{latex} on |fitbox.ins|. This will produce the file +% |fitbox.sty|. +% \item Put the file |fitbox.sty| to +% the place where \LaTeX{} can find it (see +% \cite{TeXFAQ} or the documentation for your \TeX{} +% system).\label{item:install} +% \item Update the database of file names. Again, see \cite{TeXFAQ} +% or the documentation for your \TeX{} system for the system-specific +% details.\label{item:update} +% \item The file |fitbox.pdf| provides the documentation for the +% package +% \end{enumerate} +% As an alternative to items~\ref{item:install} and~\ref{item:update} +% you can just put the files in the working directory where your +% |.tex| file is. +% +% +% +%\subsection{Usage} +%\label{sec:usage} +% +% To use the package, add to the preamble of your document +% \begin{verbatim} +% \usepackage{fitbox} +% \end{verbatim} +% +% \DescribeMacro{\fitbox}% +% The main command of the package is +% \cs{fitbox}\oarg{options}\marg{stuff}. The \marg{stuff} will be +% typeset in a box according to the \oarg{options}. In most cases +% \marg{stuff} is an \cs{includegraphics} command, but anything that +% fits into an LR-box can be typeset in this way. +% +% The \marg{stuff} is typeset in a box, and then the box is put on the +% page according to the following algorithm: +% \begin{enumerate} +% \item \TeX\ starts a new paragraph. +% \item The box is scaled up to the maximal dimensions specified by +% the user (while keeping the aspect ratio). +% \item If there is not enough space on the page to fit the box, the +% latter is scaled down as neccessary, but no smaller than the +% minimal dimensions specified by the user. +% \item If there is still not enough space, \TeX\ tries to enlarge the +% page up to the specified limit. +% \item If this also fails, \TeX\ starts a new page and fits the box +% there. +% \end{enumerate} +% +% \DescribeMacro{\fitbox*}% +% The starred version \cs{fitbox*} is intended to be used inside +% floats, where page length is not well defined. This command uses +% only the first two steps of the alogithm above, scaling the box up +% to the maximal dimensions provided by the user. +% +% \DescribeMacro{\fitboxset}% +% The options can be set individually for each \cs{fitbox} command, or +% globally using the command \cs{fitboxset}, for example, +% \begin{verbatim} +% \fitboxset{maxwidth=\textwidth, minwidth=\fitboxnatwidth} +% \end{verbatim} +% +% +% \DescribeMacro{\fitboxnatwidth}% +% \DescribeMacro{\fitboxnatheight}% +% The options of the package use key-value interface. Often +% the values are dimensions; in these cases the special dimensions +% \cs{fitboxnatwidth} and \cs{fitboxnatheight} can be used; they are +% equal to natural dimensions of the box. Note that |height| and +% \cs{fitboxnatheight} are actually \emph{total heights}, including +% both height and depth of the corresponding boxes. For example, +% \begin{verbatim} +% \fitboxset{minheight=0.5\fitboxnatheight} +% \end{verbatim} +% means that the box cannot be scaled down more than 50\%. +% +% The following options are recognized by the \cs{fitbox} command: +% \begin{description} +% \item[maxheight:] The maximal total height of the box. By default +% \cs{textheight}. +% \item[maxwidth:] The maximal width of the box. By default +% the size of the current box to be constructed. +% \item[minheight:] The minimal height of the box. By default +% \cs{fitboxnatheight}. +% \item[minwidth:] The minimal width of the box. By default +% \cs{fitboxnatwidth}. +% \item[belowboxspace:] The height of the space that must be left +% below the box (e.g. for a caption). By default zero. +% \item[maxenlargepage:] The maximal amount to add to the current +% page. By default zero. +% \end{description} +% +% \DescribeMacro{\SetFitboxLayout}% +% Since version 1.02 the package added the functionality of +% \textsl{FigSize} package~\cite{FigSize}. The latter has a handy +% command \cs{SetFigLayout}, which can be used to scale all figures on +% a page. This package uses the command \cs{SetFitboxLayout} that +% somewhat mimics \cs{SetFigLayout}. The macro has the arguments +% \cs{SetFitboxLayout}\oarg{keys}\marg{rows}\marg{columns}, and helps +% to scale the boxes into a grid. However, unlike \textsl{FigSize} +% package, we do not redefine \cs{includegraphics} command: you should +% use \cs{fitbox} for your graphics. The command \cs{SetFitboxLayout} +% is just \cs{fitboxset} with special values of the parameters. These +% commands can be mixed, with the latest command overriding the +% previous ones. +% +% The following keys are recognized by the \cs{SetFitboxLayout} command: +% \begin{description} +% \item[colsep:] the distance between the columns; by default the size +% of \cs{quad}. +% \item[colsepexpr:] if set, the width of the expression becomes +% \texttt{colsep}. For example, \path{colsepexpr=\quad} makes +% separation between the columns the size of \cs{quad}. +% \item[maincapheight:] The height of the main caption. By default, +% $\cs{abovecaptionskip}+\cs{belowcaptionskip}+ +% n\cs{baselineskip})$ +% where $n$ is the expected number of lines in the main caption (by +% default 1). +% \item[maincaplines:] The number of lines in the main caption. By +% default 1. +% \item[subcapheight:] The height of the subcaption. By default, +% $\cs{abovecaptionskip}+\cs{belowcaptionskip}+m\cs{baselineskip}$ +% where $m$ is the expected number of lines in the subcaptions (by +% default 0). +% \item[subcaplines:] The number of lines in the subcaptions. By +% default 0. +% \end{description} +% +% +%\StopEventually{\clearpage +% \bibliography{fitbox} +% \bibliographystyle{unsrt}} +% +% \clearpage +% +% \section{Implementation} +% \label{sec:implementation} +% +% \begin{macrocode} +%<*style> +% \end{macrocode} +% +% +%\subsection{Setting up parameters} +%\label{sec:params} +% +% +% +% +% \begin{macro}{\fitboxnatheight} +% The total height of the box +% \begin{macrocode} +\newdimen\fitboxnatheight +% \end{macrocode} +% +% \end{macro} +% +% \begin{macro}{\fitboxnatwidth} +% The total width of the box +% \begin{macrocode} +\newdimen\fitboxnatwidth +% \end{macrocode} +% +% \end{macro} +% +% +% \changes{v1.01}{2019/02/20}{New keys for \cs{SetFitboxLayout}} +% We use |xkeyval| interface: +% \begin{macrocode} +\RequirePackage{xkeyval} +\define@cmdkeys{FTBX}{maxheight, minheight, maxwidth, minwidth, + belowboxspace, maxenlargepage, colsep, maincapheight, + subcapheight} +% \end{macrocode} +% +% Setting some keys changes other keys +% \begin{macrocode} +\define@key{FTBX}{colsepexpr}{% + \setbox\@tempboxa=\hbox{#1}% + \edef\cmdKV@FTBX@colsep{\wd\@tempboxa}} +\define@key{FTBX}{maincaplines}{% + \@tempdima=\z@ + \advance\@tempdima by #1\baselineskip\relax + \ifnum#1>0\relax + \advance\@tempdima by \parskip + \fi + \advance\@tempdima by \abovecaptionskip + \advance\@tempdima by \belowcaptionskip + \edef\cmdKV@FTBX@maincapheight{\the\@tempdima}} +\define@key{FTBX}{subcaplines}{% + \@tempdima=\z@ + \advance\@tempdima by #1\baselineskip\relax + \ifnum#1>0\relax + \advance\@tempdima by \parskip + \fi + \advance\@tempdima by \abovecaptionskip + \advance\@tempdima by \belowcaptionskip + \edef\cmdKV@FTBX@subcapheight{\the\@tempdima}} +% \end{macrocode} +% +% +% \begin{macro}{\fitboxset} +% Setting everything +% \begin{macrocode} +\def\fitboxset#1{\setkeys{FTBX}{#1}} +% \end{macrocode} +% +% \end{macro} +% +%\changes{v1.01}{2019/02/10}{Changed maximal width} +% The defaults +% \begin{macrocode} +\fitboxset{maxheight=\textheight, minheight=\fitboxnatheight, + maxwidth=\hsize, minwidth=\fitboxnatwidth, + belowboxspace=0pt, maxenlargepage=0pt, colsepexpr={aaa}, + maincaplines=1, subcaplines=0} +% \end{macrocode} +% +% +%\subsection{Main command} +%\label{sec:main_command} +% +% \begin{macro}{\FTBX@box} +% The box which will held the stuff to be typeset +% \begin{macrocode} +\newbox\FTBX@box +% \end{macrocode} +% +% \end{macro} +% +% \begin{macro}{\FTBX@desired@maxheight} +% The desired maximal height +% \begin{macrocode} +\newdimen\FTBX@desired@maxheight +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\FTBX@desired@minheight} +% The desired minimal height +% \begin{macrocode} +\newdimen\FTBX@desired@minheight +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\FTBX@available@height} +% The desired available height +% \begin{macrocode} +\newdimen\FTBX@available@height +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fitbox} +% \changes{v1.02}{2019/02/18}{Split into normal and starred version} +% The main command +% \begin{macrocode} +\def\fitbox{\@ifstar\@@fitbox\@fitbox} +% \end{macrocode} +% +% \end{macro} +% +% \begin{macro}{\@fitbox} +% \changes{v1.01}{2019/02/10}{Do not force width adjustment} +% \changes{v1.02}{2019/02/17}{\cs{noident} instead of \cs{leavevmode} +% (suggested by Frank Mittelbach)} +% \changes{v1.02}{2019/02/18}{Split into normal and starred version} +% The main command---``normal'' version +% \begin{macrocode} +\newcommand\@fitbox[2][]{\noindent + \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 too large. Consider + changing it to \the\hsize}% + \fi + \expandafter\ifdim\cmdKV@FTBX@maxwidth>\hsize\relax + \PackageWarning{fitbox}{Desired width is too large. Consider + changing it to \the\hsize}% + \fi + \expandafter\ifdim\cmdKV@FTBX@minheight>\textheight\relax + \PackageWarning{fitbox}{Minimal height is too large. + Consider changing it to \the\textheight}% + \fi + \expandafter\ifdim\cmdKV@FTBX@maxheight>\textheight\relax + \PackageWarning{fitbox}{Desired height is too large. + Consider changing it to \the\textheight}% + \fi + % Calculating the minimal and maximal height + \Gscale@div{\@FTBX@tempa}{\cmdKV@FTBX@maxwidth}{\fitboxnatwidth}% + \FTBX@desired@maxheight=\@FTBX@tempa\fitboxnatheight\relax + \expandafter\ifdim\cmdKV@FTBX@maxheight<\FTBX@desired@maxheight\relax + \expandafter\FTBX@desired@maxheight=\cmdKV@FTBX@maxheight\relax + \fi + \Gscale@div{\@FTBX@tempa}{\cmdKV@FTBX@minwidth}{\fitboxnatwidth}% + \FTBX@desired@minheight=\@FTBX@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 max + scale.}% + \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 +} +% \end{macrocode} +% +% \end{macro} +% +% \begin{macro}{\@@fitbox} +% \changes{v1.01}{2019/02/10}{Do not force width adjustment} +% \changes{v1.02}{2019/02/17}{\cs{noident} instead of \cs{leavevmode} +% (suggested by Frank Mittelbach)} +% \changes{v1.02}{2019/02/18}{Split into normal and starred version} +% The main command---``starred'' version. Simplified computations. +% \begin{macrocode} +\newcommand\@@fitbox[2][]{\noindent + \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 too large. Consider + changing it to \the\hsize}% + \fi + \expandafter\ifdim\cmdKV@FTBX@maxwidth>\hsize\relax + \PackageWarning{fitbox}{Desired width is too large. Consider + changing it to \the\hsize}% + \fi + \expandafter\ifdim\cmdKV@FTBX@minheight>\textheight\relax + \PackageWarning{fitbox}{Minimal height is too large. + Consider changing it to \the\textheight}% + \fi + \expandafter\ifdim\cmdKV@FTBX@maxheight>\textheight\relax + \PackageWarning{fitbox}{Desired height is too large. + Consider changing it to \the\textheight}% + \fi + % Calculating the minimal and maximal height + \Gscale@div{\@FTBX@tempa}{\cmdKV@FTBX@maxwidth}{\fitboxnatwidth}% + \FTBX@desired@maxheight=\@FTBX@tempa\fitboxnatheight\relax + \expandafter\ifdim\cmdKV@FTBX@maxheight<\FTBX@desired@maxheight\relax + \expandafter\FTBX@desired@maxheight=\cmdKV@FTBX@maxheight\relax + \fi + \Gscale@div{\@FTBX@tempa}{\cmdKV@FTBX@minwidth}{\fitboxnatwidth}% + \FTBX@desired@minheight=\@FTBX@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 max + scale.}% + \fi + \resizebox*{!}{\FTBX@desired@maxheight}{\box\FTBX@box}% +} +% \end{macrocode} +% +% \end{macro} +% +% +%\subsection{Multi-figure layout} +%\label{sec:layout} +% +% +% +% \begin{macro}{\SetFitboxLayout} +% \changes{v1.02}{2019/02/17}{New macro} +% \changes{v1.02}{2019/02/20}{Key-value interface} +% A macro styles after \cs{SetFigsizeLayout} of \textsl{FigSize} +% package. +% \begin{macrocode} +\newcommand\SetFitboxLayout[3][]{% + \fitboxset{#1}% + \@tempdima=\textheight + \advance\@tempdima by -\cmdKV@FTBX@maincapheight\relax + \divide\@tempdima by #2\relax + \advance\@tempdima by -\cmdKV@FTBX@subcapheight\relax + \edef\cmdKV@FTBX@maxheight{\the\@tempdima}% + \@tempdima=\columnwidth + \@tempdimb=\cmdKV@FTBX@colsep\relax + \advance\@tempdima by -#3\@tempdimb\relax + \advance\@tempdima by \@tempdimb\relax + \divide\@tempdima by #3\relax + \edef\cmdKV@FTBX@maxwidth{\the\@tempdima}% +} +% \end{macrocode} +% +% \end{macro} +% +% \begin{macrocode} +%</style> +% \end{macrocode} +%\Finale +%\clearpage +% +%\PrintChanges +%\clearpage +%\PrintIndex +% +\endinput diff --git a/macros/latex/contrib/fitbox/fitbox.ins b/macros/latex/contrib/fitbox/fitbox.ins new file mode 100644 index 0000000000..68df1a0901 --- /dev/null +++ b/macros/latex/contrib/fitbox/fitbox.ins @@ -0,0 +1,25 @@ +% +% Doctrip file for fitbox +% This file is in public domain +% +\def\batchfile{fitbox.ins} +\input docstrip +\keepsilent +\showprogress + + +\askforoverwritefalse + +\generate{% + \file{fitbox.sty}{\from{fitbox.dtx}{style}}} + +\obeyspaces +\Msg{*****************************************************}% +\Msg{* Congratulations! You successfully generated the *}% +\Msg{* fitbox package. *}% +\Msg{* *}% +\Msg{* Please move the file fitbox.sty to the place *}% +\Msg{* where LaTeX files are kept in your system *}% +\Msg{* *}% +\Msg{* Happy TeXing! *}% +\Msg{*****************************************************}%
\ No newline at end of file diff --git a/macros/latex/contrib/fitbox/fitbox.pdf b/macros/latex/contrib/fitbox/fitbox.pdf Binary files differnew file mode 100644 index 0000000000..3fc9228d46 --- /dev/null +++ b/macros/latex/contrib/fitbox/fitbox.pdf diff --git a/macros/latex/contrib/fitbox/napoleon.png b/macros/latex/contrib/fitbox/napoleon.png Binary files differnew file mode 100644 index 0000000000..994fcd9cc6 --- /dev/null +++ b/macros/latex/contrib/fitbox/napoleon.png diff --git a/macros/latex/contrib/fitbox/sample-subfigure.pdf b/macros/latex/contrib/fitbox/sample-subfigure.pdf Binary files differnew file mode 100644 index 0000000000..ba8f3147b7 --- /dev/null +++ b/macros/latex/contrib/fitbox/sample-subfigure.pdf diff --git a/macros/latex/contrib/fitbox/sample-subfigure.tex b/macros/latex/contrib/fitbox/sample-subfigure.tex new file mode 100644 index 0000000000..cd8fd196b7 --- /dev/null +++ b/macros/latex/contrib/fitbox/sample-subfigure.tex @@ -0,0 +1,73 @@ +\documentclass{article} +\usepackage{graphicx} +\usepackage{fitbox} +\usepackage{subfig} +\begin{document} + +The use of fitbox with a subfigure. Note that the optional argument +for the command counts the lines for the subcaptions. + +\SetFitboxLayout[subcaplines=1]{3}{2} + + + + +\begin{figure} + \centering + \subfloat[First + Napoleon]{\fitbox*{\includegraphics{napoleon}}}\quad + \subfloat[Second + Napoleon]{\fitbox*{\includegraphics{napoleon}}}\\ + \subfloat[Third + Napoleon]{\fitbox*{\includegraphics{napoleon}}}\quad + \subfloat[Fourth + Napoleon]{\fitbox*{\includegraphics{napoleon}}}\\ + \subfloat[Fifth + Napoleon]{\fitbox*{\includegraphics{napoleon}}}\quad + \subfloat[Sixth + Napoleon]{\fitbox*{\includegraphics{napoleon}}} + \caption{Six Napoleons, \texttt{\textbackslash SetFitboxLayout[subcaplines=1]\{3\}\{2\}}} + \label{fig:napoleons} +\end{figure} + +\SetFitboxLayout{3}{2} + +\begin{figure} + \centering + \subfloat{\fitbox*{\includegraphics{napoleon}}}\quad + \subfloat{\fitbox*{\includegraphics{napoleon}}}\\ + \subfloat{\fitbox*{\includegraphics{napoleon}}}\quad + \subfloat{\fitbox*{\includegraphics{napoleon}}}\\ + \subfloat{\fitbox*{\includegraphics{napoleon}}}\quad + \subfloat{\fitbox*{\includegraphics{napoleon}}} + \caption{Six Napoleons, no subcaptions, \texttt{\textbackslash SetFitboxLayout\{3\}\{2\}}} + \label{fig:napoleons1} +\end{figure} + +\SetFitboxLayout[subcaplines=1, maincaplines=2]{2}{3} + + + + +\begin{figure} + \centering + \subfloat[First + Napoleon]{\fitbox*{\includegraphics{napoleon}}}\quad + \subfloat[Second + Napoleon]{\fitbox*{\includegraphics{napoleon}}}\quad + \subfloat[Third + Napoleon]{\fitbox*{\includegraphics{napoleon}}}\\ + \subfloat[Fourth + Napoleon]{\fitbox*{\includegraphics{napoleon}}}\quad + \subfloat[Fifth + Napoleon]{\fitbox*{\includegraphics{napoleon}}}\quad + \subfloat[Sixth + Napoleon]{\fitbox*{\includegraphics{napoleon}}} + \caption{Six Napoleons, another arrangement\\ + \texttt{\textbackslash SetFitboxLayout[subcaplines=1, + maincaplines=2]\{2\}\{3\}}} + \label{fig:napoleons3} +\end{figure} + + +\end{document} diff --git a/macros/latex/contrib/fitbox/sample.pdf b/macros/latex/contrib/fitbox/sample.pdf Binary files differnew file mode 100644 index 0000000000..f1e26175b5 --- /dev/null +++ b/macros/latex/contrib/fitbox/sample.pdf diff --git a/macros/latex/contrib/fitbox/sample.tex b/macros/latex/contrib/fitbox/sample.tex new file mode 100644 index 0000000000..ea8c2b60ad --- /dev/null +++ b/macros/latex/contrib/fitbox/sample.tex @@ -0,0 +1,40 @@ +\documentclass{article} +\usepackage{graphicx} +\usepackage{fitbox} +\begin{document} + +We start from an image at maximal size: + +{\centering\fitbox{\includegraphics{vitruvian}}\par} + +Now it is resized. Here we allow down to 50\% of scale: + +{\centering\fitbox[minheight=0.5\fitboxnatheight, + minwidth=0.5\fitboxnatwidth]{\includegraphics{vitruvian}}\par} + + + + +Now we make the figure smaller: + +{\centering\fitbox[maxwidth=\fitboxnatwidth, + maxheight=\fitboxnatwidth]{\includegraphics{vitruvian}}\par} + +{\centering\fitbox[maxwidth=\fitboxnatwidth, + maxheight=\fitboxnatwidth]{\includegraphics{vitruvian}}\par} + + + +We leave some space, so the full size figure would not fit anymore: + +{\centering\fitbox{\includegraphics{vitruvian}}\par} + +The figure is now on the next page. Let us leave some space under the +next figure: + +{\centering\fitbox[minheight=0.5\fitboxnatheight, + minwidth=0.5\fitboxnatwidth, + belowboxspace=\baselineskip]{\includegraphics{vitruvian}}\par} +We left some space for a caption. + +\end{document} diff --git a/macros/latex/contrib/fitbox/vitruvian.jpg b/macros/latex/contrib/fitbox/vitruvian.jpg Binary files differnew file mode 100644 index 0000000000..406573b7d0 --- /dev/null +++ b/macros/latex/contrib/fitbox/vitruvian.jpg |