%\iffalse
%<*copyright>
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% tile-graphic.sty package,                             %%
%% Copyright (C) 2020                                    %%
%%   dpstory@uakron.edu                                  %%
%%   dpstory@acrotex.net                                 %%
%%                                                       %%
%% This program can redistributed and/or modified under  %%
%% the terms of the LaTeX Project Public License         %%
%% Distributed from CTAN archives in directory           %%
%% macros/latex/base/lppl.txt; either version 1.2 of the %%
%% License, or (at your option) any later version.       %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%</copyright>
%<package>\NeedsTeXFormat{LaTeX2e}[1997/12/01]
%<package>\ProvidesPackage{tile-graphic}
%<package> [2020/05/27 v1.0.1 Tile a graphic (dps)]
%<*driver>
\documentclass{ltxdoc}
\usepackage[colorlinks,hyperindex=false]{hyperref}
\usepackage{array,calc}
\usepackage{fancyvrb}
\usepackage{graphicx}
%\def\texorpdfstring#1#2{#1}
%\pdfstringdefDisableCommands{\let\\\textbackslash}
\EnableCrossrefs
\CodelineIndex
\RecordChanges
\InputIfFileExists{aebdocfmt.def}{\PackageInfo{tile-graphic}{Inputting aebdocfmt.def}}
    {\def\IndexOpt{\DescribeMacro}\def\IndexKey{\DescribeMacro}\let\setupFullwidth\relax
     \PackageInfo{tile-graphic}{aebdocfmt.def cannot be found}}
%\pdfstringdefDisableCommands{\let\\\textbackslash}
%\EnableCrossrefs \CodelineIndex
\RecordChanges
\let\pkg\textsf
\let\opt\texttt
\let\key\texttt
\let\app\textsf
\bgroup\ttfamily
\gdef\brpr#1{\char123\relax#1\char125\relax}\egroup
\let\darg\brpr
\def\ameta#1{\ensuremath{\langle\textsl{\texttt{#1}}\rangle}}
\def\meta#1{\textsl{\texttt{#1}}}
\def\SUB#1{\ensuremath{{}_{\mbox{\scriptsize\ttfamily#1}}}}
\def\cs#1{\texttt{\bslash#1}}
\def\EXCL{!}
\let\tops\texorpdfstring
\DeclareRobustCommand{\tmspace}[3]{%
  \ifmmode\mskip#1#2\else\kern#1#3\fi\relax}
\renewcommand{\,}{\tmspace+\thinmuskip{.1667em}}
\let\thinspace\,
\renewcommand{\!}{\tmspace-\thinmuskip{.1667em}}
\let\negthinspace\!
\renewcommand{\:}{\tmspace+\medmuskip{.2222em}}
\let\medspace\:
\newcommand{\negmedspace}{\tmspace-\medmuskip{.2222em}}
\renewcommand{\;}{\tmspace+\thickmuskip{.2777em}}
\let\thickspace\;
\newcommand{\negthickspace}{\tmspace-\thickmuskip{.2777em}}
\makeatletter
\renewcommand{\paragraph}
    {\@startsection{paragraph}{4}{0pt}{6pt}{-3pt}
    {\normalfont\normalsize\bfseries}}
\renewcommand{\subparagraph}
    {\@startsection{subparagraph}{5}{\parindent}{6pt}{-3pt}{\bfseries}}
\renewenvironment{quote}[1][]
   {\def\@rgi{#1}\ifx\@rgi\@empty
    \let\rghtm\@empty\else\def\rghtm{\rightmargin\leftmargin}\fi
    \list{}{\rghtm} %{\rightmargin\leftmargin}%
    \item\relax}
   {\endlist}
\makeatother
\def\ctg#1{\texttt{create-tg.#1}}
\def\packagesuffix{package}
\def\V{\string|}
\def\picBox#1#2#3{{\fboxsep0pt\fbox{\parbox[t][#2]{#1}{\vfill\centering#3\vfill}}}}
\def\picBoxi#1#2#3{{\fboxrule0pt\fboxsep0pt\fbox{\parbox[t][#2]{#1}{\vfill\centering#3\vfill}}}}
\begin{document}
\def\CMD#1{\textbackslash#1}
  \GetFileInfo{tile-graphic.sty}
  \title{\textsf{tile-graphic}: Break a graphic into tiles}
  \author{D. P. Story\\
    Email: \texttt{dpstory@acrotex.net}}
  \date{processed \today}
\value{secnumdepth}=3
\value{tocdepth}=3
  \maketitle
  \tableofcontents
  \let\Email\texttt
  \DocInput{tile-graphic.dtx}
\IfFileExists{\jobname.ind}{\newpage\setupFullwidth\par\PrintIndex}{\paragraph*{Index} The index goes here.\\Execute
    \texttt{makeindex -s gind.ist -o tile-graphic.ind tile-graphic.idx} on the command line and recompile
    \texttt{tile-graphic.dtx}.}
\IfFileExists{\jobname.gls}{\PrintChanges}{\paragraph*{Change History} The list of changes goes here.\\Execute
    \texttt{makeindex -s gglo.ist -o tile-graphic.gls tile-graphic.glo} on the command line and recompile
    \texttt{tile-graphic.dtx}.}
\end{document}
%</driver>
% \fi
% \MakeShortVerb{|}
% \StopEventually{}
%
% \DoNotIndex{\def,\edef,\gdef,\xdef,\global,\long,\let}
% \DoNotIndex{\expandafter,\string,\the,\ifx,\else,\fi}
% \DoNotIndex{\csname,\endcsname,\relax,\begingroup,\endgroup}
% \DoNotIndex{\DeclareTextCommand,\DeclareTextCompositeCommand}
% \DoNotIndex{\space,\@empty,\special}
% \DoNotIndex{\x,\y,\z}
%
%    \begin{macrocode}
%<*package>
%    \end{macrocode}
%
% \section{Documentation}\label{s:docs}
%
% \def\pici{\marginpar{\raggedleft\bgroup\offinterlineskip\parindent0pt
% \vtop{%
% \picBox{20pt}{25pt}{\texttt{01}}\picBox{20pt}{25pt}{\texttt{02}}\picBox{20pt}{25pt}{\texttt{03}}\\%
% \picBox{20pt}{25pt}{\texttt{04}}\picBox{20pt}{25pt}{\texttt{05}}\picBox{20pt}{25pt}{\texttt{06}}\\%
% \picBox{20pt}{25pt}{\texttt{07}}\picBox{20pt}{25pt}{\texttt{08}}\picBox{20pt}{25pt}{\texttt{09}}\\%
% \picBox{20pt}{25pt}{\texttt{10}}\picBox{20pt}{25pt}{\texttt{11}}\picBox{20pt}{25pt}{\texttt{12}}\\[6pt]%
% {\parbox{60pt}{\small\centering Tiled graphic\\($4\times3$)}}%
% }%
% \egroup}}
% \def\picii{\marginpar{\raggedleft\bgroup\offinterlineskip\parindent0pt
% \vtop{%
% \picBox{20pt}{25pt}{\texttt{01}}\\\picBox{20pt}{25pt}{\texttt{02}}\\\picBox{20pt}{25pt}{\texttt{03}}\\%
% \picBox{20pt}{25pt}{\texttt{04}}\\\picBox{20pt}{25pt}{\texttt{05}}\\\picBox{20pt}{25pt}{\texttt{06}}\\%
% \picBoxi{20pt}{25pt}{$\vdots\,\vdots\,\vdots$}\\%
% \picBox{20pt}{25pt}{\texttt{10}}\\\picBox{20pt}{25pt}{\texttt{11}}\\\picBox{20pt}{25pt}{\texttt{12}}\\[6pt]%
% {\parbox{20pt}{\small\centering\strut\kern0pt\hbox to0pt{\hss{Pages}\hss}\\\strut\hbox to0pt{\hss($4\times3$)\hss}}}%
% }%
% \egroup}}
%
% \subsection{A brief description}  The\pici\space document author opens the \ctg{tex} file and specifies three
% arguments of the \cs{setTileParams} command: a number $n$ that corresponds to the number of rows; a number
% $m$ that represents the number of columns; and the path to a graphic. Compiling \ctg{tex}, when the option \opt{wrttofiles} is specified, results
% in the specified graphic being broken down into a series of $n\times m$ \textit{tiled} graphics. The order of the creation
% of the tiles is top to bottom, left to right: The first row is the top most row, and the graphic is tiled across
% the row, from left to right, the next row, is the one just below the top row, and the graphic is tiled across that
% row, from left to right, and so on. Refer to the crude diagram to the left.\medskip
%
%\begin{center}
%\fbox{\begin{minipage}{.67\linewidth}
%\textbf{\textcolor{red}{Warning:}} This package uses the \pkg{shellesc} package, which requires
%the \texttt{--shell-escape} switch. Use this package only if you trust the author of this package.
%\end{minipage}}
%\end{center}
% \subsection{Applications}
%   The \pkg{tile-graphic} package can be used to produce tiled graphics, which can be
%   consumed by the \pkg{dps} and \pkg{acrosort} packages.
%
% \subsection{The \texttt{create-tg.tex} file}
% Because of the extensive use of \cs{ShellEscape}, \ctg{tex} is similar to a
% BAT (batch) file. When you compile \ctg{tex}, one result is \ctg{pdf}; \ctg{pdf} is
% a one page summary titled \textbf{Tile Graphic Report}. In addition to producing a report,
% there is the actual result the report refers to: the production of tiled graphic files (PDFs).
%
% Tiled graphics are obtained by compiling \ctg{tex},
% after setting three parameters; using this package, therefore, is very simple.
% Below is the verbatim listing of the \ctg{tex}, found in the \texttt{examples} folder.
%\begin{Verbatim}[xleftmargin=\leftmargini,codes={\catcode`\%=9},commandchars={!@^}]
% \documentclass{article}
% !makebox[0pt][r]@!rmfamily(1)!enspace^\usepackage[!ameta@options^]{tile-graphic}
% !makebox[0pt][r]@!rmfamily(2)!enspace^\setTileParams[!ameta@ig-opts^]{!ameta@nRows^}{!ameta@nCols^}{!ameta@path^}
% \begin{document}
% !makebox[0pt][r]@!rmfamily(3)!enspace^\tileTheGraphic
% \end\darg{document}
%\end{Verbatim}
% When \texttt{create-tg.tex} is compiled, the DVI (in the case of \LaTeX) or the PDF (in all other cases) produces
% a single page document the title of which is ``\textbf{Tile Graphic Report}.'' The file also produces, depending
% on the options used, various \emph{separate} PDFs consisting of tiled graphics.
%
% \paragraph*{Discussion.} We discuss each of the numbered lines slightly out of order.
%\begin{enumerate}
% \item[(2)] \cs{setTileParams[\ameta{ig-opts}]\darg{\ameta{nRows}}\darg{\ameta{nCols}}\darg{\ameta{path}}}\DescribeMacro\setTileParams\\
% The command and its arguments are placed in the preamble.
% \begin{description}
%   \item[\normalfont\ameta{ig-opts}] This optional argument is passed to the underlying optional argument of the \cs{includegraphics} command.
%     Normally, there is no optional options passed.
%
%   \item[\normalfont\ameta{nRows}] This argument declares the number of rows you want to break the graphic into.
%
%   \item[\normalfont\ameta{nCols}] This argument declares the number of columns you want to break the graphic into.
%
%   \item[\normalfont\ameta{path}]  The path to the graphic. The graphic is any
%       file format supported by the PDF creator. For a
%       \texttt{latex->dvips->\ameta{\upshape ps2pdf\string|distiller}} workflow, the graphic
%       should be an EPS file; in all other workflows, the graphic can be a PDF
%       (or some other supported graphical format). For example, if the graphic
%       is in the \texttt{graphics} folder of the source file, then \ameta{path}
%       might read \texttt{graphics/mygraphic}, where \texttt{mygraphic.pdf} (for example) is
%       in the \texttt{graphics} folder.
% \end{description}
%   With no package options, compiling \ctg{tex} produces a document a single page document
%   with a message, seen in \hyperref[fig:noopts]{Figure~\ref*{fig:noopts}}.
%
%   \begin{figure}[htb]\centering
%   \includegraphics[width=.67\linewidth]{docs/graphics/noopts}
%   \caption{No options}\label{fig:noopts}
%   \end{figure}
% \item[(1)] \cs{usepackage[\ameta{options}]\darg{tile-graphic}}\picii\\
% For the package declaration, the \ameta{options} are described below.
% \begin{description}
%   \item[\opt{wrttofiles}] When \ctg{tex} is compiled with the \opt{wrttofiles} option \emph{only}
%   and with a \ameta{path} argument of \texttt{graphics/mygraphic},
%   $\ameta{nRows}\times\ameta{nCols}$ individual tile PDF files named
%   \begin{quote}
%     \texttt{mygraphic\_01.pdf}, \texttt{mygraphic\_02.pdf}, \dots
%   \end{quote} are created and placed in the \texttt{graphics} folder.
%   If no subfolder is specified, files are placed in the source file's folder. The source file that is compiled
%   (\texttt{create-tg.pdf}) contains the \textbf{Tile Graphic Report}.
%
%   \item[\opt{!wrttofiles}] (Convenience option) This option reverts to the default, no separate tile PDFs are produced.
%
%   \item[\opt{packagefiles}]
%   When this option is specified, $\ameta{nRows}\times\ameta{nCols}$ pages are  produced and ``packaged'' in a separate
%   PDF document named \texttt{\ameta{basename}\_\packagesuffix.pdf}, where \ameta{basename} is the base name of the graphic.
%   See the crude illustration to the left.
%
%   \item[\opt{!packagefiles}] (Convenience option) Reverses the \opt{packagefiles} option,
%   as a result, no package file is created.
%
%   \item[\opt{pdfcreator=\ameta{{\upshape pdflatex\string|lualatex\string|xelatex\string|ps2pdf\string|distiller}}}]\leavevmode\\
%   When the option \opt{wrttofiles} or \opt{packagefiles}
%   is specified, compiling \ctg{tex} produces one or more PDF files. These PDFs are produced
%   by \app{pdflatex}, \app{lualatex}, \app{xelatex}, \app{ps2pdf}, or \app{distiller} by executing a
%   series of \cs{ShellEscape} commands. The PDF creator
%   application used is determined by the value of the \opt{pdfcreator} key. The default is \texttt{pdflatex}.
%
%   Using the \cs{ShellEscape} command is system dependent. The \pkg{tile-graphic} package is set up for
%   the \app{Windows} OS; it uses \textsf{del}, \textsf{copy}, and \textsf{move}. Refer to
%   \hyperref[s:custcmds]{Section~\ref*{s:custcmds}} for more information for modifying these
%   system commands.
%
%   \pkg{tile-graphic} also uses \cs{ShellEscape} to compile certain dynamically created TEX files. There are hooks
%   to modify the compile commands that can be used at your discretion. Again, refer to
%   \hyperref[s:custcmds]{Section~\ref*{s:custcmds}} for more information.
% \end{description}
% \item[(3)] \cs{tileTheGraphic}\DescribeMacro\tileTheGraphic\relax\space is placed in the body of the document. It is this command that does all the work,
% based on the parameters of \cs{setTileParam}.
%\end{enumerate}
%
%\paragraph*{Required packages.} The following package are required: \pkg{shellesc}, \pkg{web},
%\pkg{graphicx}, and \pkg{multido}.
%
%\paragraph*{Try it, you'll like it.} The first thing to do, once the package is installed, is to try the
% compiling the file \ctg{tex}. There are three graphics files, one at the top level of the \texttt{examples}
% folder, one in the \texttt{choo} subfilder, and one in the \texttt{postscript} subfolder. Try both graphics (only one graphic at a time, however). Try all possible combinations
% of the basic options \opt{wrttofiles}, \opt{!wrttofiles}, \opt{packagefiles}, and \opt{!packagefiles}; you can even try
% the various values of \opt{pdfcreator}.
%
%\subsection{Description of the workflow}
% Be aware that there are two instances, or stages, of compiling:
% \begin{quote}
% \begin{enumerate}
%   \item[Stage 1.]\label{Item:one} Compiling \ctg{tex}, usually, this is initiated in some {\LaTeX} editor. At this stage,
%   you can compile with \app{latex.exe}, \app{pdflatex.exe}, \app{lualatex.exe}, or \app{xelatex.exe}.
%   When \DescribeMacro\setTileParams\cs{setTileParams} is expanded, it reads the graphic file,
%   \ameta{path}, using \cs{includegraphics} to determine its size. Therefore, the graphic must
%   be one that is supported by the pdf creator at this point. For example if the graphic is a PDF, yet
%   you use \app{latex.exe} to compile \ctg{tex}, you get an error because \app{latex.exe} does not support
%   PDF inclusion.
%   \item[Stage 2.]\label{Item:two} Compiling of one or more files to produce tiled graphics, this step is initiated
%   by the \cs{ShellEscape} command. The application used to compile at this stage is determined
%   by the \key{pdfcreator} key. When the \opt{packagefiles} option is taken, the \DescribeMacro\setTileParams
%   \cs{setTileParams} is expanded again and the graphic file, \ameta{path}, is included to determine
%   dimension of the graphic. Again, the graphic must be a format supported by the PDF creator as selected
%   by the \key{pdfcreator} key, which may be different from the compiler of the first case above.
% \end{enumerate}
% \end{quote}
% Additional thoughts on  the workflow.
% \begin{itemize}
%   \item \key{pdfcreator=\ameta{\upshape pdflatex\string|lualatex\string|xelatex}}\\[3pt]
%   This is the easiest and simplest case. Usually the PDF creators for the two stages of compiling are the same
%   (refer to Stages~\hyperref[Item:one]{1} and~\hyperref[Item:two]{2}, above). These are direct-to-PDF applications, the workflow
%   is relatively quick, smooth, and automated. All AUX files are are deleted except for the AUX files of the
%   main file \ctg{tex}.
%
%   \item \key{pdfcreator=\ameta{\upshape ps2pdf\string|distiller}}\\[3pt]
%   The graphic file format must be EPS for \hyperref[Item:two]{Stage~2}; however, if you are not
%   using \app{latex.exe} in \hyperref[Item:one]{Stage~1}, the graphic must be one that is supported
%   by the PDF creator used. Thus you may have two copies of the graphic of different formats. You're
%   not going to do that, are you? Usually the PDF creators for the two stages of compiling are the same, that way
%   you need not have two formats for the graphic.
%   \begin{itemize}
%       \item \key{pdfcreator=\ameta{\upshape ps2pdf}}\\[3pt]
%         The workflow is \texttt{latex\,->\,dvips\,->\,ps2pdf}
%       \item \key{pdfcreator=\ameta{\upshape distiller}}\\[3pt]
%           The workflow is \texttt{latex\,->\,dvips\,->\,distiller}.
%           There is a difference between using \app{distiller} and \app{ps2pdf}, in the latter case, the PS
%           file can be a relative path; in the former case, it must be a full (or absolute) path, this is a
%           slight complication. For this bad boy, we provide the \DescribeMacro\fullPathToSource
%           \cs{fullPathToSource}, refer to \hyperref[s:custcmds]{Section~\ref*{s:custcmds}} for more details.
% \end{itemize}
% \end{itemize}
% \subsection{The Configuration File}
% A configuration file, named \marginpar{\raggedleft\small\texttt{tg.cfg}}\texttt{tg.cfg},
% is input at the end of the package. You might make any customizations there, where you
% customize for the pdf creator you always use, or, if you use several, you can make
% customizations for each by using the \cs{ifcase} structure below.
%\begin{Verbatim}[xleftmargin=\leftmargini,codes={\catcode`\%=9},commandchars=!()]
%\ifcase\tg@case\relax
%  \def\tg@pdfcreator@app{pdflatex}
%  !quad!ameta(customizations-for-pdflatex)
%\or
%  \def\tg@pdfcreator@app{lualatex}
%  !quad!ameta(customizations-for-lualatex)
%\or
%  \def\tg@pdfcreator@app{xelatex}
%  !quad!ameta(customizations-for-xelatex)
%\or
%  \def\tg@pdfcreator@app{ps2pdf}
%  !quad!ameta(customizations-for-ps2pdf)
%\or
%  \def\tg@pdfcreator@app{acrodist}
%  !quad!ameta(customizations-for-acrodist)
%\fi
%\end{Verbatim}
%See the file \marginpar{\raggedleft\small\texttt{tg.cfg.txt}}\texttt{tg.cfg.txt} for this structure.
%Rename it to \texttt{tg.cfg} if found to be useful.
% $$
%     \rule[2pt]{.25\linewidth}{.4pt}\, \textbf{End of Documentation}\,\rule[2pt]{.25\linewidth}{.4pt}
% $$
%  \section{The package code}
%
%  Having finished the barest of documentation, we begin the markup of this package.
%  \changes{v1.0}{2020/05/27}{Set version number to v1.0 to publish package}
%  \subsection{Options}
%   We bring in the \pkg{xkeyval} package so we can gather our options using
%   it's commands, rather than the default \pkg{keyval} commands.

%    \begin{macrocode}
\RequirePackage{xkeyval}
%    \end{macrocode}
% \leavevmode\IndexOpt{wrttofiles}\IndexOpt[\protect\EXCL]{!wrttofiles} When \opt{wrttofiles} is specfied,
% $\ameta{nRows}\times\ameta{nCols}$ PDF files are created. When \opt{!wrttofiles} is used, these files
% just mentions are not created.
%    \begin{macrocode}
\newif\if@wrttofiles\@wrttofilesfalse
\DeclareOptionX{wrttofiles}{\@wrttofilestrue}
\DeclareOptionX{!wrttofiles}{\@wrttofilesfalse}
%    \end{macrocode}
%    \leavevmode\IndexOpt{packagefiles} When specified, a single ``package'' PDF is created containing
%    $\ameta{nRos}\times\ameta{nCols}$ pages of tiled graphics
%    Likewise, the option \IndexOpt[\protect\EXCL]{!packagefiles}\opt{!packagefiles} reverses \opt{packagefiles} to return
%    to the default state, files are not packaged.
%    \begin{macrocode}
\newif\if@packagefiles \@packagefilestrue
\DeclareOptionX{packagefiles}{\@packagefilestrue}
\DeclareOptionX{!packagefiles}{\@packagefilesfalse}
%    \end{macrocode}
% \leavevmode\IndexOpt{pdfcreator}\hskip-\marginparsep\texttt{=\ameta{{\upshape pdflatex\string|lualatex\string|xelatex\string|ps2pdf\string|distiller}}}
%    \begin{macrocode}
\define@choicekey*+{tile-graphic.sty}{pdfcreator}[\val\nr]%
  {pdflatex,lualatex,xelatex,ps2pdf,distiller}{%
  \edef\tg@case{\nr}%
  \ifcase\nr\relax
    \def\tg@pdfcreator@app{pdflatex}\or
    \def\tg@pdfcreator@app{lualatex}\or
    \def\tg@pdfcreator@app{xelatex}\or
    \def\tg@pdfcreator@app{ps2pdf}\or
    \def\tg@pdfcreator@app{acrodist}\fi
}{\PackageWarning{tile-graphics}%
  {Bad choice for pdfcreator, permissible values\MessageBreak
  are pdflatex, lualatex, xelatex, ps2pdf, and\MessageBreak
  distiller.\MessageBreak Using the default pdflatex}}
\def\tg@pdfcreator@app{pdflatex}\def\tg@case{0}
%    \end{macrocode}
%    Process the options
%    \begin{macrocode}
\ProcessOptionsX\relax
\edef\tg@restoreCats{%
  \catcode`\noexpand\"=\the\catcode`\"\relax
  \catcode`\noexpand\,=\the\catcode`\,\relax
  \catcode`\noexpand\_=\the\catcode`\_\relax
}
\@makeother\"\@makeother\,\@makeother\_
%    \end{macrocode}
% \subsection{Required Packages}
% The \pkg{web} package is use to set the page dimensions, it also brings in \pkg{hyperref}.
% We use \pkg{graphicx} package to have access to \cs{includegraphics}. The \cs{multido} package
% is used to work across the face of the graphic by row, top to bottom, to clip off little bounding boxes of the graphic.
% \pkg{shellesc} is required for the \opt{wrttofiles} option.
%    \begin{macrocode}
\RequirePackage{shellesc}
\RequirePackage{web}
\RequirePackage{graphicx}
\RequirePackage{multido}
%    \end{macrocode}
%    \subsection{Registers and other preliminaries}
%    We declare a new if, \DescribeMacro\if@wrtorpkg\cs{if@wrtorpkg}, which is true if either \cs{if@wrttofiles}
%    or \cs{if@packagefiles} is true. This is a convenience to the coding.
%    \begin{macrocode}
\newif\if@wrtorpkg \@wrtorpkgfalse
\if@wrttofiles
  \@wrtorpkgtrue
\else
  \if@packagefiles
    \@wrtorpkgtrue
  \fi
\fi
\newif\iftg@direct \tg@directtrue
\newif\iftgfolder  \tgfolderfalse
%    \end{macrocode}
%      \leavevmode\DescribeMacro\iftg@direct
%      \cs{iftg@direct} is false if \key{pdfcreator=\ameta{ps2pdf\string|distiller}}.
%    \begin{macrocode}
\ifnum\tg@case>\tw@\relax\tg@directfalse\fi
%    \end{macrocode}
%    A few comments on the \cs{ifpassthruTG} switch. This package performs some tricks.
%    Initially, \cs{ifpassthruTG} is true, and certain portions of the code are executed. When \texttt{create-tg.tex}
%    is compiled with \cs{passthruTGtrue}, it writes to the current folder the file \texttt{package-data.cut} containing the single command \cs{passthruTGfalse}.
%    During this compile, \texttt{create-tg.tex} makes a copy of itself named \texttt{\ameta{basename}\_\packagesuffix.tex}.
%    It is this tile that is compiled by \cs{ShellEscape}, and when compiled, reads \texttt{package-data.cut}, since it now exists,
%    and \cs{ifpassthruTG} is set to false, at which point a different set of code lines are executed.
%    \begin{macrocode}
\newif\ifpassthruTG \passthruTGtrue
%    \end{macrocode}
%    Some miscellaneous lengths, boxes, and utility commands.
%    \begin{macrocode}
\newdimen\tg@dima
\newdimen\tg@dimb
\newbox\tg@box
\newcount\tg@Cnt
\def\tg@rmslash#1/{\def\tgInFolder{#1}}%
\let\tgInFolder\@empty
%    \end{macrocode}
%\goodbreak
% \subsection{Some customization commands}\label{s:custcmds}
% \paragraph*{System commands.} These are \DescribeMacro\sysdel\cs{sysdel},
% \DescribeMacro\syscopy\cs{syscopy}, and \DescribeMacro\sysmove\cs{sysmove}. The
% default is to use \app{Windows} OS commands. Changes for UNIX/Linux or MacOS are easy enough
% by declaring these three commands in the preamble (or in \texttt{tg.cfg}), their arguments are the names of
% the corresponding system commands for deleting, copying, and moving files.
%    \begin{macrocode}
\def\sysdel#1{\def\tg@sysdel{#1\space}}
\sysdel{del}
\def\syscopy#1{\def\tg@syscopy{#1\space}}
\syscopy{copy}
\def\sysmove#1{\def\tg@sysmove{#1\space}}
\sysmove{move}
%    \end{macrocode}
%    \paragraph*{Changing the switches in Stage 2.} Here is a link to the \hyperref[Item:two]{Stage~2} reference.
%    There are two TEX files compiled: (1) the package file, and (2)
%    the individual tiles graphic files. We provide a hook to modify the command line
%    switches of the \texttt{pdfcreator}. \DescribeMacro\pkgappArgs\cs{pkgappArgs} is the hook
%    into the creation of the package file. Use \texttt{\#1} to represent the \texttt{pdfcreator}
%    application. For example, \verb~\pkappArgs{#1 -halt-on-error}~ produces a command line
%    of \begin{quote}\app{pdflatex -halt-on-error  --shell-escape \ameta{targeted-package-file.tex}}\end{quote}
%    For a \texttt{pdfcreator} of \app{pdflatex}.
%    The \texttt{--shell-escape} is automatically included.
%    \begin{macrocode}
\def\pkgappArgs#1{\def\pkg@ppArgs##1{#1}}
\pkgappArgs{#1}
%    \end{macrocode}
%    We also separately compile each of the separate tile graphics. \DescribeMacro\tileappArgs
%    \cs{tileappArgs} is similar to \cs{pkgappArgs}. If we declare \verb~\tileappArgs{#1 -halt-on-error}~, then the command line
%    becomes,
%    \begin{quote}\app{pdflatex -halt-on-error \ameta{targeted-tile-graphic.tex}}\end{quote}
%    Here, \texttt{--shell-escape} is not automatically included as it is not needed for this step.
%    \begin{macrocode}
\def\tileappArgs#1{\def\tile@ppArgs##1{#1}}
\tileappArgs{#1}
%    \end{macrocode}
%
%    \subparagraph*{Some unverified tricks.} What if your system does not recognize \app{pdflatex},
%    \app{lualatex}, and so on; perhaps they are know by different names. You can use these hooks
%    to fix that. For example,
%     \begin{quote}\ttfamily
%       \string\pkgappArgs\darg{\ameta{alt-pdflatex}.exe \ameta{other-switches}}
%     \end{quote}
%     Or, perhaps the path to this application is not on the system paths, hence \app{pdflatex}
%     is not recognized, in this case, try
%     \begin{quote}\ttfamily
%       \string\pkgappArgs\darg{\ameta{path-to}/\ameta{alt-pdflatex}.exe \ameta{other-switches}}
%     \end{quote}
%     that ``should'' work.\par\medskip\noindent
%    When \key{pdfcreator=\ameta{ps2pdf\string|distiller}}, we provide two hooks for this workflow:
%    \DescribeMacro\latexappArgs\cs{latexappArgs} and \DescribeMacro\dvipsappArgs\cs{dvipsappArgs}. These function
%    similar to the ones described above; for example, \verb~\dvipsappArgs{#1 -q*}~ passes the \texttt{-q*} switch
%    (quiet mode) to \app{dvips}. No separate commands for a package compile versus a tile compile, as seen above,
%    are defined, though that could change.
%    \begin{macrocode}
\def\latexappArgs#1{\def\latex@ppArgs##1{#1}}
\latexappArgs{#1}
\def\dvipsappArgs#1{\def\dvips@ppArgs##1{#1}}
\dvipsappArgs{#1}
%    \end{macrocode}
%    \leavevmode\DescribeMacro\definePath\hskip-\marginparsep\texttt{\darg{\ameta{\cs{cmd}}}\darg{\ameta{path}}}
%    A command taken from \pkg{eforms} that normalizes the argument before
%    defining \cs{cmd}.
%    \begin{macrocode}
\providecommand{\definePath}[1]{\def\ef@ctrlName{#1}%
    \hyper@normalise\ef@definePath}
\def\ef@definePath#1{\expandafter\xdef\ef@ctrlName{#1}}
%    \end{macrocode}
%    \subparagraph*{Support for \key{pdfcreator=distiller}.}\leavevmode\medskip\par\noindent
%    \leavevmode\DescribeMacro\fullPathToSource\hskip-\marginparsep\texttt{\darg{\ameta{path}}}
%    Set the full path to the source file (\texttt{create-tg.tex}). This command is only needed
%    when \opt{pdfcreator=distiller}.
%    \begin{macrocode}
\def\fullPathToSource{\definePath{\tg@fullPathToSource}}
\let\tg@fullPathToSource\@empty
%    \end{macrocode}
% \paragraph*{After creation hooks.} We provide additional hooks, the first is placed
% just after a tile file is created, and second one is placed just after the package file is created.
%
% \medskip\noindent
%\DescribeMacro\afterTileCreationHook\hskip-\marginparsep\texttt
%{\darg{\ameta{\cs{cmds}}}} The \ameta{\cs{cmds}} can be any valid {\LaTeX} commands,
%conceptually, the commands may contain \cs{ShellEscape} commands. The hook is placed
%just after a tile file is created as a PDF.\par\medskip\noindent
%\DescribeMacro\afterPkgCreationHook\hskip-\marginparsep\texttt
%{\darg{\ameta{\cs{cmds}}}} Similar to \cs{afterTileCreationHook}, but for the creation
%of the tile package.
%    \begin{macrocode}
\def\afterTileCreationHook#1{\def\@fterTileCreationHook{#1}}
\let\@fterTileCreationHook\relax
%    \end{macrocode}
%    The definition of   \cs{afterPkgCreationHook}.
%    \begin{macrocode}
\def\afterPkgCreationHook#1{\def\@fterPkgCreationHook{#1}}
\let\@fterPkgCreationHook\relax
%    \end{macrocode}
%\subparagraph*{Examples.} This example makes each \emph{tile} PDF file into a tile EPS file.
%We use the utility executable \app{pdftops}, which may be available on your {\TeX} system.
%In the preamble or above the \cs{tileTheGraphic} command, place the following commands.
%\begin{Verbatim}[xleftmargin=\parindent,codes={\catcode`\%=9},commandchars={*()}]
%\afterTileCreationHook{*%
%  \ShellEscape{pdftops -eps tile-template.pdf
%    tile-template.eps}*%
%  \ShellEscape{copy tile-template.eps \tgTileBaseIndx.eps}*%
%  \iftgfolder
%    \ShellEscape{move \tgTileBaseIndx.eps \tgInFolder}*%
%  \fi
%}
%\afterPkgCreationHook{*%
%  \typeout{!! Package creation: \tgBaseName_package.pdf !!}}
%\end{Verbatim}
%\subparagraph*{Commentary.} At insertion point of the hooks in the code stream, the
%tile file is named \texttt{tile-template}.
%The declared \cs{afterTileCreationHook} converts each tile file,
%to an EPS file of the same name. Then, it copies \texttt{tile-temp.eps} to
%\DescribeMacro\tgTileBaseIndx\cs{tgTileBaseIndx.eps}. Next, we test whether
%this file came from a subfolder (using the switch \DescribeMacro\iftgfolder
%\cs{iftgfolder}). Finally, if the file belongs in the folder, \DescribeMacro\tgInFolder\cs{tgInFolder},
%we move it there. For the \cs{afterPkgCreationHook}, we do nothing other than to write some
%text to the terminal, we use the base name of the graphic \DescribeMacro\tgBaseName
%\cs{tgBaseName}.
%\medskip\par\noindent
%    \DescribeMacro\packagesuffix\hskip-\marginparsep\texttt{\darg{\ameta{name}}}
%    The name used as suffix to the packaged tiled files. Originally, this was \texttt{packaged},
%    but I am changing it to \texttt{package}, to be in conformance with the \pkg{acrosort} package.
%    \changes{v1.0.1}{2020/05/27}{Replace suffix of packaged with just package, but control the
%    naming with \string\cs{packagesuffix}.}
%    \begin{macrocode}
\newcommand{\packagesuffix}{package}
%    \end{macrocode}
% \subsection{\tops{\protect\cs{setTileParams}}{\textbackslash{setTileParams}}: A preamble command}
% \leavevmode\DescribeMacro\setTileParams\hskip-\marginparsep
%   \texttt{[\ameta{ig-opts}]\darg{\ameta{nRows}}\darg{\ameta{nCols}}\darg{\ameta{path}}} The parameters
%   are described in Section~\ref{s:docs} (\textbf{Documentation}).
%    \begin{macrocode}
\newcommand{\setTileParams}[4][]{%
%    \end{macrocode}
%     We require the entries in \texttt{\#2} and \texttt{\#3} (\ameta{nRows} and \ameta{nCols})
%     to be nonnegative natural numbers (1, 2, 3, \dots), so we pass through a dimension register
%     and into a count register, this should make what is entered a natural number.
%     If not greater or equal to 1, we complain, and set to the number 2.
%    \begin{macrocode}
  \tg@dima #3\p@\relax
  \ifdim\tg@dima < \p@
    \PackageWarning{tile-graphic}
      {Number of columns must be positive,\MessageBreak
       setting number of columns to 2}\tg@dima\tw@\p@\fi
  \edef\nCols{\strip@pt\tg@dima}%
  \tg@Cnt\nCols\relax
  \edef\n@Cols{\the\tg@Cnt}\edef\nCols{\the\tg@Cnt}%
  \tg@dima #2\p@\relax
  \ifdim\tg@dima < \p@
    \PackageWarning{tile-graphic}
      {Number of rows must be positive,\MessageBreak
       setting number of rows to 2}\tg@dima\tw@\p@\fi
  \edef\nRows{\strip@pt\tg@dima}%
  \tg@Cnt\nRows\relax
  \edef\n@Rows{\the\tg@Cnt}\edef\nRows{\the\tg@Cnt}%
  \multiply\tg@Cnt \nCols\relax
  \edef\nFilesCreated{\the\tg@Cnt}%
  \def\pathToPic{#4}%
%    \end{macrocode}
% Parse the path to obtain the parts of the path, area, base, and extension.
%    \begin{macrocode}
  \filename@parse{#4}%
  \edef\tg@dir{\filename@area}%
  \ifx\tg@dir\@empty\tgfolderfalse\else
    \expandafter\tg@rmslash\tg@dir
    \tgfoldertrue
  \fi
  \edef\tg@base{\filename@base}%
  \edef\tgBaseName{\filename@base}%
  \edef\tg@ext{\filename@ext}%
%    \end{macrocode}
% Get graphic dimensions, dimensions needed for {\TeX} (pt) and PDF (bp)
%    \begin{macrocode}
  \setbox\tg@box\hbox{\includegraphics[draft,#1]{#4}}%
  \setlength\tg@dima{\the\wd\tg@box}%
  \tg@dima=.99626\tg@dima
  \divide\tg@dima \nCols
  \edef\bpWdtile{\strip@pt\tg@dima}%
  \setlength\tg@dima{\the\ht\tg@box}%
  \tg@dima=.99626\tg@dima
  \divide\tg@dima \nRows
  \edef\bpHttile{\strip@pt\tg@dima}%
  \setbox\tg@box\box\voidb@x
  \tg@dima=\bpHttile pt \relax
  \edef\tg@HT{\the\tg@dima}
  \tg@dima=\bpWdtile pt \relax
  \edef\tg@WD{\the\tg@dima}
%    \end{macrocode}
% Set margins and screen size using the \pkg{web} package. If \cs{ifpassthruTG} is true,
% we use reasonably size dimensions to display the \textbf{Tile Graphic Report}; otherwise,
% we use dimensions based on the size of the graphic determined by \ameta{path}.
%    \begin{macrocode}
  \ifpassthruTG
    \web@MargScrDimOpts{.25in}{.25in}{24pt}{.25in}{5in}{6in}
  \else
    \web@MargScrDimOpts{0pt}{0pt}{0pt}{0pt}{\tg@HT}{\tg@WD}
  \fi
%    \end{macrocode}
% \paragraph*{Bounding box calculations for the tiles}\leavevmode\par\medskip\noindent
%^^A%
% The $y$-coordinate calculations: If \cs{nRows} is $3$, for example, we calculate $4$ $y$-coodinates,
% \cs{y1}, \cs{y2}, \cs{y3}, \cs{y4}, from bottom to top.
%    \begin{macrocode}
  \@tempcnta\n@Rows\relax
  \advance\@tempcnta\@ne
  \edef\n@Rows{\the\@tempcnta}
  \@tempcnta\z@
  \tg@dima0pt
  \tg@dimb=\tg@HT\relax
  \@whilenum \@tempcnta < \n@Rows \do {%
    \advance\@tempcnta\@ne
    \csarg\edef{y\the\@tempcnta}{\strip@pt\tg@dima}
    \advance\tg@dima \tg@dimb
  }
%    \end{macrocode}
% The $x$-coordinate calculations If \cs{nCols} is $2$, for example, we calculate $3$ $x$-coodinates,
% \cs{x1}, \cs{x2}, \cs{x3}, from left to right.
%    \begin{macrocode}
  \@tempcnta\n@Cols\relax
  \advance\@tempcnta\@ne
  \edef\n@Cols{\the\@tempcnta}
  \@tempcnta\z@
  \tg@dima0pt
  \tg@dimb=\tg@WD\relax
  \@whilenum \@tempcnta < \n@Cols \do {%
    \advance\@tempcnta\@ne
    \csarg\edef{x\the\@tempcnta}{\strip@pt\tg@dima}
    \advance\tg@dima \tg@dimb
  }
%    \end{macrocode}
%    Having finished the calculations, we then execute \cs{tg@wrtthefiledoc}.
%    \begin{macrocode}
  \if@wrtorpkg\expandafter
    \tg@wrtthefiledoc\fi
}
%    \end{macrocode}
%    \DescribeMacro\tg@wrtthefiledoc
%    This command writes the \texttt{tile-template.tex} file to the source
%    file folder. It will read,
%\begin{Verbatim}[xleftmargin=\leftmargini,codes={\catcode`\%=9}]
%\RequirePackage{tmp}
%\documentclass{article}
%\usepackage{web}
%\usepackage{graphicx}
%\let\WriteBookmarks\relax
%\margins{0pt}{0pt}{0pt}{0pt}
%\screensize{\tg@HT}{\tg@WD}
%\parindent0pt\parskip0pt
%\begin{document}
%\tgInputContent
%\end{document}
%\end{Verbatim}
%This is the file that is compiled using \cs{ShellEscape} to create the individual
%tile files. This document contains a trick, the use of the \pkg{tmp} package, which
%is written dynamically just before this file is compiled. The \pkg{tmp} package is
%created by \cs{tg@wrttmppkg}, defined next. The \pkg{tmp} package defines the
%command \DescribeMacro\tgInputContent\cs{tgInputContent} in the body of the document.
%    \begin{macrocode}
\def\tg@wrtthefiledoc{\newwrite\wrttiledoc
  \long\def\IWTD##1{\immediate\write\wrttiledoc{##1}}
  \immediate\openout \wrttiledoc tile-template.tex
  \IWTD{%
    \string\RequirePackage{tmp}^^J%
    \string\documentclass{article}^^J%
    \string\usepackage{web}^^J%
    \string\usepackage{graphicx}^^J%
    \string\let\string\WriteBookmarks\string\relax^^J%
    \string\margins{0pt}{0pt}{0pt}{0pt}^^J%
    \string\screensize{\tg@HT}{\tg@WD}^^J%
    \string\parindent0pt\string\parskip0pt^^J%
    \string\begin{document}^^J%
    \string\tgInputContent^^J%
    \string\end{document}}%
  \immediate\closeout \wrttiledoc
}
%    \end{macrocode}
%    \leavevmode\DescribeMacro\tg@wrttmppkg\hskip-\marginparsep\texttt{\darg{\ameta{basename}}\darg{\ameta{indx}}}
%    Write the \pkg{tmp} package dynamically: \ameta{basename} is the base name of the graphic; \ameta{indx} is the
%    index of the tile (\texttt{01}, \texttt{02}, \texttt{03}, \dots). The action of this package
%    is to define \cs{tgInputContent} to input the file
%    \begin{quote}\ttfamily
%     \ameta{basename}\_\ameta{indx}.cut
%    \end{quote}
%    \begin{macrocode}
\def\tg@wrttmppkg#1#2{\def\CommentCutFile{tmp.sty}%
  \immediate\openout\CommentStream \CommentCutFile
    \immediate\write\CommentStream{\string
      \def\string\tgInputContent{\string
      \InputIfFileExists{#1_#2.cut}%
      {}{\string\null}}}%
  \immediate\closeout\CommentStream
}
%    \end{macrocode}
% \subsection{\tops{\protect\cs{tileTheGraphic}}{\textbackslash{tileTheGraphic}}: A document body command}
%     The file \texttt{create-tb.tex} contains the single command \cs{tileTheGraphic} in the body
%     of the document. It has not arguments.
%    \begin{macrocode}
\InputIfFileExists{package-data.cut}{}{}%
%    \end{macrocode}
%   \DescribeMacro\tg@msgi
%    is the content of \texttt{create-tg} to deliver the \textbf{Tile Graphic Report}. It may be redefined.
%    This content command is expanded in \cs{tileTheGraphic}, defined below.
%    \begin{macrocode}
\def\tg@msgi{%
    \textbf{Tile Graphic Report}\medskip\par
    \textbf{Options:}
    \begin{itemize}
    \if@wrttofiles
      \item The \texttt{wrttofiles} option  taken,
        {\nFilesCreated} files written ({\nRows}~rows, {\nCols}~cols):
        \begin{quote}
        \texttt{\tg@base\_01.pdf}, \texttt{\tg@base\_02.pdf}, \dots.
        \end{quote}
        \ifx\tg@dir\@empty Files saved to source file folder. \else
        Files saved to the \texttt{\tgInFolder} folder.\fi
    \else
      \item The \texttt{!wrttofiles} option taken, no files written.
    \fi
    \if@packagefiles
    \item The \texttt{packagefiles} option taken,
      package file saved as \texttt{\tg@base\_\packagesuffix.pdf}.
      The package contains {\nFilesCreated} pages of tiled graphics.
      \ifx\tg@dir\@empty
        The package file saved to source file folder.
      \else
        The package file saved to the \texttt{\tgInFolder} folder.
      \fi
    \else
    \item The \texttt{!packagefiles} option taken,
      no package file created.
    \fi
    \end{itemize}
    \if@wrtorpkg\else
      Try using the \texttt{wrttofiles} and/or
      \texttt{packagefiles} option(s) to obtain a nontrivial result.
    \fi
}
%    \end{macrocode}
%\leavevmode\DescribeMacro\tileTheGraphic (No arguments) This is the command that tiles
%the graphic.
%    \begin{macrocode}
\def\tileTheGraphic{\begingroup\let\@nu\@nameuse
%    \end{macrocode}
%    If the \opt{!packagefiles} option is in effect, we set \cs{ifpassthruTG} to false
%    so we can execute the \cs{else} part within \texttt{create-tg.tex} (as opposed
%    to in \texttt{\ameta{basename}\_\packagesuffix.tex}).
%    \begin{macrocode}
  \if@packagefiles\else\global\passthruTGfalse\expandafter
    \tg@msgi % provide content
  \fi
  \ifpassthruTG
    \tg@msgi % provide content
  \else
%    \end{macrocode}
%    Okay, we are here either because we are compiling this file either from within
%    \texttt{\ameta{basename}\_\packagesuffix.tex} or from within the source file \texttt{create-tg.tex}
%    with the \opt{!packagefiles} option is in effect.
%    \begin{macrocode}
    \global\let\tg@IndxToks\@empty
%    \end{macrocode}
%    Nested \cs{multido} loop to create grid
%    \begin{macrocode}
    \if@wrtorpkg\expandafter\tg@domultido\fi
  \fi
  \endgroup
  \xdef\nFilesCreated{\the\tg@Cnt}%
  \edef\x{\if@wrtorpkg\noexpand\compileTileFiles\fi}\x
}
%    \end{macrocode}
%   \leavevmode\DescribeMacro\tg@domultido Called by \cs{tileTheGraphic}. Consists of
%    nested \cs{multido} loops. The command both creates the package file and the individual
%    tile graphics, depending on the options. The command \cs{tg@IndexToks} creates a token list
%    of indices \verb~{01}{02}{03}...~ that is later used in a \cs{@tfor} loop.
%    \begin{macrocode}
\def\tg@domultido{%
    \tg@Cnt\z@
    \multido{\iR=\nRows+-1}{\nRows}{%
      \multido{\iC=1+1}{\nCols}{%
        \global\advance\tg@Cnt\@ne
        \ifnum\tg@Cnt<10\relax
          \edef\x{0\the\tg@Cnt}\else
          \edef\x{\the\tg@Cnt}\fi
          \edef\y{\noexpand\g@addto@macro\noexpand
            \tg@IndxToks{{\x}}}\y
          \@tempcntb\iC
          \advance\@tempcntb\@ne
          \edef\oX{\the\@tempcntb}%
          \@tempcntb\iR
          \advance\@tempcntb\@ne
          \edef\oY{\the\@tempcntb}%
%    \end{macrocode}
%     We write the CUT files.
%    \begin{macrocode}
          \wrtTileCuts
%    \end{macrocode}
%     Include the graphic with the appropriate viewport and clip; however,
%     we executed the temporary command \cs{z} if the option \cs{packagefiles}
%     is in effect.
%    \begin{macrocode}
          \edef\z{\noexpand\parbox{\tg@WD}{\noexpand
            \includegraphics[width=\tg@WD,%
              viewport=\@nu{x\iC} \@nu{y\iR} \@nu{x\oX} \@nu{y\oY},%
              clip]{\pathToPic}}}\if@packagefiles\expandafter
              \z\expandafter\newpage\fi
      }% inner multido
    }% outer multido
}
%    \end{macrocode}
%    \leavevmode\DescribeMacro\wrtTileCuts (Called by \cs{tg@domultido}) The CUT files created are the body content
%    of the \texttt{tile-template.tex} file. The CUTs are also used by the package file routine.
%    The content of these CUT files has the following form:
%\begin{Verbatim}[xleftmargin=\parindent,codes={\catcode`\%=9},commandchars=!()]
%\parbox{132.23935pt}{\includegraphics[width=132.23935pt,
%   viewport=0 114.23943 132.23935 228.47885,clip]{!ameta(pathToPic)}}
%\end{Verbatim}
%where the values of \texttt{width} and \texttt{viewport} were calculated by the \cs{setTileParams}
%in the preamble.
%    \begin{macrocode}
\def\wrtTileCuts{%
  \def\CommentCutFile{\tg@base_\x.cut}%
  \immediate\openout\CommentStream=\CommentCutFile
  \immediate\write\CommentStream{\string
    \parbox{\tg@WD}{\string
    \includegraphics[width=\tg@WD,%
    viewport=\@nu{x\iC} \@nu{y\iR} \@nu{x\oX} \@nu{y\oY},%
    clip]{\pathToPic}}}\immediate\closeout\CommentStream
}
%    \end{macrocode}
%\leavevmode\DescribeMacro\compileTileFiles (Called from \cs{tileTheGraphic}) This command performs
%the \cs{ShellEscape} steps. It is executed only if the \opt{wrttofiles} or \opt{packagefiles} option
%is taken (or both).
%    \begin{macrocode}
\def\compileTileFiles{%
  \ifpassthruTG
    \if@packagefiles
%    \end{macrocode}
%    \paragraph*{Package the tile files.} This code is executed by \texttt{create-tg.tex} (because \cs{passthruTG} is true).
%    We write the \texttt{package-data.cut} file, later input by the \pkg{tmp} package, which puts \cs{passthruTG}
%    to false.
%    \begin{macrocode}
      \def\CommentCutFile{package-data.cut}%
      \immediate\openout\CommentStream \CommentCutFile
        \immediate\write\CommentStream{\string\passthruTGfalse}%
      \immediate\closeout\CommentStream
%    \end{macrocode}
%    Then copy \cs{create-tg.tex} to \texttt{\ameta{basename}\_\packagesuffix.tex}. Keep in mind
%    that when we compile \cs{tg@base\_\packagesuffix.tex} which uses the \pkg{tile-graphic} package,
%    \cs{passthruTG} is false. When \texttt{\ameta{basename}\_\packagesuffix.tex} gets here,
%    this block of code is skipped over.
%    \begin{macrocode}
      \ShellEscape{\tg@syscopy \jobname.tex
        \tg@base_\packagesuffix.tex}%
%    \end{macrocode}
%    and compile with the \texttt{--shell-escape} switch,
%    \begin{macrocode}
      \iftg@direct
        \ShellEscape{\pkg@ppArgs{\tg@pdfcreator@app} --shell-escape
          \tg@base_\packagesuffix.tex}%
      \else
        \ShellEscape{\latex@ppArgs{latex} --shell-escape
          \tg@base_\packagesuffix.tex}%
        \ShellEscape{\dvips@ppArgs{dvips} \tg@base_\packagesuffix.dvi}%
        \ifnum\tg@case=\thr@@
          \ShellEscape{\pkg@ppArgs{\tg@pdfcreator@app}
          \tg@base_\packagesuffix.ps}%
        \else
          \ShellEscape{\pkg@ppArgs{\tg@pdfcreator@app} /N /Q
          "\tg@fullPathToSource/\tg@base_\packagesuffix.ps"}%
        \fi
        \ShellEscape{\tg@sysdel \tg@base_\packagesuffix.dvi
          \tg@base_\packagesuffix.ps}%
      \fi
%    \end{macrocode}
%    Insert the after-package-creation-hook \DescribeMacro\@fterPkgCreationHook
%    \cs{@fterPkgCreationHook}
%    \begin{macrocode}
      \@fterPkgCreationHook
%    \end{macrocode}
%    clean up,
%    \begin{macrocode}
      \ShellEscape{\tg@sysdel \tg@base_\packagesuffix.tex
        \tg@base_\packagesuffix.log \tg@base_\packagesuffix.aux}%
%    \end{macrocode}
%    and move into the folder from which the graphic resides, if necessary.
%    \begin{macrocode}
      \iftgfolder
        \ShellEscape{\tg@sysmove
          \tg@base_\packagesuffix.pdf \tgInFolder}\fi
    \fi
  \else
%    \end{macrocode}
%    \paragraph*{Create the tile files.} This block is compiled if \cs{passThruTG}
%    is false and the \opt{wrttofiles} option is taken.
%    The block gets compiled in two instances:
%    \begin{enumerate}
%     \item[(1)] by \texttt{\ameta{basename}\_\packagesuffix.tex} if the \opt{packagefiles} and
%        \opt{wrttofiles} options are taken;
%     \item[(2)] by \texttt{create-tg.tex} if \opt{!packagefiles} and
%        \opt{wrttofiles} options are taken. (Recall that if \opt{!packagefiles}
%        is taken, then \cs{ifpassThruTG} is set to false earlier in the code stream.)
%    \end{enumerate}
%    \begin{macrocode}
    \if@wrttofiles
      \edef\@tforexp{\noexpand
        \@tfor\noexpand\Indx:=\tg@IndxToks}%
%    \end{macrocode}
%      For each token in \cs{tg@IndexToks} (\verb!{01}{02}{03}...)!, we compile
%      the dynamic file \texttt{tile-template.tex}.
%    \begin{macrocode}
      \@tforexp \do {%
        \edef\tgTileBaseIndx{\tg@base_\Indx}%
%    \end{macrocode}
%      Create the \pkg{tmp} package with parameters \ameta{basename} and \ameta{indx}.
%    \begin{macrocode}
        \edef\x{\noexpand\tg@wrttmppkg{\tg@base}{\Indx}}\x
%    \end{macrocode}
%      Compile this turkey,
%    \begin{macrocode}
        \iftg@direct
          \ShellEscape{\tile@ppArgs{\tg@pdfcreator@app}
            tile-template.tex}%
        \else
          \ShellEscape{\latex@ppArgs{latex} --shell-escape
            tile-template.tex}%
          \ShellEscape{\dvips@ppArgs{dvips} tile-template.dvi}%
          \ifnum\tg@case=\thr@@
            \ShellEscape{\pkg@ppArgs{\tg@pdfcreator@app}
              tile-template.ps}%
          \else
            \ShellEscape{\pkg@ppArgs{\tg@pdfcreator@app} /N /Q
            "\tg@fullPathToSource/tile-template.ps"}%
          \fi
          \ShellEscape{\tg@sysdel tile-template.dvi
            tile-template.ps}%
        \fi
%    \end{macrocode}
%    Insert the after-tile-creation-hook \DescribeMacro\@fterTileCreationHook
%    \cs{@fterTileCreationHook}
%    \begin{macrocode}
        \@fterTileCreationHook
        \ShellEscape{\tg@syscopy tile-template.pdf
          \tgTileBaseIndx.pdf}%
%    \end{macrocode}
%      clean up,
%    \begin{macrocode}
        \ShellEscape{\tg@syscopy tile-template.pdf
          \tgTileBaseIndx.pdf}%
      }% do
%    \end{macrocode}
%      and move to another folder if necessary
%    \begin{macrocode}
      \iftgfolder
        \ShellEscape{\tg@sysmove \tg@base_*.pdf \tgInFolder}\fi
    \fi
  \fi
%    \end{macrocode}
%      finished! Just clean up all aux files.
%    \begin{macrocode}
  \ShellEscape{\tg@sysdel \tg@base_*.cut package-data.cut}%
  \ShellEscape{\tg@sysdel tmp.sty tile-template.*}%
}
%    \end{macrocode}
%      Letting \cs{WriteBookmarks} to \cs{relax} prevents \pkg{hyperref} from
%      complaining about the OUT file is not up to date. No bookmarks are created.
%      Also load the configuration file \marginpar{\raggedleft\small\texttt{tg.cfg}}\texttt{tg.cfg},
%      if it exists.
%    \begin{macrocode}
\let\WriteBookmarks\relax
\InputIfFileExists{tg.cfg}{}{}
\tg@restoreCats
\parindent0pt
%    \end{macrocode}
%    \begin{macrocode}
%</package>
%    \end{macrocode}
%\Finale
\endinput
