diff options
Diffstat (limited to 'macros/latex/contrib/bosisio/graphfig.dtx')
-rw-r--r-- | macros/latex/contrib/bosisio/graphfig.dtx | 485 |
1 files changed, 485 insertions, 0 deletions
diff --git a/macros/latex/contrib/bosisio/graphfig.dtx b/macros/latex/contrib/bosisio/graphfig.dtx new file mode 100644 index 0000000000..b9d7334cf0 --- /dev/null +++ b/macros/latex/contrib/bosisio/graphfig.dtx @@ -0,0 +1,485 @@ +%\iffalse % MetaComment +%% +%% + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +%% | Copyright(C) 1997-2010 by F. Bosisio | +%% | | +%% | This program can be redistributed and/or modified under | +%% | the terms 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 LaTeX distributions | +%% | version 2005/12/01 or later. | +%% | | +%% | This work has the LPPL maintenance status `maintained'. | +%% | The Current Maintainer of this work is F. Bosisio. | +%% | | +%% | This work consists of files graphfig.dtx and graphfig.html | +%% | and of the derived files graphfig.sty and graphfig.pdf. | +%% | | +%% | E-mail: fbosisio@bigfoot.com | +%% | CTAN location: macros/latex/contrib/bosisio/ | +%% + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +%% +%% If you make any improvment, find any bug or have +%% any suggestion, please let me know about it. +%% +%<*package,driver> +%\fi +% +\def\FileName{graphfig} +%\iffalse % MetaComment +%</package,driver> +%<*package> +%\fi +\def\fileversion{2.2} +\def\filedate{1997/12/15} +\def\docdate{2005/04/09} +\def\filedescr{Commands to include graphics files (FB)} +% +%\iffalse % MetaComment +%</package> +%<*dtx> +%- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% This section is the installation driver +% +\def\batchfile{\FileName.dtx} +% +\input docstrip +% +\keepsilent +% \askforoverwritefalse +% +\generateFile{\FileName.sty}{f}{\from{\FileName.dtx}{package}} +% +\generateFile{\FileName.drv}{f}{\from{\FileName.dtx}{driver}} +% +\Msg{******************************************************} +\Msg{*} +\Msg{* To produce the documentation run the} +\Msg{* file `\FileName.drv' through LaTeX.} +\Msg{*} +\Msg{******************************************************} +% +\endbatchfile +% +% End of the installation driver +%- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +%</dtx> +% +% This section is the documentation driver +% +%<+driver>\documentclass[12pt,a4paper]{article} +%<+driver>\usepackage{doc} +%<+driver> \EnableCrossrefs +%<+driver> \CodelineIndex +%<+driver> \RecordChanges +%<+driver> %\OnlyDescription % Uncomment not to see the implementation +%<+driver>\begin{document} +%<+driver> \DocInput{\FileName.dtx} +%<+driver> \PrintIndex +%<+driver> \PrintChanges +%<+driver>\end{document} +% +% End of the documentation driver +%- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +%<*package> +%\fi +% +% \changes{v0.1}{21 April 1997}{First release} +% \changes{v0.2}{5 July 1997}{Added the ``\texttt{clip}'' option to ``\texttt{psfig}''} +% \changes{v0.3}{29 August 1997}{Modified the ``\texttt{@PS@Figure}'' command} +% \changes{v1.0}{8 September 1997}{Documentation added} +% \changes{v1.1}{19 November 1997}{Improved the ``SubFigure'' command} +% \changes{v1.2}{11 December 1997}{Fixed a bug in ``SubFigure'' references} +% \changes{v1.3}{12 December 1997}{Standard ``graphics'' package instead of ``psfig''} +%\iffalse % MetaComment +% The previous change has been suggested by Sebastian Rahtz (spqr@ftp.tex.ac.uk) +%\fi +% \changes{v2.0}{15 December 1997}{``graphfile'' instead of ``PSFigure/SubFigure''} +% \changes{v2.1}{5 March 1999}{Added copyright notice and changed addresses} +% \changes{v2.2}{9 April 2005}{Usage of the double-quote character (") avoided} +% +% \MakeShortVerb{\|} +% +% \title{Package \texttt{\FileName}\thanks{This is version \fileversion, +% last revised \filedate; documentation date \docdate}} +% \author{F. Bosisio\\\normalsize E-mail: \texttt{fbosisio@bigfoot.com}} +% \date{\filedate} +% \maketitle +% +% \begin{abstract} +% Documentation for the package \texttt{\FileName}. +% \end{abstract} +% +% \section{Introduction} +% This package provides some commands to make the use of graphic +% files in \LaTeX{} simpler. +% +% \noindent +% It declares the ``|Figure|'' environment (capitalized!) and +% the two commands ``|\graphfile|'' and ``|\graphfile*|''. +% Combining this commands, it it possible to include graphic +% files in a \LaTeX{} document very simply. +% +% \section{Required packages} +% This package uses the ``|\includegraphics*|'' command defined in the +% standard |graphics| package. +% Moreover, it uses the package |subfigure| when the |subfigure| +% option is specified, and the |float| package if the |AllowH| +% option is used. +% +% \section{The options} +% At now, two options are available: ``|subfigure|'' and ``|AllowH|''. +% +% \noindent +% The ``|subfigure|'' option allow the use of sub-figures +% inside a |Figure| environment, in order to place multiple +% pictures in a single \LaTeX{} figure (cfr. the |subfigure| +% standard package). +% +% \noindent +% The ``|AllowH|'' option allow the use of the ``|H|'' float specifier +% for the |Figure| environment, in order to place the figure exaclty +% where the command is placed (cfr. the |float| standard package). +% +% \section{The \texttt{Figure} environment and its relatives} +% The ``|Figure|'' environment (capitalized!) is somewhat different +% from the standard \LaTeX{} ``|figure|'' environment: besides an +% optional argument used to specify the placement parameters (which +% now defaults to ``|[htbp]|''), it has a mandatory argument specifying +% the ``caption'' and another optional argument, used as a ``label'' for +% cross-referencies: +% +% \begin{verbatim} +% \begin{Figure}[<htbpH>]{<caption>}[<label>] +% ... +% \end{Figure} +% \end{verbatim} +% +% \noindent +% The use of the ``|H|'' specifier (i.e. ``I want my float here!'') is +% possible only if the ``|AllowH|'' option has been specified. +% +% \subsection{The \texttt{graphfile} command} +% Inside the ``|Figure|'' environment, are available the commands: +% +% \begin{verbatim} +% \graphfile[<width>]{<file>}[<sub-caption>] +% \graphfile*[<heigth>]{<file>}[<sub-caption>] +% \end{verbatim} +% +% \noindent +% which are a simplified version of the ``|\includegraphics*|'' +% command (which is automatically included by this package; see the +% |graphics| package for reference), since you don't have to worry +% about scaling: the mandatory argument is the name of the graphic file to +% include, whereas the first optional argument specifies the desired +% width (in the non *-form) or heigth (in the *-form) of the figure as +% a fraction of ``|\linewidth|'' (e.g. ``|50|'' means ``|.50\linewidth|'', +% i.e. half a line! ), so no unit of measure (as ``|cm|'' or ``|pt|'') +% is required. +% Moreover, since the ``*-form'' of ``|\includegraphics|'' is used, the +% regions outside the bounding-box are not drawn. +% Another advantage of the combined use of the ``|Figure|'' environment +% and the ``|\graphfile|'' commands is that the picture is automatically +% centered horizontally, so no ``|\centering|'' or similar declartion +% is required. +% +% \begin{verbatim} +% \begin{Figure}[<htbpH>]{<caption>}[<label>] +% \graphfile[<width>]{<file>} +% \end{Figure} +% \end{verbatim} +% +% \subsection{Sub-figures} +% +% If you want to include more than one file in a single figure, +% you need to specify the ``|subfigure|'' option, which includes the +% |subfigure| package and provides the authomatic placement of a +% sub-caption below each picture. +% +% \begin{verbatim} +% \graphfile[<width_1>]{<file_1>}[<sub-caption_1>] +% ... +% \graphfile[<width_N>]{<file_N>}[<sub-caption_N>] +% \end{verbatim} +% +% \noindent +% which is a combined version of ``|\subfigure|'' and ``|\includegraphics*|'' +% (see the |subfigure| and |graphics| packages for reference): +% the last optional argument specify a ``caption'' for the sub-figure under +% consideration, while the first two arguments work exactly like as +% described above in the case of one only picture (indeed, you can +% use the last optional argument even if the |subfigure| option was +% not specified, in which case it is simply ignored). +% Each individual caption is printed preceded by a bracketed letter, +% which is the sub-figure counter and is printed even if no caption is +% specified. +% Using only a series of ``|\graphfile[|$\dots$|]{|$\dots$|}[|$\dots$|]|'' +% commands inside a ``|Figure|'' environment provides an equal spacing +% beetween the pictures and around them, without the need for any +% extra command. +% Finally, if a ``|<label>|'' was specified as the last optional argument +% to the ``|Figure|'' environment, you can reference to each individual +% sub-figure by the labels ``|<label>:a|'', ``|<label>:b|'', and so on, +% without the need for declaring them. +% +% \begin{verbatim} +% \begin{Figure}[<htbpH>]{<caption>}[<label>] +% \graphfile[<width_1>]{<file_1>}[<sub-caption_1>] +% \graphfile[<width_2>]{<file_2>}[<sub-caption_2>] +% : +% : +% \end{Figure} +% \end{verbatim} +% +% \subsection{The \texttt{FigureDefaultPlacement} command} +% +% The command ``|FigureDefaultPlacement{|$\dots$|}|'' can be used to +% specify the default value for the placement argument of the ``|Figure|'' +% environment. +% This is useful to change the default placement from the standard +% value ``htbp''. +% +% \StopEventually{} +% \newpage +% \section{Implementation} +% We start defining the options and including the required packages. +% \begin{macrocode} +%% +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesPackage{\FileName}[\filedate\space v\fileversion\space\filedescr] +\RequirePackage{graphics} +%% +\newif\if@AllowSubFigure\@AllowSubFigurefalse +\newif\if@AllowHfloat\@AllowHfloatfalse +%% +\DeclareOption{subfigure}{\@AllowSubFiguretrue} +\DeclareOption{AllowH}{\@AllowHfloattrue} +%% +\ProcessOptions +%% +\if@AllowSubFigure + \RequirePackage{subfigure}[1995/03/06 v2.0] +% \end{macrocode} +% +% These redefinitions are needed in order to obtain the right form +% of the references (i.e. like ``Fig. 1a'' and not ``Fig. 1(a)'') +% \begin{macrocode} + \def\thesubfigure{\alph{subfigure}} +% \end{macrocode} +% +% We use ``|\renewcommand|'' instead of ``|\def|'' in order to realize +% possible changes in the |subfigure| package which may eliminate the +% inner command ``|\@thesubfigure|''. +% \begin{macrocode} + \renewcommand*\@thesubfigure{{\subcaplabelfont(\thesubfigure)}\space} + \let\SubGR@PH=\subfigure +\else +% \end{macrocode} +% +% If the ``subfigure'' option is not present, we let the internal +% command ``|\SubGR@PH|'' to simply execute its mandatory argument +% \begin{macrocode} + \newcommand*\SubGR@PH[2][]{#2} +\fi +\if@AllowHfloat + \RequirePackage{float}[1995/03/29 v1.2c] + \restylefloat{figure} +\fi +%% +\newif\if@FirstPicture\@FirstPicturetrue +\let\SubFig@Label=\relax +% \end{macrocode} +% +% \begin{macro}{\@Graph@Figure} +% This is the core command which includes and scales the graphic file +% using the commands provided by the |graphic| package. +% \begin{macrocode} +%% +\newcommand*\@Graph@Figure[3]{\resizebox{#1}{#2}{\includegraphics*{#3}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\graphfile} +% The command ``|\graphfile''| and its *-version simply calls one +% of the forthcoming commands. +% \begin{macrocode} +\newcommand*\graphfile{\@ifnextchar*{\graphfile@star}{% +\@ifnextchar[{\GraphFile@width}{\GraphFile@noSize}}% +} +\def\graphfile@star*{\@ifnextchar[{\GraphFile@heigth}{\GraphFile@noSize}} +% \end{macrocode} +% These commands, in turns, calls ``|\@GraphFile@Draw|'' with suitable +% arguments (i.e. the lengths are turned into fractions of ``|\linewidth|'' +% and an exclamation mark ``|!|'' is used where the scaling factor has +% to be the same as the other direction; furthermore the actual size +% of the graphic image is used [throught the ``|\width|'' command] if +% no scaling parameter is given). +% \begin{macrocode} +%% +\def\GraphFile@width[#1]{% +\@ifnextchar[{\@GraphFile@width@heigth{#1}}{\@GraphFile@widthNOheigth{#1}}% +} +\def\@GraphFile@width@heigth#1[#2]#3{% +\@ifnextchar[{\@GraphFile@Draw{.#1\linewidth}{.#2\linewidth}{#3}}{% +\@GraphFile@Draw{.#1\linewidth}{.#2\linewidth}{#3}[]}% +} +\def\@GraphFile@widthNOheigth#1#2{% +\@ifnextchar[{\@GraphFile@Draw{.#1\linewidth}{!}{#2}}{% +\@GraphFile@Draw{.#1\linewidth}{!}{#2}[]}% +} +\def\GraphFile@heigth[#1]#2{% +\@ifnextchar[{\@GraphFile@Draw{!}{.#1\linewidth}{#2}}{% +\@GraphFile@Draw{!}{.#1\linewidth}{#2}[]}% +} +\newcommand*\GraphFile@noSize[1]{% +\@ifnextchar[{\@GraphFile@Draw{\expandafter\width}{!}{#1}}{% +\@GraphFile@Draw{\expandafter\width}{!}{#1}[]}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@GraphFile@Draw} +% This command has three mandatory arguments and an optional one, +% which represent, respectively, the width, heigth, file-name and +% sub-caption of the current picture. +% \begin{macrocode} +%% +\def\@GraphFile@Draw#1#2#3[#4]{% +\if@FirstPicture% +% \end{macrocode} +% If it is the first call to this command in the current |Figure| +% environment, we simply store it in ``|\TMP@Graph|''. +% We also set ``|@FirstPicture|'' to false for the next call. +% \begin{macrocode} + \@FirstPicturefalse% + \def\TMP@Graph{\SubGR@PH[#4\SubFig@Label]{\@Graph@Figure{#1}{#2}{#3}}}% +\else% + \ifx\TMP@Graph\undefined% +% \end{macrocode} +% If ``|\TMP@Graph|'' is not defined, this is the third call (or more). +% So we invoke the ``|\SubGR@PH|'' command (which may be ``|\subfigure|'' +% or simply its second argument depending on the options) with a +% ``|\@Graph@Figure|'' command inside and followed by an ``|\hfill|'' +% command for centering purposes. +% \begin{macrocode} + \SubGR@PH[#4\SubFig@Label]{\@Graph@Figure{#1}{#2}{#3}}\hspace*{\fill}% + \else% +% \end{macrocode} +% If we arrive at this point it is the second call to ``|\graphfile|'' +% inside the current |Figure| environment: before plotting the +% current figure (as above) we must call ``|\TMP@Graph|'' to plot +% the first one (which was only saved). +% We also undefine ``|\TMP@Graph|'' for the next time. +% \begin{macrocode} + \hspace*{-4pt}\TMP@Graph\hspace*{\fill}% + \let\TMP@Graph\undefined% + \SubGR@PH[#4\SubFig@Label]{\@Graph@Figure{#1}{#2}{#3}}\hspace*{\fill}% + \fi% +\fi% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\FigureDefaultPlacement} +% The ``|\FigureDefaultPlacement|'' macro is defined to set the value of +% the ``|\Default@FigurePlacement|'' to its argument. +% Also ``|\Default@FigurePlacement|'' is initialized to ``|htbp|''. +% \begin{macrocode} +%% +\newcommand*\FigureDefaultPlacement[1]{\def\Default@FigurePlacement{#1}} +\def\Default@FigurePlacement{htbp} +% \end{macrocode} +% \end{macro} +% +% \begin{environment}{Figure} +% \begin{macrocode} +%% +\newenvironment{Figure}[2][\Default@FigurePlacement]{% +% \end{macrocode} +% The code for ``|\begin{Figure}|'' starts by setting ``|@FirstPicture|'' +% to true. +% \begin{macrocode} +\@FirstPicturetrue% +% \end{macrocode} +% Then we start a standard ``|figure|'' environment followed by an +% ``|\hfill|'' command (for centering purposes). +% \begin{macrocode} +\figure[#1]% +\hspace*{\fill}% +% \end{macrocode} +% We change the definition of ``|\\|'' so that an ``|\hfill|'' command +% is added at the beginning of next line. +% \begin{macrocode} +\let\@Figure@CR=\\% +\def\\{\par\hspace*{\fill}}% +% \end{macrocode} +% If there is the last optional argument, ``|\@Figure@quadra|'' is +% invoked, otherwise ``|\MK@Figure@Caption|'' is directly defined +% to print the specified caption. +% \begin{macrocode} +\@ifnextchar[{\@Figure@quadra{#2}}{\def\MK@Figure@Caption{\caption{#2}}}% +}{% +% \end{macrocode} +% The code for ``|\end{Figure}|'' starts by checking that ``|\TMP@Graph|'' +% is undefined, otherwise this means that there was one only picture: +% in such a case we have to print it out before continuing. +% \begin{macrocode} +\ifx\TMP@Graph\undefined\else% + \if@AllowSubFigure% + \renewcommand*\SubGR@PH[2][]{##2}% + \TMP@Graph\hspace*{\fill}% + \let\SubGR@PH=\subfigure% + \else% + \TMP@Graph\hspace*{\fill}% + \fi% + \global\let\TMP@Graph\undefined% +\fi% +% \end{macrocode} +% The ``|\MK@Figure@Caption|'' prints the previously saved caption. +% \begin{macrocode} +\MK@Figure@Caption% +% \end{macrocode} +% All local commands are undefined in order to save \TeX{} memory. +% \begin{macrocode} +\let\Mk@Figure@Caption\undefined% +\let\SubFig@Label=\relax% +\let\\=\@Figure@CR% +\let\@Figure@CR\undefined% +% \end{macrocode} +% The standard ``|figure|'' environment is closed. +% \begin{macrocode} +\endfigure% +% \end{macrocode} +% The command ``|\thesubfigure|'' is redefined so that it correctly +% prints the figure number, too. +% \begin{macrocode} +\def\thesubfigure{\thefigure\alph{subfigure}}% +} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\@Figure@quadra} +% The ``|\MK@Figure@Caption|'' is defined to print the specified +% caption with an added label. +% Also ``|\SubFig@Label|'' generates a label in the form ``|<label>:a|''. +% \begin{macrocode} +%% +\def\@Figure@quadra#1[#2]{% +\def\MK@Figure@Caption{\caption{#1}\label{#2}}% +\def\SubFig@Label{\expandafter\label{#2:\expandafter\alph{subfigure}}}% +} +% \end{macrocode} +% \end{macro} +% +%\iffalse % MetaComment +%<*package> +%\fi +% +% \CheckSum{214} +% \Finale +% +\endinput + |