%% %% 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/06/30 v2.1 - 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 %% %%% _____________________________________________________________________ %%% mylatexformat.ltx %%% ^^^^^^^^^^^^^^^^^ %%% From an original idea by David Carlisle - mylatex.ltx 1994/09/27 %%% © lppl 2010 - F Chervet - 2010/08/09 %%% _____________________________________________________________________ %%% %%% 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 \let\ltx@listfiles\listfiles \def\openout#1 {\g@addto@macro\MYLATEX@opens{\immediate\openout#1 }} \def\MYLATEX@opens{% \let\openout\etex@primitive@openout \let\etex@primitive@openout\@undefined }% \MYLATEX@opens %% \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@ltx@begin\begin \def\begin#1{\csname @\expandafter\ifx\csname#1\endcsname\document first\else second\fi oftwo\endcsname \endofdump {\MYLATEX@ltx@begin{#1}}% }% \begin %% 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% just in case - normally not necessary \let\begin\MYLATEX@ltx@begin \let\MYLATEX@ltx@begin\@undefined \makeatother \everyjob\expandafter{\the\everyjob \begingroup \listfiles\let\listfiles\ltx@listfiles \expandafter\MYLATEXcustomised\@dofilelist \endgroup \MYLATEX@scan@preamble }% \let\endofdump\relax \dump } %% Banner for \everyjob. \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"}% }% \MYLATEXcustomised %% 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`\& 8 % \long\gdef\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% \MYLATEX@opens#2% }% \MYLATEX@start \long\gdef\MYLATEX@scan@preamble{\catcode`\^^M=13\relax% \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\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'.