% \iffalse
%%
%% File: nccpic.dtx Copyright (C) 2002--2005 by Alexander I. Rozhenko
%%
%<package>\NeedsTeXFormat{LaTeX2e}[1995/12/01]
%<package>\ProvidesPackage{nccpic}
%<package>         [2005/03/06 v1.2 NCC Extention of Graphicx (NCC)]
%
% \changes{v1.01}{2002/01/23}{This version is uploaded to CTAN}
% \changes{v1.02}{2002/02/17}{All options are passed to graphicx}
% \changes{v1.03}{2002/03/20}{|\draftgraphics| and |\finalgraphics| introduced}
% \changes{v1.04}{2004/09/04}{Patch for bounding box calculation}
% \changes{v1.1}{2004/12/09}{Documentation was prepared}
% \changes{v1.2}{2005/03/06}{Correct extension lists}
%
%<*driver>
\documentclass{ltxdoc}
\usepackage{nccpic,desclist}
\GetFileInfo{nccpic.sty}
\begin{document}
\title{The \textsf{nccpic} package\thanks{This file
        has version number \fileversion, last
        revised \filedate.}}
\author{Alexander I. Rozhenko\\rozhenko@oapmg.sscc.ru}
\date{\filedate}
\maketitle
\DocInput{nccpic.dtx}
\end{document}
%</driver>
% \fi
%
% \section{User Interface}
%
% The package is considered as an extension of the |graphicx| package.
% It passes all options to the |graphicx| and customizes graphics
% extensions list for most popular drivers, namely |dvips| and |dvidpf|.
%
% This allows us omit an extension of a graphics file in the
% |\includegraphics| command. When a file without extension is searched,
% this command sequentially tries extensions from the list of extensions
% until an appropriate file will be found.
%
% Using this feature, you can support multiple output from a \LaTeX\
% document with minimum changes in |.tex| sources. The only required
% thing is to prepare a number of versions for all graphics files
% used in the document. For example, the |dvips| program and YAP previewer
% like |.eps| and |.bmp| files, and the |pdftex| likes |.png| files. To
% satisfy their needs, you can prepare the |.eps| or |.bmp| version
% of all pictures for use with dvips and the |.png| version for use with
% |pdftex|. Then, when you translate your source file with the |latex|
% command, the |.eps| or |.bmp| versions of graphics files are used.
% But when you translate your source file with the |pdflatex| command,
% the |.png| versions of graphics files are used.
%
% The next aim of this package is the regulation of
% placement of graphics files in the file system. It is the bad idea
% to place graphics together with \LaTeX\ sources, especially when
% your prepare a book containing many pictures. It will be much better
% if graphics will be stored in a subdirectory relative to the
% base directory of your \LaTeX\ sources.
% We propose to store graphics files in the
% |graphics| subdirectory of the source directory. To support
% the search in this storage, the graphics path is customized in
% this package.
%
% \DescribeMacro\ipic
% The graphics in \LaTeX\ can be prepared at least in two ways:
% as an external graphics file included with the |\includegraphics|
% command or its analogue; as a \LaTeX\ |picture| environment
% or its analogues provided with special graphics packages.
% In the last case, the placing a picture inside a \LaTeX\ source
% file is inconvenient. It will be better to put a \LaTeX\ picture
% in a separate file and include it using the |\input| command.
% The next step is to place such pictures together with other
% graphics material into the |graphics| subdirectory and load them using
% the |\ipic|\marg{filename} command. This command appends
% the \meta{filename} with the |.pic| extension and tries to load
% the `\meta{filename}|.pic|' file at first from the base directory
% of your document and then from the |graphics| subdirectory.
%
% \DescribeMacro\draftgraphics
% \DescribeMacro\finalgraphics
% The |\draftgraphics| and |\finalgraphics| commands respectively
% set the draft and final modes for graphics inclusion with the
% |\includegraphics| command. They are analogues for the |draft|
% and |final| options of the |graphics| package. But the commands
% allow more flexible control of graphics mode especially for
% document classes including this package by default (the |ncc|
% class from NCC-\LaTeX\ does this).
% A graphics file included in the draft
% mode is shown as a rectangle containing the name of graphics file.
% This is quite useful on the stage of editing a document.
%
% \DescribeMacro\putimage
% The following command includes a graphics file using the
% |\includegraphics| command. It is provided for compatibility with
% old NCC-\LaTeX:
% \begin{quote}
% |\putimage(|$x$|,|$y$|)[|$x_{\rm real}$|,|$y_{\rm real}$|](|$x_{\rm shift}$|,|$y_{\rm shift}$|)|\marg{filename}
% \end{quote}
% Here:
% \begin{desclist}{}{\hfill}[\tt($x_{\rm shift}$,$y_{\rm shift}$)]
%  \item[\meta{filename}] is a name of graphics file;
%
% \item[\tt($x$,$y$)] are dimensions (in |\unitlength|) of the prepared image box;
%
% \item[\tt{[$x_{\rm real}$,$y_{\rm real}$]}] are dimensions (in |\unitlength|)
%       of graphics file that are passed to the |\includegraphics| command;
%
% \item[\tt($x_{\rm shift}$,$y_{\rm shift}$)] are shifts (in |\unitlength|)
%       of the graphics image with respect to the image box.
% \end{desclist}
% The |(|$x$|,|$y$|)| and \meta{filename} parameters are required. Others
% are optional. If the |[|$x_{\rm real}$|,|$y_{\rm real}$|]| parameter is
% omitted, $x_{\rm real}:=x$ and $y_{\rm real}:=y$. If the
% |(|$x_{\rm shift}$|,|$y_{\rm shift}$|)| parameter is omitted, the shift values
% are set to zero.
%
% The |\putimage| command vertically aligns the image box in the different
% way than the |\includegraphics|. The first one lowers the box in such a way
% to align its top edge with the top edge of letter `A' of the current font.
% But the last one aligns the bottom edge of graphics on the baseline.
%
% Other distinction between these commands consists in their work in the
% draft mode. The |\putimage| command does not test a required graphics
% file on existence and puts the filename at the center of bounding
% rectangle. But the |\includegraphics| searches the graphics file
% and puts the filename at the left top corner of bounding rectangle.
%
% In version 1.04 of this package, we add a patch to the |graphics| package.
% The reason of this patch is the following.
% In latest versions of the MiKTeX, graphics rules
% are specified for many graphics formats. As a result, if a bounding
% box is not specified in parameters of the |\includegraphics| command,
% a file with |.bb| extension is tested on the ps-like bounding box
% specification. If such file does not exist, the |\includegraphics| command
% fails even if its parameters exactly specify the graphics width and height.
% We have changed the unconditional testing of the bounding box
% to the conditional one: testing is applied if the required file exists,
% otherwise, this operation is ignored.
% \StopEventually{}
%
% \section{The Implementation}
%
% Load required packages. We use some features of the |nccboxes| package
% in the |\putimage| command: the |\Strut| and |\jvbox| commands.
%    \begin{macrocode}
%<*package>
\RequirePackageWithOptions{graphicx}[1999/02/16]
\RequirePackage{nccboxes}[2002/01/09]
%    \end{macrocode}
%
% Customize extension lists for |dvips| and |dvipdf|% drivers. 
%    \begin{macrocode}
\def\@tempa{dvips.def}
\ifx\Gin@driver\@tempa
  \DeclareGraphicsExtensions{.eps,.ps,.eps.gz,.ps.gz,.eps.Z,%
                             .bmp,.msp,.pcx,.pict,.pntg}
\else
  \def\@tempa{dvipdf.def}
  \ifx\Gin@driver\@tempa
    \DeclareGraphicsExtensions{.eps,.ps,.eps.gz,.ps.gz,.eps.Z,%
                               .bmp,.msp,.jpg}
  \fi
\fi
%    \end{macrocode}
%
% Set the path list for search graphics files. It is not necessary to
% set the base directory in the list, because it is always searched
% first and the search in the graphics path list is applied only if
% the search in the base directory fails.
%    \begin{macrocode}
\graphicspath{{graphics/}}
%    \end{macrocode}
%
% \begin{macro}{\draftgraphics}
% \begin{macro}{\finalgraphics}
% Specify graphics mode control commands:
%    \begin{macrocode}
\newcommand\draftgraphics{\Gin@drafttrue}
\newcommand\finalgraphics{\Gin@draftfalse}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\ipic}
% The |\ipic|\marg{filename} command is equivalent to
% |\input{|\meta{filename}|.pic}| command with search in
% the directory list specified by the |\graphicspath|.
% The file is opened within a group and the beginning and
% final spaces are removed in it.
%    \begin{macrocode}
\newcommand*{\ipic}[1]{%
  \begingroup \let\input@path\Ginput@path
    \ignorespaces\input{#1.pic}\unskip
  \endgroup
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\putimage}
% Introduce the |\putimage| command. Using the empty definition
% we ensure the command was undefined before.
%    \begin{macrocode}
\newcommand{\putimage}{}
\def\putimage(#1,#2){%
  \@ifnextchar[{\NCC@Gim(#1,#2)}{\NCC@Gim(#1,#2)[#1,#2]}%
}
\def\NCC@Gim(#1,#2)[#3,#4]{%
  \ifGin@draft
    \def\NCC@temp(##1,##2)##3{%
      \edef\@tempa{##3}%
      \put(0,0){%
        \framebox(#1,#2){\ttfamily\expandafter\strip@prefix\meaning\@tempa}%
      }%
    }%
  \else
    \def\NCC@temp(##1,##2)##3{%
      \put(##1,##2){%
        \includegraphics[width=#3\unitlength,height=#4\unitlength]{##3}%
      }%
    }%
  \fi
  \@ifnextchar({\NCC@Gim@(#1,#2)}{\NCC@Gim@(#1,#2)(0,0)}%
}
\def\NCC@Gim@(#1,#2)(#3,#4)#5{%
  \jvbox{\Strut}[t]{%
    \begin{picture}(#1,#2)\NCC@temp(#3,#4){#5}\end{picture}%
  }%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\Gin@setfile}
% The patch to the |\Gin@setfile| command slightly
% changes its behaviour: if bounding box calculations are
% required and the corresponding graphics rule contains an extension
% of file for reading the bounding box info, we skip the reading
% of given file if it does not exist.
%    \begin{macrocode}
\let\NCC@Ginsetfile\Gin@setfile
\def\Gin@setfile#1#2{%
  \ifGin@bbox\else
    \ifx\\#2\\\else
      \IfFileExists{\Gin@base#2}{}{\Gread@false}%
    \fi
  \fi
  \NCC@Ginsetfile{#1}{#2}%
}
%</package>
%    \end{macrocode}
% \end{macro}
\endinput
