summaryrefslogtreecommitdiff
path: root/support/latex-make/texdepends.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/latex-make/texdepends.dtx
Initial commit
Diffstat (limited to 'support/latex-make/texdepends.dtx')
-rw-r--r--support/latex-make/texdepends.dtx1055
1 files changed, 1055 insertions, 0 deletions
diff --git a/support/latex-make/texdepends.dtx b/support/latex-make/texdepends.dtx
new file mode 100644
index 0000000000..252d423011
--- /dev/null
+++ b/support/latex-make/texdepends.dtx
@@ -0,0 +1,1055 @@
+% \iffalse meta-comment
+%%
+%% File: texdepends.dtx Copyright (C) 2004--2011 V. Danjean
+%% Vincent.Danjean@ens-lyon.org
+%% Modified by Matthieu Gallet
+%% Matthieu.Gallet@ens-lyon.org
+%%
+%% This program is free software; you can redistribute it and/or
+%% modify it under the terms of the GNU General Public License
+%% as published by the Free Software Foundation; either version 2
+%% of the License, or (at your option) any later version.
+%%
+%% This program is distributed in the hope that it will be useful,
+%% but WITHOUT ANY WARRANTY; without even the implied warranty of
+%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+%% GNU General Public License for more details.
+%%
+%% You should have received a copy of the GNU General Public License
+%% along with this program; if not, write to the Free Software
+%% Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+%%
+%
+%<*dtx>
+ \ProvidesFile{texdepends.dtx}
+%</dtx>
+%<package>\NeedsTeXFormat{LaTeX2e}%
+%<package>\ProvidesPackage{texdepends}%
+% \fi
+% \ProvidesFile{texdepends.dtx}
+[2018/09/04 v2.3.0 ignore comment.cut file from the comment package]
+% \iffalse
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[latin1]{inputenc}
+\usepackage[french,english]{babel}
+\usepackage{pdfswitch}
+\NoAutoSpaceBeforeFDP
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\setcounter{IndexColumns}{2} % make a twocolumn index
+\setlength{\columnseprule}{0pt} % no rules between columns ...
+\setlength{\columnsep}{2em} % ... but more spacing instead.
+\setcounter{unbalance}{4}
+\setlength{\IndexMin}{100pt}
+%%%%\OnlyDescription % uncomment this line to suppress printing the source code
+\makeatletter
+% don't show underfull hboxes in index/glossary:
+\g@addto@macro{\IndexParms}{\hbadness=10000}
+\g@addto@macro{\GlossaryParms}{\hbadness=10000}
+\makeatother
+\begin{document}
+ \DocInput{texdepends.dtx}
+ \PrintIndex
+ \PrintChanges
+\end{document}
+%</driver>
+% \fi
+%
+% \GetFileInfo{texdepends.dtx}
+%
+% \DoNotIndex{\#,\$,\%,\&,\@,\\,\{,\},\^,\_,\~,\ }
+% \DoNotIndex{\def,\long,\edef,\xdef,\gdef,\let,\global}
+% \DoNotIndex{\if,\ifnum,\ifdim,\ifcat,\ifmmode,\ifvmode,\ifhmode,%
+% \iftrue,\iffalse,\ifvoid,\ifx,\ifeof,\ifcase,\else,\or,\fi,\loop,\do}
+% \DoNotIndex{\box,\copy,\setbox,\unvbox,\unhbox,\hbox,%
+% \vbox,\vtop,\vcenter}
+% \DoNotIndex{\@empty,\immediate,\write}
+% \DoNotIndex{\egroup,\bgroup,\expandafter,\begingroup,\endgroup}
+% \DoNotIndex{\divide,\advance,\multiply,\count,\dimen}
+% \DoNotIndex{\relax,\space,\string}
+% \DoNotIndex{\csname,\endcsname,\@spaces,\openin,\openout,%
+% \closein,\closeout}
+% \DoNotIndex{\catcode,\endinput}
+% \DoNotIndex{\jobname,\message,\read,\the,\noexpand}
+% \DoNotIndex{\hsize,\vsize,\hskip,\vskip,\kern,\hfil,\hfill,\hss}
+% \DoNotIndex{\m@ne,\z@,\@m,\z@skip,\@ne,\tw@,\p@}
+% \DoNotIndex{\DeclareRobustCommand,\DeclareOption,\newcommand,\newcommand*}
+% \DoNotIndex{\newcount,\newif,\newlinechar,\newread,\newtoks,\newwrite}
+% \DoNotIndex{\dp,\wd,\ht,\vss,\unskip,\ifthenelse}
+%
+% \DoNotIndex{\@filef@und,\@nameddef,\@tempa}
+% \DoNotIndex{\define@key,\equal,\ExecuteOptions}
+% \DoNotIndex{\filename@area,\filename@base,\filename@ext,\filename@parse}
+% \DoNotIndex{\Gin@exclamation,\Gin@getbase,\Gin@scalex,\Gin@scaley}
+% \DoNotIndex{\Gread@eps,\Gread@pdf,\Gscale@box}
+% \DoNotIndex{\IfFileExists,\ifpdf,\input,\InputIfFileExists}
+% \DoNotIndex{\MessageBreak,\PackageWarning,\PackageWarningNoLine}
+% \DoNotIndex{\ProcessOptions,\RequirePackage,\typeout}
+% \DoNotIndex{}
+% \DoNotIndex{}
+%
+% \title{The \textsf{texdepends} package\thanks{This file
+% has version number \fileversion, last
+% revised \filedate.}}
+% \author{Vincent \textsc{Danjean}}
+% \date{\filedate}
+% \maketitle
+% \begin{abstract}
+% This package allows \LaTeX\space to automatically generate
+% dependencies while compiling documents.
+% \end{abstract}
+% \CheckSum{793}
+%
+% \changes{v1.0.1}{2005/03/22}{Version 1.0.1 at last}
+% \changes{v1.0.2}{2005/10/22}{Add support for package index.sty}
+% \changes{v1.1.0}{2005/11/05}{Manage index/glossary}
+% \changes{v1.1.0}{2005/11/05}{Rewrite of the package}
+% \changes{v1.2.0}{2008/01/28}{Better management of subfig files}
+% \changes{v1.3.0}{2011/09/25}{Management of svg files}
+% \changes{v2.2.5}{2018/09/04}{No changes in texdepends.dtx}
+% \changes{v2.3.0}{2018/10/17}{ignore comment.cut file from the comment package}
+%
+% \makeatletter
+% \def\SpecialOptionIndex#1{\@bsphack
+% \index{#1\actualchar{\protect\ttfamily#1}
+% (option)\encapchar usage}%
+% \index{options:\levelchar{\protect\ttfamily#1}\encapchar
+% usage}\@esphack}
+% \def\SpecialFileIndex#1{\@bsphack
+% \index{#1\actualchar{\protect\ttfamily#1}
+% (file)\encapchar usage}%
+% \index{files:\levelchar{\protect\ttfamily#1}\encapchar
+% usage}\@esphack}
+% \def\SpecialMainOptionIndex#1{\@bsphack\special@index{#1\actualchar
+% {\string\ttfamily\space#1}
+% (option)\encapchar main}%
+% \special@index{options:\levelchar{%
+% \string\ttfamily\space#1}\encapchar
+% main}\@esphack}
+% \def\option{\begingroup
+% \catcode`\\12
+% \MakePrivateLetters \mym@cro@ \iffalse}
+% \long\def\mym@cro@#1#2{\endgroup \topsep\MacroTopsep \trivlist
+% \edef\saved@macroname{\string#2}%
+% \def\makelabel##1{\llap{##1}}%
+% \if@inlabel
+% \let\@tempa\@empty \count@\macro@cnt
+% \loop \ifnum\count@>\z@
+% \edef\@tempa{\@tempa\hbox{\strut}}\advance\count@\m@ne \repeat
+% \edef\makelabel##1{\llap{\vtop to\baselineskip
+% {\@tempa\hbox{##1}\vss}}}%
+% \advance \macro@cnt \@ne
+% \else \macro@cnt\@ne \fi
+% \edef\@tempa{\noexpand\item[%
+% #1%
+% \noexpand\PrintMacroName
+% \else
+% \noexpand\PrintEnvName
+% \fi
+% {\string#2}]}%
+% \@tempa
+% \global\advance\c@CodelineNo\@ne
+% #1%
+% \SpecialMainIndex{#2}\nobreak
+% \DoNotIndex{#2}%
+% \else
+% \SpecialMainOptionIndex{#2}\nobreak
+% \fi
+% \global\advance\c@CodelineNo\m@ne
+% \ignorespaces}
+% \let\endoption \endtrivlist
+% \def\DescribeOption{\leavevmode\@bsphack\begingroup\MakePrivateLetters
+% \Describe@Option}
+% \def\Describe@Option#1{\endgroup
+% \marginpar{\raggedleft\PrintDescribeEnv{#1}}%
+% \SpecialOptionIndex{#1}\@esphack\ignorespaces}
+% \def\DescribeFile{\leavevmode\@bsphack\begingroup\MakePrivateLetters
+% \Describe@Option}
+% \def\Describe@File#1{\endgroup
+% \marginpar{\raggedleft\PrintDescribeEnv{#1}}%
+% \SpecialFileIndex{#1}\@esphack\ignorespaces}
+% \makeatother
+% \MakeShortVerb{\|}
+%
+% \tableofcontents
+% \section{Introduction}
+% This package automatically generates dependancies on \LaTeX\ files and
+% packages, figures, bibliography files, glossary and index files. The
+% generated file is then used by a Makefile to handle dependancies.
+% \StopEventually{
+% }
+% \section{Implementation of texdepends}
+% \subsection{Options}
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+% |texdepends| is easier to write with the |ifthen| package.
+% \begin{macrocode}
+\RequirePackage{ifthen}
+% \end{macrocode}
+% \begin{option}{debug}
+% The debug option (enable debug messages, useful for debuging)
+% \begin{macrocode}
+\newboolean{TD@debug}
+\newcommand{\TD@option@debug}[1][true]{%
+ %\PackageWarningNoLine{texdepends}{Setting debug to #1}
+ \setboolean{TD@debug}{#1}%
+}%
+% \end{macrocode}
+% \end{option}
+% \begin{option}{extension}
+% The extension option. We can use it to let |texdepends|
+% know whether we compile a dvi or a pdf file.
+% \begin{macrocode}
+\def\TD@option@extension[#1]{%
+ %\PackageWarningNoLine{texdepends}{Using extention #1}
+ \def\TD@extention{#1}%
+}%
+% \end{macrocode}
+% \end{option}
+% Managing options with specific code. Using the |keyval|
+% package could be a solution, but this would add one more dependency.
+% \begin{macrocode}
+\def\TD@option@split#1=#2=#3\relax{%
+ \def\TD@option@name{#1}%
+ \ifx\TD@option@name\@empty\else
+ \expandafter\let\expandafter\TD@option@cmd
+ \csname TD@option@\TD@option@name\endcsname
+ %\PackageWarningNoLine{texdepends}{1: '#1', 2: '#2', 3: '#3'}
+ \ifx\TD@option@cmd\relax
+ \@unknownoptionerror%
+ \else
+ \ifx\@empty#3\@empty
+ \TD@option@cmd\relax%
+ \else
+ \def\TD@option@value{#2}%
+ \TD@option@cmd[\TD@option@value]%
+ \fi
+ \fi
+ \fi
+}%
+% \end{macrocode}
+% All option are managed by the same code.
+% \begin{macrocode}
+\DeclareOption*{%
+ %\PackageWarningNoLine{texdepends}{Option \CurrentOption}%
+ \expandafter\TD@option@split\CurrentOption==\relax%
+}%
+% \end{macrocode}
+% So lets process options
+% \begin{macrocode}
+\ProcessOptions
+% \end{macrocode}
+% If the |extension| option is not used, we try to find ourselves
+% the good extension based on TeX engine or mode.
+% \begin{macrocode}
+\ifthenelse{\isundefined{\TD@extention}}{%
+ \PackageWarningNoLine{texdepends}{No extension given: detecting it}%
+ \RequirePackage{ifxetex,ifpdf}%
+ \ifxetex%
+ \PackageWarningNoLine{textdepends}{Detected XeTeX: using .pdf}%
+ \def\TD@extention{.pdf}%
+ \else\ifpdf%
+ \PackageWarningNoLine{texdepends}{Detected PDF mode: using .pdf}%
+ \def\TD@extention{.pdf}%
+ \else%
+ \PackageWarningNoLine{texdepends}{Detected DVI mode. Using .dvi}%
+ \def\TD@extention{.dvi}%
+ \fi\fi%
+}{}%
+% \end{macrocode}
+%
+% \subsection{Tools}
+% Some macros to help development
+% \subsubsection{Debug/info wrapper}
+% \begin{macro}{\TD@warning}
+% To write a warning
+% \begin{macrocode}
+\newcommand{\TD@warning}[1]{%
+ \PackageWarningNoLine{texdepends}{#1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TD@warningLine}
+% To write a warning with line info
+% \begin{macrocode}
+\newcommand{\TD@warningLine}[1]{%
+ \PackageWarning{texdepends}{#1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TD@info}
+% To write an info (as a warning if the |debug| option is set
+% \begin{macrocode}
+\newcommand{\TD@info}[1]{%
+ \ifthenelse{\boolean{TD@debug}}{%
+ \PackageWarningNoLine{texdepends}{#1}%
+ }{%
+ \PackageInfo{texdepends}{#1}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TD@debug}
+% To write a message if the |debug| option is set
+% \begin{macrocode}
+\newcommand{\TD@debug}[1]{%
+ \ifthenelse{\boolean{TD@debug}}{%
+ \PackageWarningNoLine{texdepends}{#1}%
+ }{%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \subsubsection{Writing dependencies}
+% We open the file where we will write dependencies and other infos.
+% \begin{macrocode}
+\newwrite\TD@write
+\TD@info{Writing info in '\jobname\TD@extention.mk'}
+\immediate\openout\TD@write\jobname\TD@extention.mk%
+% \end{macrocode}
+% And we define a few macro to write in this file
+%
+% \begin{macro}{\TD@print}
+% We write something in the file
+% \begin{macrocode}
+\def\TD@print#1{%
+ \immediate\write\TD@write{#1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TD@printClass}
+% We need a class
+% \begin{macrocode}
+\def\TD@printClass#1{%
+ \TD@print{TD_\jobname\TD@extention _INPUTS\space += #1.cls}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TD@printPackage}
+% We need a package
+% \begin{macrocode}
+\def\TD@printPackage#1{%
+ \TD@print{TD_\jobname\TD@extention _INPUTS\space += #1.sty}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TD@printInput}
+% We need a (\LaTeX) file
+% \begin{macrocode}
+\def\TD@printInput#1{%
+ \TD@print{TD_\jobname\TD@extention _INPUTS\space += #1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TD@printFig}
+% We want to ignore a dependency
+% \begin{macrocode}
+\def\TD@printNoDependsFile#1{%
+ \TD@print{TD_\jobname\TD@extention _DEPENDS_EXCLUDE\space += #1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TD@printFig}
+% We need an |XFig| file
+% \begin{macrocode}
+\def\TD@printFig#1{%
+ \TD@print{TD_\jobname\TD@extention _FIGURES\space += #1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TD@printSubfig}
+% Web need a subfig file (see figlatex.dtx)
+% \begin{macrocode}
+\def\TD@printSubfig#1{%
+ \TD@print{TD_\jobname\TD@extention _SUBFIGS\space += #1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TD@printRequiredFile}
+% A file is missing. |texdepend| will try to skip it this time,
+% but it will be needed at the next compilation
+% \begin{macrocode}
+\def\TD@printRequiredFile#1{%
+ \TD@print{TD_\jobname\TD@extention _REQUIRED\space += #1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\RequireFile}
+% LaTeX users can directly declare a dependencie
+% \begin{macrocode}
+\let\RequireFile\TD@printRequiredFile
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TD@printOut}
+% We write in a file
+% \begin{macrocode}
+\def\TD@printOut#1{%
+ \TD@print{TD_\jobname\TD@extention _OUTPUTS\space += #1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TD@printGraphicspath}
+% We modify the graphicspath
+% \begin{macrocode}
+\def\TD@printGraphicspath#1{%
+ \TD@print{TD_\jobname\TD@extention _GRAPHICSPATH\space := #1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TD@printBibfile}
+% We use a bibfile (|*.bib|)
+% \begin{macrocode}
+\def\TD@printBibfile#1{%
+ \TD@print{TD_\jobname\TD@extention _BIBFILES\space += #1.bib}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TD@printBibstyle}
+% We use a bibstyle file (|*.bst|)
+% \begin{macrocode}
+\def\TD@printBibstyle#1{%
+ \TD@print{TD_\jobname\TD@extention _BIBSTYLES\space += #1.bst}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TD@printBblfile}
+% We use a bibliography file (|*.bbl|)
+% \begin{macrocode}
+\def\TD@printBblfile#1{%
+ \TD@print{TD_\jobname\TD@extention _BBLFILES\space += #1.bbl}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TD@printRebuildRule}
+% We need a specific rule in the |Makefile| to check if a
+% rebuild is needed
+% \begin{macrocode}
+\def\TD@printRebuildRule#1{%
+ \TD@print{TD_\jobname\TD@extention _REBUILD_RULES\space += #1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TD@printIndex}
+% We use a new index
+% \begin{macrocode}
+\def\TD@printIndex#1{%
+ \TD@print{TD_\jobname\TD@extention _INDEXES\space += INDEX}%
+ \TD@print{TD_\jobname\TD@extention _INDEXES_INDEX\space += #1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TD@printIndexSource}
+% The index file filled by \LaTeX
+% \begin{macrocode}
+\def\TD@printIndexSource#1#2{%
+ \TD@print{TD_\jobname\TD@extention _INDEX_#1_SRC\space = #2}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TD@printIndexTarget}
+% And the index file read by \LaTeX{} after |makeindex|
+% processing
+% \begin{macrocode}
+\def\TD@printIndexTarget#1#2{%
+ \TD@print{TD_\jobname\TD@extention _INDEX_#1_TARGET\space = #2}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TD@printIndexStyle}
+% The index style to be used with |makeindex| (never
+% called for now)
+% \begin{macrocode}
+\def\TD@printIndexStyle#1#2{%
+ \TD@print{TD_\jobname\TD@extention _INDEX_#1_STYLE\space = #2}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TD@printGlossary}
+% And the same things for glossary. Its name
+% \begin{macrocode}
+\def\TD@printGlossary#1{%
+ \TD@print{TD_\jobname\TD@extention _INDEXES += GLOSS}%
+ \TD@print{TD_\jobname\TD@extention _INDEXES_GLOSS\space += #1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TD@printGlossarySource}
+% The glossary file filled by \LaTeX
+% \begin{macrocode}
+\def\TD@printGlossarySource#1#2{%
+ \TD@print{TD_\jobname\TD@extention _GLOSS_#1_SRC\space = #2}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TD@printGlossaryTarget}
+% And the glossary file read by \LaTeX{} after |makeindex|
+% processing
+% \begin{macrocode}
+\def\TD@printGlossaryTarget#1#2{%
+ \TD@print{TD_\jobname\TD@extention _GLOSS_#1_TARGET\space = #2}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TD@printGlossaryStyle}
+% The glossary style to be used with |makeindex| (never
+% called for now)
+% \begin{macrocode}
+\def\TD@printGlossaryStyle#1#2{%
+ \TD@print{TD_\jobname\TD@extention _GLOSS_#1_STYLE\space = #2}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Diverting a macro}
+% \begin{macro}{\TD@switch}
+% |\TD@switch| replace the macro |\#1| by the macro |\TD@#1|. The
+% original macro is stored in the |\TD@orig@#1| macro. Nothing is done
+% if |\#1| is already |\TD@#1| (that is if |\TD@switch| is called
+% severall times with the same argument)
+% \begin{macrocode}
+\def\TD@switch#1{%
+ \expandafter\let\expandafter\TD@local@old\csname#1\endcsname%
+ \expandafter\let\expandafter\TD@local@new\csname TD@#1\endcsname%
+ \ifx\TD@local@old\TD@local@new
+ \PackageWarning{texdepends}{#1 already redefined. Skipping it.}%
+ \else
+ \ifx\TD@local@old\relax
+ \TD@warning{Diverting empty macro '#1' \MessageBreak%
+ Probably a bug in texdepends.sty}%
+ \else
+ \TD@info{Diverting macro '#1'}%
+ \fi
+ \expandafter\let\csname TD@orig@#1\endcsname\TD@local@old%
+ \expandafter\let\csname#1\endcsname\TD@local@new%
+ \fi
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\TD@docswitch}
+% Sometimes, we want the diversion to be delayed until the start of
+% the document.
+% \begin{macrocode}
+\def\TD@docswitchlist{}%
+\def\TD@docswitch#1{%
+ \TD@info{Registering macro '#1' for diversion}%
+ \ifx\TD@docswitchlist\@empty%
+ \xdef\TD@docswitchlist{#1}%
+ \else%
+ \xdef\TD@docswitchlist{\TD@docswitchlist,#1}%
+ \fi%
+}%
+\AtBeginDocument{%
+ \TD@info{Diverting registered macros...}%
+ \@for\TD@cmd:=\TD@docswitchlist\do{%
+ \TD@switch{\TD@cmd}%
+ }%
+ \TD@info{Divertions done}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\TD@PackagePreDivert}
+% \begin{macro}{\TD@PackagePostDivert}
+% And then, two macros to insert command just before or after
+% loading a package. The first argument is the name of the package
+% we want to add an hook before or after, and then there is the
+% definition of the hook that will be called. Four parameters (|#1|,
+% \ldots, |#4|) are available (the same as the |@onefilewithoptions|
+% \LaTeX{} macro, ie package name, options, and the two remaining ;-)).
+% \begin{macrocode}
+\def\TD@PackagePreDivert#1{%
+ \expandafter\def\csname TD@PackageStart@#1\endcsname ##1##2##3##4%
+}%
+\def\TD@PackagePostDivert#1{%
+ \expandafter\def\csname TD@PackageEnd@#1\endcsname ##1##2##3##4%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Initialisation}
+% We need to be loaded \emph{before} \string\documentclass
+% \begin{macrocode}
+\ifx\documentclass\@twoclasseserror
+ \PackageError{texdepends}{texdepends needs to be loaded BEFORE
+ \string\documentclass \MessageBreak
+ Use \string\RequirePackage\space instead of \string\usepackage
+ \MessageBreak as the later is not allowed before
+ \string\documentclass}
+\fi
+% \end{macrocode}
+% And we write the first dependency (upon ourself)
+% \begin{macrocode}
+\TD@printPackage{texdepends}
+% \end{macrocode}
+% We write default graphicspath (is this really needed ?)
+% \begin{macrocode}
+\TD@printGraphicspath{{.}}
+% \end{macrocode}
+%
+% \subsubsection{Warning upon missing figures}
+% \begin{macro}{\TD@depends}
+% \begin{macro}{\TD@dependsWarning}
+% \begin{macro}{\TD@missingDepends}
+% If some figures are missing, |\TD@missingDepends| will be called so
+% that a warning will be displayed at the end of the
+% compilation. Figures should be generated before the next run.
+% \begin{macrocode}
+\def\TD@depends{}%
+\def\TD@dependsWarning{%
+ \PackageWarningNoLine{texdepends}{Figure(s) missing. Check
+ dependencies again}%
+}%
+\def\TD@missingDepends{%
+ \global\let\TD@depends\TD@dependsWarning%
+}%
+\AtEndDocument{%
+ \TD@depends%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \subsection{Diversion of \LaTeX{} macros}
+%
+% \subsubsection{Class and package loading}
+% \begin{macro}{\TD@@fileswith@pti@ns}
+% \begin{macro}{\TD@@@fileswith@pti@ns}
+% Diverting |\@fileswith@pti@ns| and |@@fileswith@pti@ns| so that we
+% can track class loading. Package are tracked with an other macro
+% (see just after).
+% \begin{macrocode}
+\def\TD@@fileswith@pti@ns#1[#2]#3[#4]{%
+ \ifx#1\@clsextension
+ \TD@printClass{#3}
+ \fi
+ \TD@orig@@fileswith@pti@ns{#1}[#2]{#3}[#4]%
+}%
+\let\TD@@@fileswith@pti@ns\TD@@fileswith@pti@ns
+\TD@switch{@fileswith@pti@ns}%
+\TD@switch{@@fileswith@pti@ns}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\TD@@onefilewithoptions}
+% By diverting |\@onefilewithoptions|, we can track all loaded
+% packages. We write the dependency, and we look at the loaded package
+% to see if we need some special requirements
+% \begin{macrocode}
+\def\TD@@onefilewithoptions#1[#2][#3]#4{%
+ \TD@printPackage{#1}%
+ \ifthenelse{\equal{#1}{texdepends}}{%
+% \end{macrocode}
+% The |texdepends| package is special : we know it has already been
+% loaded (we are running code in it) but perhaps \LaTeX{} does not
+% know it. So we try to honor the |debug| option.
+% \begin{macrocode}
+ \TD@debug{Package '#1' detected}
+ \@for\TD@package@option:=#2\do{%
+ \ifthenelse{\expandafter\isundefined\csname TD@option@\TD@package@option\endcsname}{
+ \TD@warningLine{Ignoring unknown option '\TD@package@option'}
+ }{
+ \ifthenelse{%
+ \equal{\TD@package@option}{debug}%
+ %\OR\equal{\TD@package@option}{debug}%
+ }{
+ \csname TD@option@\TD@package@option\endcsname%
+ }{
+ \TD@warningLine{Ignoring option '\TD@package@option'
+ \MessageBreak #1 already loaded
+ }
+ }
+ }
+ }
+ }{%
+ \expandafter\let\expandafter\TD@divert
+ \csname TD@PackageStart@#1\endcsname
+ \ifx\TD@divert\relax
+ \TD@debug{No preamble for package #1}
+ \else
+ \TD@info{Preamble for package #1}
+ \TD@divert{#1}{#2}{#3}{#4}%
+ \fi
+ \TD@orig@@onefilewithoptions{#1}[#2][#3]{#4}%
+ \expandafter\let\expandafter\TD@divert
+ \csname TD@PackageEnd@#1\endcsname
+ \ifx\TD@divert\relax
+ \TD@debug{No postamble for package #1}
+ \else
+ \TD@info{Postamble for package #1}
+ \TD@divert{#1}{#2}{#3}{#4}%
+ \fi
+ }%
+}%
+\TD@switch{@onefilewithoptions}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Tracking input files}
+% \begin{macro}{\TD@@iinput}
+% \begin{macro}{\TD@@input@}
+% |\@iinput| and |\@input@| are diverted to track loaded files
+% \begin{macrocode}
+\def\TD@@iinput#1{%
+ \TD@printInput{#1}%
+ \TD@orig@@iinput{#1}}%
+\def\TD@@input@#1{%
+ \IfFileExists{#1}{%
+ \TD@printInput{#1}%
+ }{}%
+ \TD@orig@@input@{#1}}%
+\TD@switch{@iinput}%
+\TD@switch{@input@}%
+\def\TD@verbatiminput#1{%
+ \TD@printInput{#1}%
+ \TD@orig@verbatiminput{#1}}%
+\TD@PackagePostDivert{verbatim}{%
+ \TD@switch{verbatiminput}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Tracking output files}
+% \begin{macro}{\TD@openout}
+% \begin{macro}{\TD@poenout@eq}
+% \begin{macro}{\TD@poenout@noeq}
+% Note: that does not work. Currently, we parse the log file instead
+% of using this. If someone has ideas\ldots
+% \begin{macrocode}
+\let\TD@orig@openout\openout
+\def\TD@openout#1{%
+ \@ifnextchar={\TD@openout@eq#1}{\TD@openout@noeq#1}}
+\def\TD@openout@eq#1=#2.#3{%
+ \TD@printOut{#2.#3}%
+ \TD@orig@openout#1=#2.#3%
+}%
+\def\TD@openout@noeq#1#2.#3{%
+ \TD@printOut{#2.#3}%
+ \TD@orig@openout#1#2.#3%
+}%
+ %\TD@switch{openout}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \subsubsection{Tracking bibliography files}
+% \begin{macrocode}
+\def\TD@bibli@bbl{%
+ \TD@printBblfile{\jobname}%
+ \global\let\TD@bibli@bbl\relax%
+}%
+\def\TD@bibli@files#1{%
+ \TD@bibli@bbl%
+ \@for\TD@bibfile:=#1\do{%
+ \TD@printBibfile{\TD@bibfile}%
+ }%
+}
+\def\TD@bibli@style#1{%
+ \TD@bibli@bbl%
+ %\@for\TD@bibstyle:=#1\do{%
+ % \TD@printBibstyle{\TD@bibstyle}%
+ %}
+ \TD@printBibstyle{#1}%
+}
+\def\TD@bibliography#1{%
+ \TD@bibli@files{#1}%
+ \TD@orig@bibliography{#1}%
+}%
+\def\TD@bibliographystyle#1{%
+ \TD@bibli@style{#1}%
+ \TD@orig@bibliographystyle{#1}%
+}%
+\TD@docswitch{bibliography}%
+\TD@switch{bibliographystyle}%
+% \end{macrocode}
+% \subsubsection{Glossary and index files}
+% \begin{macrocode}
+\def\TD@makeindex{%
+ \TD@printIndex{\jobname}%
+ \TD@printIndexSource{\jobname}{\jobname.idx}%
+ \TD@orig@makeindex%
+}%
+\def\TD@makeglossary{%
+ \TD@printGlossary{\jobname}%
+ \TD@printGlossarySource{\jobname}{\jobname.glo}%
+ \TD@orig@makeglossary%
+}%
+\TD@switch{makeindex}%
+\TD@switch{makeglossary}%
+% \end{macrocode}
+% \subsection{Diversion of package's macros}
+% \subsubsection{Package graphics}
+% \begin{macrocode}
+\def\TD@Gin@getbase#1{%
+ \TD@orig@Gin@getbase{#1}%
+ \ifx\Gin@ext\relax%
+ \else%
+ \TD@printFig{\Gin@base\Gin@ext}%
+ \fi%
+}%
+\def\TD@Ginclude@eps#1{%
+ \IfFileExists{#1}{%
+ \TD@orig@Ginclude@eps{#1}%
+ }{%
+ \PackageWarning{texdepends}{Figure '#1' needed\MessageBreak
+ Skipping it this time (the last one however)\MessageBreak}%
+ \TD@missingDepends%
+ \TD@printRequiredFile{#1}%
+ }%
+}%
+\def\TD@Ginclude@pdf#1{%
+ \IfFileExists{#1}{%
+ \TD@orig@Ginclude@pdf{#1}%
+ }{%
+ \PackageWarning{texdepends}{Figure '#1' needed\MessageBreak
+ Skipping it this time (the last one however)\MessageBreak}%
+ \TD@missingDepends%
+ \TD@printRequiredFile{#1}%
+ }%
+}%
+\def\TD@graphicspath#1{%
+ \TD@printGraphicspath{#1}%
+ \TD@orig@graphicspath{#1}%
+}%
+\def\TD@Gread@eps#1{%
+ \IfFileExists{#1}{%
+ %\PackageWarning{texdepends}{Gread File '#1' exists}%
+ \TD@orig@Gread@eps{#1}%
+ }{%
+ \PackageWarning{texdepends}{No '#1' file \MessageBreak
+ using 1 for graphic dimensions}%
+ \setbox\@tempboxa\hbox{\relax}%
+ \def\Gin@llx{1}\let\Gin@lly\Gin@llx
+ \Gin@defaultbp\Gin@urx{\wd\@tempboxa}%
+ \Gin@defaultbp\Gin@ury{\ht\@tempboxa}%
+ }%
+}%
+\def\TD@Gread@pdf#1{%
+ \IfFileExists{#1}{%
+ %\PackageWarning{texdepends}{Gread File '#1' exists}%
+ \TD@orig@Gread@pdf{#1}%
+ }{%
+ \PackageWarning{texdepends}{No '#1' file \MessageBreak
+ using 1 for graphic dimensions}%
+ \setbox\@tempboxa\hbox{\relax}%
+ \def\Gin@llx{1}\let\Gin@lly\Gin@llx
+ \Gin@defaultbp\Gin@urx{\wd\@tempboxa}%
+ \Gin@defaultbp\Gin@ury{\ht\@tempboxa}%
+ }%
+}%
+\TD@PackagePostDivert{graphics}{%
+ \TD@switch{graphicspath}%
+ \TD@docswitch{Gin@getbase}%
+ \TD@docswitch{Ginclude@eps}%
+ \TD@docswitch{Ginclude@pdf}%
+ \TD@docswitch{Gread@eps}%
+ \TD@docswitch{Gread@pdf}%
+}%
+% \end{macrocode}
+% \subsubsection{Package figlatex}
+% \begin{macrocode}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% We do not want to fail when trying to load a missing subfig.
+% \@Ginclude@rawtex
+\def\TD@FL@includerawtexgraphics[#1]#2{%
+ \IfFileExists{#2}{%
+ \TD@orig@FL@includerawtexgraphics[#1]{#2}%
+ }{%
+ \PackageWarning{texdepends}{Figure '#2' needed\MessageBreak
+ Skipping it this time (the last one however)\MessageBreak}%
+ \TD@missingDepends%
+ \TD@printRequiredFile{#2}%
+ }%
+}%
+
+\def\TD@Ginclude@rawtex#1{%
+ \IfFileExists{#1}{%
+ \TD@orig@Ginclude@rawtex{#1}%
+ }{%
+ \PackageWarning{texdepends}{Figure '#1' needed\MessageBreak
+ Skipping it this time (the last one however)\MessageBreak}%
+ \TD@missingDepends%
+ \TD@printRequiredFile{#1}%
+ }%
+}%
+
+% \@Ginclude@figtex
+\def\TD@Ginclude@figtex#1{%
+ \IfFileExists{#1}{%
+ %\PackageWarning{texdepends}{Ginclude File '#1' exists}%
+ \TD@orig@Ginclude@figtex{#1}%
+ }{%
+ \ifthenelse{\isundefined{\FL@subfig@mainfigname}}{%
+ \PackageWarning{texdepends}{Figure '#1' needed\MessageBreak
+ Skipping it this time (the last one however)\MessageBreak}%
+ }{%
+ \PackageWarning{texdepends}{SubFigure '#1' from
+ \FL@subfig@mainfigname needed\MessageBreak
+ Skipping it this time (the last one however)\MessageBreak}%
+ }
+ \TD@missingDepends%
+ \TD@printRequiredFile{#1}%
+ }%
+}%
+% \@Ginclude@svgtex
+\def\TD@Ginclude@svgtex#1{%
+ \IfFileExists{#1}{%
+ %\PackageWarning{texdepends}{Ginclude File '#1' exists}%
+ \TD@orig@Ginclude@svgtex{#1}%
+ }{%
+ \ifthenelse{\isundefined{\FL@subfig@mainfigname}}{%
+ \PackageWarning{texdepends}{Figure '#1' needed\MessageBreak
+ Skipping it this time (the last one however)\MessageBreak}%
+ }{%
+ \PackageWarning{texdepends}{SubFigure '#1' from
+ \FL@subfig@mainfigname needed\MessageBreak
+ Skipping it this time (the last one however)\MessageBreak}%
+ }
+ \TD@missingDepends%
+ \TD@printRequiredFile{#1}%
+ }%
+}%
+
+
+% \@Gread@figtex
+\def\TD@Gread@figtex#1{%
+ \IfFileExists{#1}{%
+ %\PackageWarning{texdepends}{Gread File '#1' exists}%
+ \TD@orig@Gread@figtex{#1}%
+ }{%
+ \PackageWarning{texdepends}{No '#1' file \MessageBreak
+ using 1 for graphic dimensions}%
+ \setbox\@tempboxa\hbox{\relax}%
+ \def\Gin@llx{1}\let\Gin@lly\Gin@llx
+ \Gin@defaultbp\Gin@urx{\wd\@tempboxa}%
+ \Gin@defaultbp\Gin@ury{\ht\@tempboxa}%
+ }%
+}%
+
+% \@Gread@svgtex
+\def\TD@Gread@svgtex#1{%
+ \IfFileExists{#1}{%
+ %\PackageWarning{texdepends}{Gread File '#1' exists}%
+ \TD@orig@Gread@svgtex{#1}%
+ }{%
+ \PackageWarning{texdepends}{No '#1' file \MessageBreak
+ using 1 for graphic dimensions}%
+ \setbox\@tempboxa\hbox{\relax}%
+ \def\Gin@llx{1}\let\Gin@lly\Gin@llx
+ \Gin@defaultbp\Gin@urx{\wd\@tempboxa}%
+ \Gin@defaultbp\Gin@ury{\ht\@tempboxa}%
+ }%
+}%
+% \FL@subfig@check
+\def\TD@FL@subfig@check#1{%
+ \TD@printRequiredFile{#1}%
+ \TD@printSubfig{#1}%
+}%
+%
+\TD@PackagePostDivert{figlatex}{%
+ \TD@docswitch{FL@includerawtexgraphics}%
+ \TD@docswitch{Ginclude@rawtex}%
+ \TD@docswitch{Ginclude@figtex}%
+ \TD@docswitch{Ginclude@svgtex}%
+ \TD@docswitch{Gread@figtex}%
+ \TD@docswitch{Gread@svgtex}%
+ \TD@docswitch{FL@subfig@check}%
+}%
+% \end{macrocode}
+% \subsubsection{Package doc}
+% \begin{macrocode}
+\def\TD@PrintIndex{%
+ \TD@printIndexStyle{\jobname}{gind.ist}
+ \TD@printIndexTarget{\jobname}{\jobname.ind}
+ \TD@orig@PrintIndex%
+}%
+\def\TD@PrintChanges{%
+ \TD@printGlossaryStyle{\jobname}{gglo.ist}
+ \TD@printGlossaryTarget{\jobname}{\jobname.gls}
+ \TD@orig@PrintChanges%
+}%
+\TD@PackagePostDivert{doc}{%
+ \TD@docswitch{PrintIndex}%
+ \TD@docswitch{PrintChanges}%
+}%
+% \end{macrocode}
+% \subsubsection{Package index}
+% \begin{macrocode}
+\def\TD@def@index#1#2#3#4{%
+ \TD@printIndex{#2}%
+ \TD@printIndexSource{#2}{\jobname.#3}%
+ \TD@printIndexTarget{#2}{\jobname.#4}
+ \TD@orig@def@index{#1}{#2}{#3}{#4}%
+}%
+\TD@PackagePostDivert{index}{%
+ \TD@switch{def@index}%
+}%
+% \end{macrocode}
+% \subsubsection{Package makeidx}
+% \begin{macrocode}
+\def\TD@printindex{%
+ \TD@printIndexTarget{\jobname}{\jobname.ind}
+ \TD@orig@printindex%
+}%
+\TD@PackagePostDivert{makeidx}{%
+ \TD@docswitch{printindex}%
+}%
+% \end{macrocode}
+% \subsubsection{Package nomencl}
+% We divert |makeglossary| again after loading this package as its
+% redefines this macro (loosing our divertion). We also setup the
+% glossary style for this package.
+% \begin{macrocode}
+\def\TD@printglossary{%
+ \TD@printGlossaryTarget{\jobname}{\jobname.gls}
+ \TD@orig@printglossary%
+}%
+\TD@PackagePostDivert{nomencl}{%
+ \TD@docswitch{printglossary}%
+ \TD@switch{makeglossary}%
+ \TD@printGlossaryStyle{\jobname}{nomencl.ist}
+}%
+% \end{macrocode}
+% \subsubsection{Package bibtopic}
+% \begin{macrocode}
+% For the bibtopic package
+\def\TD@btSect{%
+ \@ifnextchar[{\TD@btSect@opt}{\TD@btSect@noopt}}
+\def\TD@btSect@opt[#1]#2{%
+ \TD@bibli@files{#2}%
+ \TD@bibli@style{#1}%
+ \TD@orig@btSect[#1]{#2}}
+\def\TD@btSect@noopt#1{%
+ \TD@bibli@files{#1}%
+ \TD@orig@btSect{#1}}
+
+\def\TD@@bt@write@auxfile{%
+ \TD@printBblfile{\thebtauxfile}%
+ \TD@orig@@bt@write@auxfile%
+}%
+\TD@PackagePostDivert{bibtopic}{%
+ \global\let\TD@bibli@bbl\relax%
+ \global\let\TD@biblio@rules@package\TD@biblio@rules@package@bibtopic%
+ \TD@switch{@bt@write@auxfile}%
+ \TD@printOut{btbbl.aux}%
+ \TD@printRebuildRule{bibtopic}%
+ \TD@docswitch{btSect}%
+}%
+% \end{macrocode}
+% \subsubsection{Package comment}
+% \begin{macrocode}
+% For the comment package, the |comment.cut| file must not be used as
+% a dependency: it is read and written several times during a compilation.
+\TD@PackagePostDivert{comment}{%
+ \TD@printNoDependsFile{comment.cut}%
+}%
+% \end{macrocode}
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+% \Finale
+\endinput