%%
%% This is file `mylatexformat.ltx',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% mylatexformat.dtx  (with options: `package')
%% 
%% This is a generated file.
%% 
%% mylatexformat : 2010/04/30 v1.0 - Use mylatexformat.ltx to make a format based on the preamble of any LaTeX file
%% 
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either
%% version 1.3 of this license or (at your option) any later
%% version. The latest version of this license is in
%%    http://www.latex-project.org/lppl.txt
%% 
%% This work consists of the main source file mylatexformat.dtx
%% and the derived files
%%    mylatexformat.ltx, mylatexformat.pdf, mylatexformat.ins
%% 
%% mylatexformat - Use mylatexformat.ltx to make a format based on the preamble of any LaTeX file
%% Copyright (C) 2010 by Florent Chervet <florent.chervet@free.fr>
%% 
%%% _____________________________________________________________________
%%%                           mylatexformat.ltx
%%%                           ^^^^^^^^^^^^^^^^^
%%% From an original idea by David Carlisle - mylatex.ltx 1994/09/27
%%% © lppl 2010 - F Chervet - 2010/04/25
%%% _____________________________________________________________________
%%%
%%% Use this file to make a format based on the preamble of any LaTeX
%%% file.
%%%
%%% The format is made from the very beginning of the file up to either:
%%%   i) the command : \endofdump
%%%                    placed in the preamble
%%%  ii) the command : \csname endofdump\endcsname
%%%                    placed in the preamble
%%% iii) \begin{document}
%%%                    if \endofdump nor \csname endofdump\endcsname
%%%                    haven't been found in the preamble.
%%%
%%% A format helps to speed up compilations, packages which have been
%%% dumped in the format are loaded at very high speed.
%%% --------------------------------------------------------------------
%%% There are no restrictions on the distribution or modification of
%%% this file, except that other people should not attempt to alter
%%% the master copy on the ctan archives.
%%%
%%% Making the format --------------------------------------------------
%%% ^^^^^^^^^^^^^^^^^                                       USING MikTeX
%%% *  With preloaded pdflatex format (pdf output) :
%%%    etex -initialize [opts] "&pdflatex" mylatexformat.ltx """abc.tex"""
%%%    => compile your document using :
%%%            pdflatex
%%%         or texify --tex-option=-output-format=pdf
%%%
%%% *  With preloaded latex format (dvi output) :
%%%    etex -initialize [opts] "&latex" mylatexformat.ltx """abc.tex"""
%%%    => compile your document using
%%%            latex
%%%         or texify --tex-option=-output-format=dvi
%%%
%%% * With preloaded format xelatex (pdf output) :
%%%    xetex -initialize [opts] "&xelatex" mylatexformat.ltx """abc.tex"""
%%%    => compile your document using xelatex
%%%
%%% NOTA BENE:    Please, notice the 3 quotes !
%%% ^^^^^^^^^^
%%%
%%% In fact, 3 quotes are necessary only if you "file name.tex" contains a space !
%%%
%%% -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
%%% Exemple of a command line for making format using pdfTeX :
%%%
%%%   etex -initialize -interaction=nonstopmode
%%%                    -save-size=20000 -stack-size=20000
%%%                    -jobname="Mon Beau Format Perso"
%%%                    "&pdflatex" mylatexformat.ltx "Mon Fichier TeX.tex"
%%%
%%%   "Mon Beau Format Perso.fmt" (en Français dans le texte) will be created
%%%   (or overwritten) in the current working directory.
%%%
%%% Using the format ---------------------------------------------------
%%% ^^^^^^^^^^^^^^^^^                                       USING MikTeX
%%% Add the format to the very first line of your LaTeX file :
%%% --> first line :       %&"format file name"
%%% without the .fmt extension.
%%% [You may use the option :    -dont-parse-first-line option
%%%  to avoid loading the format]
%%% --------------------------------------------------------------------
%% ____________________________________________________________________
%% The following informations come from mylatex.ltx from David Carlisle:
%% Given a LaTeX file `abc.tex', use initex as follows:
%%
%% initex &latex  mylatexformat.ltx abc      (Generic TeX)
%% initex \&latex mylatexformat.ltx abc      (unix and other TeX's)
%% tex /i &latex  mylatexformat.ltx abc      (emtex)
%%
%% If you are on a Mac or using some shell that makes it inconvenient
%% to use a command line such as the above examples then you may
%% make a file `mylatex.tex' with the single line
%% \input mylatex.ltx abc
%% and then pass the file mylatex.tex to your (ini)tex shell to produce
%% the format, ie something equivalent to initex &latex mylatex.tex.
%%
%% If you are using OzTeX, see the separate instructions below.
%%
%% This should make a format file mylatex.fmt which you can then use
%% as follows
%%
%% Using the new format
%% ^^^^^^^^^^^^^^^^^^^^
%%
%% tex  &mylatex abc          (generic TeX)
%% virtex \&mylatex abc       (Unix TeX)
%%
%% This will process your document, abc.tex, just as LaTeX does, but
%% quicker as the contents of the preamble will be stored in the
%% format file and will not need to be run each time.
%%
%% If (vir)tex fails to find your mylatex.fmt then it is not searching
%% in the current directory, either modify your TEXFORMATS path (or
%% equivalent) to search `.' or (on unix/dos) use   ./  as in:
%% virtex \&./mylatex abc
%%
%% Making and using the format with OzTeX
%% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
%%
%% Given a LaTeX file `abc.tex', do this: select `TeX...' from OzTeX's
%% TeX menu, and go to the folder containing the file `abc.tex' as if you
%% were selecting the file `abc.tex'. Then hit the Cancel button - this
%% procedure sets OzTeX's working folder to the one containing abc.tex.
%% Next, select iniTeX from the TeX menu, and type:
%%
%% &latex mylatex.ltx abc
%%
%% This should make a format file mylatex.fmt which you can save in the
%% same folder as the file you're working on.
%%
%% To use the new format, put this at the very start of the very first
%% line of your document:
%%
%% %&mylatex
%%
%% Further Notes
%%
%% The file abc.tex must contain a line *just* with
%% \begin{document}
%% Everything up to (but not including) the \begin{document} will
%% be saved in the format and not executed in subsequent runs.
%%
%% If you are modifying the document (or working on a similar document)
%% you may wish to add new commands to your document preamble.
%% The `mylatex' format normally skips the whole preamble (believing
%% it to be pre-loaded) and so such new commands do not take effect.
%% You could re-make the format, preloading the new preamble, but that
%% might be inconvenient to do every time, and so an alternative scheme
%% has been introduced.
%% If the preamble contains a comment   mylatex  (ie a line just
%% containing a % white space and the word mylatex) then the mylatex
%% format will start reading the preable at that point so any new
%% commands can be placed after such a comment and they will be
%% executed.
%% --------------------------------------------------------------------
%%\RequirePackage{etex}% RequirePackage may be used before the class
%% In principle \openout stream= filename need not be space terminated,
%% and need not be immediate, but this covers \makeindex \makeglossary
%% and index package's \newindex which are all the cases of \openout
%% that occur before \begin{document} that I could see.
%% Thanks to Ross Moore for pointing out \AtBeginDocument is too late
%% eg changebar package *closes* the stream in \AtBeginDocument, so need
%% to make sure it is opened before that. Make a special purpose hook.
%%
%% Save the original definition.
\makeatletter
\let\etex@primitive@openout\openout
\def\openout#1 {\g@addto@macro\MYLATEXopens{\immediate\etex@primitive@openout#1 }}
\let\MYLATEXopens\@empty
%% \begin is overloaded in order to stop \dump at begin document
%% if the macro \endofdump is not given somewhere in the preamble.
%% Rem: it is NOT POSSIBLE to redefine \document, for the macro
%%      \document is changed or patched by some classes or packages
%%      (auxhook, etoolbox etc.)
\let\MYLATEX@latex@begin\begin
\def\begin#1{%
   \expandafter\ifx\csname#1\endcsname\document
        \expandafter\expandafter\expandafter\endofdump\expandafter\@gobble
   \else\expandafter\MYLATEX@latex@begin
   \fi{#1}}
%% The version of \document to use on the initex run.
%% Just preloads some fonts, puts back \document and \openout,
%% sets up the banner to display the file list of files preloaded,
%% then sets up some special catcodes so the preamble will be
%% skipped on normal runs with the new format.
\def\endofdump{%
%% Force some font preloading.
 {\setbox\z@\hbox{%
      $$% math (not bold, some setups don't have \boldmath)
      \normalfont% normal
      {\bfseries\itshape}{\itshape}\ttfamily\sffamily
      \ifdefined\large\large\fi
      \ifdefined\Large\Large\fi
      \ifdefined\LARGE\LARGE\fi
      \ifdefined\Huge\Huge\fi
      \ifdefined\small\small\fi
      \ifdefined\footnotesize\footnotesize\fi
      \ifdefined\tiny\tiny\fi
   }}%
   \let\openout\etex@primitive@openout
   \let\etex@primitive@openout\@undefined
   \let\begin\MYLATEX@latex@begin
   \let\MYLATEX@latex@begin\@undefined
   \makeatother
   \everyjob\expandafter{\the\everyjob
      \begingroup
         \listfiles
         \expandafter\MYLATEXcustomised\@dofilelist
      \endgroup}%
   \catcode`\\=13\relax%
   \let\endofdump\relax
   \dump
 }
\edef\MYLATEXcustomised#1#2#3\typeout#4{%
   \noexpand\typeout{==============================================================================}%
   \noexpand\typeout{JOB NAME\noexpand\@spaces\noexpand\@spaces\noexpand\space\noexpand\space:%
                               \string"\noexpand\jobname\string"}%
   \noexpand\typeout{CUSTOMISED FORMAT :\string"\jobname\string"}%
   \noexpand\typeout{PRELOADED FILES:}%
   #3%
   \noexpand\typeout{==============================================================================}%
   \noexpand\typeout{(mylatexformat)Info: starting reading document%
                                \string"\noexpand\jobname\string"}%
}
%% While the preamble is being skipped (inside a group)
%% the EOL is active and defined to grab each line and
%% inspect it looking for :
%%        \endofdump
%% or     \csname endofdump\endcsname
%% or     \begin{document}.
%%
%% The special catcodes required are not enabled until after the
%% first TeX command in the file, so as to avoid problems with
%% the special processing that TeX does on the first line, choosing
%% the format, or the file name etc.
{% Entering simple groupe (level 1) => skip the preamble
\catcode`\^^M=\active%
  \catcode`\/=0 %
  /catcode`\\=13 %
  /catcode`/& 8 %
  /gdef\{/catcode`/\=0 /catcode`/^^M=13 ^^M}% /catcode`/%=9 ^^M}%
%%
  /long/gdef^^M{/begingroup%
      /long/def/MYLATEX@endofdump##1/endofdump##2##3&##4##5##6/MYLATEX{##5}%
      /long/def/MYLATEX@endofdump@cs##1/csname endofdump/endcsname##2##3&##4##5##6/MYLATEX{##5}%
      /long/def/MYLATEX@document ##1document##2##3&##4##5##6/MYLATEX{##5}%
      /long/def/MYLATEX@begindocument##1/begin##2##3/MYLATEX##4{%
         /MYLATEX@document ##2document&&{/MYLATEX@start1{##4}}{^^M}/MYLATEX}%
      /long/def/MYLATEX@start##1##2{%
         /typeout{(mylatexformat)/@spaces/space/on@line./space(%
                  /ifcase##1 /string/endofdump/else/string/begin{document}/fi)}%
         /typeout{==============================================================================}%
         /endgroup%
         /catcode`/^^M=5/relax%
         /let^^M/par%
         /MYLATEXopens##2}%
      /long/gdef^^M##1^^M{%
         /MYLATEX@endofdump##1/endofdump&&%
            {/MYLATEX@start0{##1}}%
            {/MYLATEX@endofdump@cs##1/csname endofdump/endcsname&&%
               {/MYLATEX@start0{##1}}%
               {/MYLATEX@begindocument##1/begin/relax/MYLATEX{##1}}%
               /MYLATEX}%
            /MYLATEX}%
      ^^M}%
}% Leaving simple groupe (level 1) => start reading document
%% Trick lookahead to allow mylatex.ltx and the document filename to be
%% given on the same command line. (initex &latex mylatex.ltx {abc.tex})
\expandafter\input\endinput%
\endinput
%%
%% End of file `mylatexformat.ltx'.
