% +--------------------------------------------------+ % | Documentation in clear text follows | % +--------------------------------------------------+ % %% Copyright (C) 2009 Javier Bezos %% All Rights Reserved %% http://www.tex-tipografia.com %% %% 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 %% and version 1.3 or later is part of all distributions of LaTeX %% version 2003/12/01 or later. %% %% This work has the LPPL maintenance status "maintained". %% %% This Current Maintainer of this work is Javier Bezos. %% %% This work consists of this file. % % Usage % ~~~~~ % % This is a tentative package aiming to provide a different approach % for multidocument works (mainly, books with a document per chapter). % Unlike the \include mechanism, every subdocument is a complete LaTeX % document and can be typeset separately. What the package does is % sharing the aux files. It's still an alpha version, and no attempt % has been done yet to make it to work with, say, hyperref. % % This approach has the following advantages: % 1) Packages can be loaded just when a part requires them. % 2) Generated pdf/dvi/ps files are kept. % % You need a driver tex file containing a \subdocuments command % listing the files. With an optional argument you can set % its behaviour: % % \subdocuments[clear=double]{file1, file2, file3} % % The option clear=double adds an empty page at the end to give a even % number of pages. clear=single doesn't and it's the default. Spaces % and new lines before and after commas are ignored, as well as empty % items. It relies on the keyval package, so names containing = must % be given within braces. % % This file can be used as a shared preample, with common settings % for all the documents. % % Documents must have the folowing line: % % \usepackage[master]{subdocs} % % where master is the name of the file described above. % % Since every subdocument reads all the aux files, \tableofcontents % may be used where desired. % % Code % ~~~~ \ProvidesPackage{subdocs}[2009/06/12 v0.1 Subdocuments] \RequirePackage{keyval} % Los dos siguientes son lo encargados de hacer lo que % normalmente hace \include. \AtBeginDocument{% \if@filesw \immediate\write\@auxout{\noexpand\sdoc@readaux}% \fi} % At end of document we write the counters using writeckpt % but with \@partaux redirected to \@auxout. Like \include % there is a \clearpage \AtEndDocument{% \sdoc@clear \let\@partaux\@auxout \@writeckpt{\jobname}} \def\@wckptelt#1{% \immediate\write\@partaux{% \string\sdoc@setcounter{#1}{\the\@nameuse{c@#1}}}} \def\sdoc@setcounter#1{% \@ifundefined{c@#1}% {\@gobble}% {\setcounter{#1}}} % Optional arguments \def\sdoc@opt@clearsingle{\let\sdoc@clear\clearpage} \def\sdoc@opt@cleardouble{\let\sdoc@clear\cleardoublepage} \sdoc@opt@clearsingle \define@key{sdoc@options}{clear}{\@nameuse{sdoc@opt@clear#1}} % \let\sdoc@loadaux\@empty \newcommand\subdocuments[2][]{% \let\sdoc@save@kverrx\KV@errx \def\KV@errx##1{% \@tempa contains the file name {\let\sdoc@elt\relax % local \edef\sdoc@a{\expandafter\strip@prefix\meaning\@tempa}% \protected@xdef\sdoc@loadaux{\sdoc@loadaux\sdoc@elt{\sdoc@a}}}}% \setkeys{sdoc@files}{#2}% \let\KV@errx\sdoc@save@kverrx \setkeys{sdoc@options}{#1}} % A "recursive" call. When a \jobname.aux file is % read the first thing is (or should be) \sdoc@readaux. % It reads all the aux files, and exits from the current % aux without further reading because it is already read. % This requires a file could \input itself, but, does % that work in all distributions? \def\sdoc@elt#1{% \InputIfFileExists{#1.aux}{}% {\PackageWarningNoLine{subdocs}{No file #1.aux -- Data may be wrong}}% \sdoc@setcp{#1}}% \def\sdoc@readaux{% \global\let\sdoc@readaux\relax \sdoc@loadaux \global\let\sdoc@readaux\sdoc@readaux@x \endinput} \let\sdoc@readaux@x\sdoc@readaux \def\sdoc@setcp#1{% \def\sdoc@a{#1}\edef\sdoc@b{\jobname}% \ifx\sdoc@a\sdoc@b \PackageInfo{subdocs}{Ignoring counters from #1 on, }% \global\let\sdoc@setcp\@gobble \else \csname cp@#1\endcsname \fi} % The master file name must be saved because it may contain % \usepackage's, not allowed before \ProcessOptions. \DeclareOption*{\edef\sdoc@a{\CurrentOption}} \ProcessOptions \InputIfFileExists{\sdoc@a}{}{}% \endinput