From 18bba653e4b29ba58a75d6ce516c7203834bb769 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 28 May 2020 22:01:24 +0000 Subject: tile-graphic (28may20) git-svn-id: svn://tug.org/texlive/trunk@55325 c570f23f-e606-0410-a88d-b1316a301751 --- .../source/latex/tile-graphic/tile-graphic.dtx | 1010 ++++++++++++++++++++ .../source/latex/tile-graphic/tile-graphic.ins | 61 ++ 2 files changed, 1071 insertions(+) create mode 100644 Master/texmf-dist/source/latex/tile-graphic/tile-graphic.dtx create mode 100644 Master/texmf-dist/source/latex/tile-graphic/tile-graphic.ins (limited to 'Master/texmf-dist/source/latex/tile-graphic') diff --git a/Master/texmf-dist/source/latex/tile-graphic/tile-graphic.dtx b/Master/texmf-dist/source/latex/tile-graphic/tile-graphic.dtx new file mode 100644 index 00000000000..fa9654fa849 --- /dev/null +++ b/Master/texmf-dist/source/latex/tile-graphic/tile-graphic.dtx @@ -0,0 +1,1010 @@ +%\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. %% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +%\NeedsTeXFormat{LaTeX2e}[1997/12/01] +%\ProvidesPackage{tile-graphic} +% [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} +% +% \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} +% +% \end{macrocode} +%\Finale +\endinput diff --git a/Master/texmf-dist/source/latex/tile-graphic/tile-graphic.ins b/Master/texmf-dist/source/latex/tile-graphic/tile-graphic.ins new file mode 100644 index 00000000000..0622b9ee3a2 --- /dev/null +++ b/Master/texmf-dist/source/latex/tile-graphic/tile-graphic.ins @@ -0,0 +1,61 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 2020 D. P. Story +%% +%% This file is part of the `AcroTeX eDucation Bundle'. +%% ------------------------------------------- +%% +%% It may be distributed under the conditions of the LaTeX Project Public +%% License, either version 1.2 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.2 or later is part of all distributions of LaTeX +%% version 1999/12/01 or later. +%% +%% --------------- start of docstrip commands ------------------ +%% +\def\filedate{2020/05/20} +\def\batchfile{tile-graphic.ins} + +\input docstrip +\ifx\generate\undefined + \Msg{**********************************************} + \Msg{*} + \Msg{* This installation requires docstrip} + \Msg{* version 2.4 or later.} + \Msg{*} + \Msg{* An older version of docstrip has been input} + \Msg{*} + \Msg{**********************************************} + \errhelp{Move or rename old docstrip.tex and get a newer one.} + \errmessage{Old docstrip in input path} + \batchmode + \csname @@end\endcsname\end +\fi + +\keepsilent +\askforoverwritefalse +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\preamble +\endpreamble + +\generate +{% + \file{tile-graphic.sty}{\from{tile-graphic.dtx}{copyright,package}} +} + + +\Msg{***************************************************************} +\Msg{*} +\Msg{* \space To finish the installation you have to copy the files } +\Msg{*} +\Msg{* \space *.sty, *.cfg and *.def into a directory searched by TeX} +\Msg{*} +\Msg{***************************************************************} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\endinput -- cgit v1.2.3