%\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