summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/childdoc
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 /macros/latex/contrib/childdoc
Initial commit
Diffstat (limited to 'macros/latex/contrib/childdoc')
-rw-r--r--macros/latex/contrib/childdoc/README.txt41
-rw-r--r--macros/latex/contrib/childdoc/childdoc.dtx1385
-rw-r--r--macros/latex/contrib/childdoc/childdoc.ins46
-rw-r--r--macros/latex/contrib/childdoc/childdoc.pdfbin0 -> 269717 bytes
4 files changed, 1472 insertions, 0 deletions
diff --git a/macros/latex/contrib/childdoc/README.txt b/macros/latex/contrib/childdoc/README.txt
new file mode 100644
index 0000000000..2b55c303f8
--- /dev/null
+++ b/macros/latex/contrib/childdoc/README.txt
@@ -0,0 +1,41 @@
+childdoc v2.0
+Copyright 2017-2018 Niklas Beisert
+
+childdoc is a LaTeX2e package that enables the direct compilation
+of document sections included by \include to individual files.
+
+The package consists of the files
+
+ README.txt readme file
+ childdoc.ins installation file
+ childdoc.dtx source file
+ childdoc.def package file
+ cdocsamp.tex sample main file
+ cdocsch1.tex sample include file
+ cdocsch2.tex sample include file
+ cdocspt3.tex sample part file
+ cdocspt4.tex sample part file
+ cdocsdrf.tex sample forwarding file
+ cdocsch1.tex sample forwarding file
+ cdocsch2.tex sample forwarding file
+ chilcdoc.pdf manual
+
+The distribution consists of the files
+README.txt, childdoc.ins and childdoc.dtx.
+
+Run "(pdf)latex childdoc.dtx" to compile the manual childdoc.pdf.
+
+Run "latex childdoc.ins" to create the definitions file childdoc.def
+and the sample consisting of cdocsamp.tex,
+cdocsch1.tex, cdocsch2.tex, cdocspt3.tex, cdocspt4.tex,
+cdocsdrf.tex, cdocsfn1.tex, cdocsfn2.tex.
+Copy the file childdoc.def to an appropriate directory of your LaTeX
+distribution, e.g. texmf-root/tex/latex/childdoc.
+
+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 2005/12/01 or later.
diff --git a/macros/latex/contrib/childdoc/childdoc.dtx b/macros/latex/contrib/childdoc/childdoc.dtx
new file mode 100644
index 0000000000..1d4c1c8715
--- /dev/null
+++ b/macros/latex/contrib/childdoc/childdoc.dtx
@@ -0,0 +1,1385 @@
+% \iffalse
+%
+% childdoc.dtx Copyright (C) 2017-2018 Niklas Beisert
+%
+% 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 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Niklas Beisert.
+%
+% This work consists of the files childdoc.dtx and childdoc.ins
+% and the derived files childdoc.def and cdocsamp.tex with
+% cdocsch1.tex, cdocsch2.tex, cdocsdrf.tex, cdocsfn1.tex, cdocsfn2.tex.
+%
+%<package>\ifdefined\childdocmain\endinput\fi
+%<package>\ProvidesFile{childdoc.def}[2018/12/30 v2.0 child document driver]
+%<samplemain>\ProvidesFile{cdocsamp.tex}[2018/12/30 v2.0 sample for childdoc]
+%<*driver>
+%\ProvidesFile{childdoc.drv}[2018/12/30 v2.0 childdoc reference manual file]
+\PassOptionsToClass{10pt,a4paper}{article}
+\documentclass{ltxdoc}
+
+\usepackage[margin=35mm]{geometry}
+\usepackage{hyperref}
+\usepackage{hyperxmp}
+\usepackage[usenames]{color}
+
+\hypersetup{colorlinks=true}
+\hypersetup{pdfstartview=FitH}
+\hypersetup{pdfpagemode=UseNone}
+\hypersetup{pdfsource={}}
+\hypersetup{pdflang={en-UK}}
+\hypersetup{pdfcopyright={Copyright 2017-2018 Niklas Beisert.
+ 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.}}
+\hypersetup{pdflicenseurl={http://www.latex-project.org/lppl.txt}}
+\hypersetup{pdfcontactaddress={ETH Zurich, ITP, HIT K,
+ Wolfgang-Pauli-Strasse 27}}
+\hypersetup{pdfcontactpostcode={8093}}
+\hypersetup{pdfcontactcity={Zurich}}
+\hypersetup{pdfcontactcountry={Switzerland}}
+\hypersetup{pdfcontactemail={nbeisert@itp.phys.ethz.ch}}
+\hypersetup{pdfcontacturl={http://people.phys.ethz.ch/\xmptilde nbeisert/}}
+
+\newcommand{\secref}[1]{\hyperref[#1]{section \ref*{#1}}}
+
+\parskip1ex
+\parindent0pt
+\let\olditemize\itemize
+\def\itemize{\olditemize\parskip0pt}
+
+\begin{document}
+
+\title{The \textsf{childdoc} Package}
+\hypersetup{pdftitle={The childdoc Package}}
+\author{Niklas Beisert\\[2ex]
+ Institut f\"ur Theoretische Physik\\
+ Eidgen\"ossische Technische Hochschule Z\"urich\\
+ Wolfgang-Pauli-Strasse 27, 8093 Z\"urich, Switzerland\\[1ex]
+ \href{mailto:nbeisert@itp.phys.ethz.ch}
+ {\texttt{nbeisert@itp.phys.ethz.ch}}}
+\hypersetup{pdfauthor={Niklas Beisert}}
+\hypersetup{pdfsubject={Manual for the LaTeX2e Package childdoc}}
+\date{30 December 2018, \textsf{v2.0}}
+\maketitle
+
+\begin{abstract}\noindent
+\textsf{childdoc} is a \LaTeXe{} package
+that enables the direct compilation
+of document sections included by |\include|
+to individual files.
+\end{abstract}
+
+\begingroup
+\parskip0ex
+\tableofcontents
+\endgroup
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Introduction}
+
+\LaTeX{} provides a mechanism to structure a large document (such as a book)
+into a main file and several child files (containing the chapters)
+using the |\include| command.
+This mechanism is beneficial for documents
+which span hundreds of pages in order to
+make the source file(s) more manageable.
+Moreover, compilation can be restricted to
+selected child files by means of the |\includeonly| command.
+The latter feature can be used to reduce the compilation time while editing
+(this was significantly more useful in the earlier days of \LaTeX{})
+or to generate a smaller document which is easier to navigate.
+Another application of |\includeonly| is to generate
+documents consisting of selected parts of the complete document.
+
+However, there are a few drawbacks of the plain |\include| mechanism:
+\begin{itemize}
+\item
+The child files cannot be compiled on their own,
+they can only be compiled via the main file.
+A naive editing environment
+(such as a text editor with an option
+to have the current file processed by \LaTeX)
+may require one to switch to the main file before compiling;
+attempting to compile the child file produces errors.
+\item
+The main file must be modified (each time)
+to adjust the |\includeonly| command
+to the present needs. This easily leaves the main file in a messy state.
+\item
+The generated document will always carry the filename
+of the main document. This is inconvenient if
+several child files are to be compiled and
+to be kept for distribution.
+\end{itemize}
+
+The present package provides a simple interface
+to make child files individually compilable by \LaTeX{}.
+Compiling a child file then has the same effect as compiling
+the main file with an |\includeonly| command
+to select the appropriate child.
+Moreover the generated document will carry the name of the child
+rather than the main file.
+This resolves all three above issues.
+
+This feature is meant to make the editing of books,
+thesis documents and lecture notes somewhat more convenient.
+However, the package can also be used efficiently for
+composing a series of documents (such as exercise sheets)
+which are typically distributed individually.
+It then assists the author in generating the individual documents
+(potentially in different versions)
+as well as a document containing the collected series.
+Another application is in developing style files
+or other kinds of included material
+where compilation of the style file could redirect
+to a sample or test file.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Usage}
+
+First of all, the package \textsf{childdoc} is \emph{not} a standard
+\LaTeXe{} |.sty| style file! Therefore it needs to be invoked in
+a non-standard way.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Included Files}
+\label{sec:include}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\DescribeMacro{\childdocmain}
+To use the package, add the commands
+\begin{center}
+\begin{tabular}{l}
+|\input{childdoc.def}|\\
+|\childdocmain{}|\\
+\end{tabular}
+\end{center}
+at the very top of the main \LaTeX{} file,
+in particular \emph{before} the |\documentclass| statement!
+The argument of |\childdocmain| should be left empty
+(but it must be present).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\DescribeMacro{\childdocof}
+Furthermore, add the commands
+\begin{center}
+\begin{tabular}{l}
+|\input{childdoc.def}|\\
+|\childdocof{|\textit{main}|}|\\
+\end{tabular}
+\end{center}
+at the top of every child file \textit{child}
+which is included by |\include{|\textit{child}|}|
+from within the main file
+(or at least for those files to be compiled individually).
+The argument \textit{main} must be the filename of the main file.
+
+There are a couple of
+considerations in setting up the main and child documents:
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\paragraph{Restrictions.}
+
+Please note the following restrictions:
+\begin{itemize}
+\item
+|\childdocmain| must be called with one argument \textit{main}
+to ensure compatibility with earlier version of the package.
+It must either be empty (|\childdocmain{}|)
+or precisely match the filename of the main file in which it is specified.
+See \secref{sec:detection} for further information.
+\item
+The filename \textit{main} must be specified without the |.tex| extension.
+\item
+The filename \textit{main} is case sensitive
+(even in case-insensitive file systems)
+due to internal string comparison.
+\item
+The argument \textit{main} should be fully expanded, it cannot be a macro.
+\item
+Subdirectories and special characters should be avoided in filenames.
+\item
+The command |\childdocmain{|\textit{main}|}| must be followed by a whitespace.
+It should not be followed immediately by another command
+or by a comment mark `|%|'.
+This is because the \TeX{} parser reads the token immediately following
+the argument of |\childdocmain| and puts it
+at the beginning of every child section;
+however, a white\-space is ignored.
+\end{itemize}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\paragraph{Content of Main File.}
+
+It is advisable to place all content in the child files included by |\include|.
+Any output contained in the main file will appear in all child documents
+unless suppressed manually;
+it cannot be suppressed automatically by the |\includeonly| directive
+and thus should normally be avoided.
+A method to include some content in the main file
+by means of conditional processing is described in \secref{sec:conditional}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\paragraph{Page Numbering.}
+
+When only a part of the document is compiled,
+the appropriate numbering of pages
+(as well as other status parameters)
+is determined from the |.aux| files.
+The latter contain information from previous passes.
+However this information needs to propagate through
+all intermediate child documents.
+Therefore the page numbering in child documents may well
+be inconsistent until the complete document is compiled at least once.
+
+A useful (if unconventional) way to always ensure a consistent
+page numbering is to restart the numbering in each child document
+and denote the pages by `\textit{child}|.|\textit{page}'
+where \textit{child} represents the chapter/section number of the child file.
+This can be achieved by the command
+|\numberwithin{page}{|\textit{child}|}|
+of the \textsf{amsmath} package
+where \textit{child} can be |chapter| or |section|
+depending on the chosen structuring.
+Alternatively, one can modify the macro |\thepage| appropriately
+and reset the counter |page| at the start of each child file.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Conditional Processing}
+\label{sec:conditional}
+
+The package provides a mechanism to compile different versions
+of a document. To customise the versions further some conditional processing
+can come in handy to distinguish which version is being compiled.
+The package provides two macros to describe the compilation context:
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\DescribeMacro{\ifchilddoc}
+The conditional |\ifchilddoc| distinguishes between the compilation of
+child documents and the main document:
+%
+\begin{center}
+|\ifchilddoc |\textit{child-code}| |[|\||else |\textit{main-code}]| \||fi|
+\end{center}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\DescribeMacro{\childdocname}
+\DescribeMacro{\childdocjob}
+The macro |\childdocname| contains the filename (without extension)
+of the main or child file being processed.
+Note that |\childdocjob| will always contain the name of the main file.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\paragraph{Title Page.}
+
+Conditional processing can be used to include a title or banner page
+in the main document when proper precautions are taken.
+Importantly, the code in the main file should ensure that the page counter
+(as well as other status parameters which are stored in the |.aux| files)
+takes the same value after the conditional processing.
+Otherwise the page numbers may take divergent values
+depending on which part is compiled.
+
+For example, a title page could be declared by:
+%
+\begin{center}
+\begin{tabular}{l}
+|\ifchilddoc\||else|\\
+|\addtocounter{page}{-1}|\\
+\textit{code for title page}\\
+|\newpage|\\
+|\||fi|
+\end{tabular}
+\end{center}
+%
+A banner page for the child documents can be generated by:
+%
+\begin{center}
+\begin{tabular}{l}
+|\ifchilddoc|\\
+|\addtocounter{page}{-1}|\\
+\textit{code for banner page}\\
+|\newpage|\\
+|\||fi|
+\end{tabular}
+\end{center}
+%
+Here one could write a message such as:
+\begin{center}
+|This is the part \childdocname{} of \childdocjob{}.|
+\end{center}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Flags}
+\label{sec:flags}
+
+The package makes it easy to generate different versions
+of the main or child documents.
+To this end compilation flags can be defined
+and assigned different default values.
+They will be particularly useful in conjunction
+with the forwarding mechanism described in \secref{sec:forward}.
+
+For example, it may be useful to have a flag |\version|
+which can be set to |draft| or |final|.
+The document source will contain some conditional code
+depending on the value of |\version|.
+Suppose further, the flag should default to |final| for the main file
+and to |draft| for child files
+which is a natural assignment for editing the document.
+This is achieved by placing the following code
+in the preamble of the main document
+(below the |\childdocmain| directive):
+%
+\begin{center}
+\begin{tabular}{l}
+|\ifchilddoc|\\
+|\providecommand{\version}{draft}|\\
+|\||else|\\
+|\providecommand{\version}{final}|\\
+|\||fi|
+\end{tabular}
+\end{center}
+%
+The definition by |\providecommand| makes sure
+that previous definitions are not overwritten.
+Further statements |\providecommand{\version}{...}|
+can thus be added before the above code to override it.
+
+For the main file, one might add a line
+(between |\childdocmain| and the above block)
+%
+\begin{center}
+|%\ifchilddoc\||else\providecommand{\version}{draft}\||fi|
+\end{center}
+%
+which can be uncommented to produce a draft version.
+Likewise one can add a line to the very top of a child file
+(above the |\childdocof{|\textit{main}|}| directive)
+%
+\begin{center}
+|%\providecommand{\version}{final}|
+\end{center}
+%
+which can be uncommented to produce the final version of this child document.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Forwarding}
+\label{sec:forward}
+
+Different versions of the main or child documents
+using compilation flags as described in \secref{sec:flags}
+can be (permanently) stored in different files
+for convenient compilation, viewing and distribution.
+To this end, the package defines a command
+to pass on compilation to a different file:
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\DescribeMacro{\childdocforward}
+The command |\childdocforward| redirects processing to
+another source file:
+%
+\begin{center}
+\begin{tabular}{l}
+|\input{childdoc.def}|\\
+|\childdocforward[|\textit{main}|]{|\textit{dest}|}|\\
+\end{tabular}
+\end{center}
+%
+The argument \textit{dest} is the destination file
+(without extension).
+It should be the main file or one of the child files.
+Note that further \textsf{childdoc} directives
+such as |\childdocof| and |\childdocforward|
+in the indicated file will be processed in this form.
+The optional argument \textit{main}
+passes on directly to the main file \textit{main}
+while pretending to compile the child \textit{dest}.
+This form behaves as if \textit{dest}
+issues |\childdocof{|\textit{main}|}| right away,
+and no further \textsf{childdoc} directives will be processed.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\DescribeMacro{\...prefix}
+In the alternative form |\childdocforwardprefix|,
+%
+\begin{center}
+\begin{tabular}{l}
+|\input{childdoc.def}|\\
+|\childdocforwardprefix[|\textit{main}|]{|\textit{prefix}|}{|\textit{dest}|}|
+\end{tabular}
+\end{center}
+%
+the destination file is determined by a pattern
+depending on the current file:
+To make this work, the current file must be called
+`{\textit{prefix}\hspace{0.2em}\textit{suffix}}'
+with \textit{prefix} matching precisely the argument.
+Processing is then passed on to the file
+`{\textit{dest}\hspace{0.2em}\textit{suffix}}'.
+Surely, the same effect is achieved by
+directly specifying the
+argument `{\textit{dest}\hspace{0.2em}\textit{suffix}}'
+in the first form.
+However, that requires to set up a different file
+for each child. With the alternative form of the command
+all these files can have exactly the same content
+which simplifies setting them up and maintaining them.
+
+For example, the following file |draft.tex|
+with a compilation flag |\version| as described in \secref{sec:flags}
+compiles the main document as a draft:
+%
+\begin{center}
+\begin{tabular}{l}
+|\def\version{draft}|\\
+|\input{childdoc.def}|\\
+|\childdocforward{|\textit{main}|}|
+\end{tabular}
+\end{center}
+%
+Likewise, the following files |final|\textit{nn}|.tex|
+compile the final version of the child document
+|child|\textit{nn}|.tex|:
+%
+\begin{center}
+\begin{tabular}{l}
+|\def\version{final}|\\
+|\input{childdoc.def}|\\
+|\childdocforwardprefix{final}{child}|
+\end{tabular}
+\end{center}
+%
+
+Note that when several versions of a main file and/or of each child file
+are to be generated, it may be convenient to set up a |Makefile| or
+shell script to automatise the process.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Command Line Processing}
+\label{sec:commandline}
+
+The effect of redirection files can also be achieved by invoking
+the \LaTeX{} compiler with a more elaborate command line.
+Most conveniently this should be done as part
+of a shell script or a |Makefile|.
+
+When using \textsf{childdoc} in the main file, the following
+command lines effectively perform a redirection
+(note that depending on the shell being used,
+backslashes may have to be doubled: `|\|' $\to$ `|\\|'):
+%
+\begin{center}
+|... -jobname "|\textit{target}|" |\\|"|[\textit{flags}]%
+|\input{childdoc.def}\childdocforward[|\textit{main}|]{|\textit{dest}|}"|
+\end{center}
+%
+Here \textit{target} is the name of the output file,
+\textit{main} is the name of the main file
+and \textit{dest} is the name of the main or child file to be processed
+(all filenames without extensions).
+The optional argument \textit{main} can be omitted
+if \textit{main} matches \textit{dest}.
+Optionally, compilation \textit{flags} can be defined via |\def| commands.
+This command line makes the \TeX{} engine believe
+it is compiling the file \textit{target}
+whose content is specified as the latter parameter.
+The provided code then forwards the processing to
+\textit{main} or \textit{dest} as described in \secref{sec:forward}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Include by Input}
+\label{sec:input}
+
+Including child documents by |\include| has some restrictions by design.
+Most notably, the content of a child document always occupies
+its own set of pages; pages cannot be shared between child documents.
+Usually, this behaviour makes perfect sense
+because each child document contain an essential part of the document.
+However, in some situations it may be desirable to compose
+a document from a collection of parts
+without having mandatory page breaks between then.
+For this case, the package
+provides a mechanism to include parts
+by |\input| which can also be processed individually.
+However, by construction this mechanism
+requires manual handling of the content to be output.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\DescribeMacro{\ifchilddocmanual}
+The main file should be prepared as usual, see \secref{sec:include}.
+However, the document body must make a distinction
+between processing of an individual part and of the main document, e.g.:
+%
+\begin{center}
+\begin{tabular}{l}
+|\ifchilddocmanual|\\
+|\input{\childdocname}|\\
+|\||else|\\
+\textit{document body with }|\input{|\textit{part}|}|\\
+|\||fi|
+\end{tabular}
+\end{center}
+%
+The conditional |\ifchilddocmanual| is true whenever
+a part to be included by |\input| is being compiled,
+and the name of the part is stored in |\childdocname|.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\DescribeMacro{\childdocby}
+Each part to be included by |\input| should start with:
+%
+\begin{center}
+\begin{tabular}{l}
+|\input{childdoc.def}|\\
+|\childdocby{|\textit{main}|}|\\
+\end{tabular}
+\end{center}
+%
+The directive |\childdocby| is similar to |\childdocof|
+described in \secref{sec:include},
+but the subsequent selection of content must be done manually.
+To that end, both |\ifchilddoc| and |\ifchilddocmanual|
+will be true upon processing of a part,
+and the name of the part is stored in |\childdocname|.
+Note that |\jobname| will be set to the filename of the current part
+so that each part receives an individual |.aux| file
+that does not interfere with the |.aux| file(s) of the main document.
+This behaviour can be altered by the alternative form
+|\childdocby[*]{|\textit{main}|}| (with a non-empty optional argument)
+which uses the |.aux| file of the main document
+by setting |\jobname| to \textit{main}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Driver Development}
+\label{sec:driver}
+
+The \textsf{childdoc} mechanism can also be use for the development
+of definition files such as \LaTeX{} styles or classes.
+This case differs from the above setup with multiple parts
+included by |\include| in that no |\includeonly| should be invoked.
+This can be achieved by starting the include file
+(before |\ProvidesPackage|) with:
+%
+\begin{center}
+\begin{tabular}{l}
+|\input{childdoc.def}|\\
+|\childdocforward{|\textit{main}|}|\\
+\end{tabular}
+\end{center}
+%
+or alternatively with:
+%
+\begin{center}
+\begin{tabular}{l}
+|\input{childdoc.def}|\\
+|\childdocby{|\textit{main}|}|\\
+\end{tabular}
+\end{center}
+%
+Both forms have slightly different effects as described above.
+The main file is prepared as usual, see \secref{sec:include}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Legacy Detection}
+\label{sec:detection}
+
+The directive |\childdocmain| in the main file can detect
+whether the complete document or merely a child is to be compiled
+even without using the directive |\childdocof|.
+This method is deprecated because it is less robust
+and there is no compelling reason to use it;
+it is merely provided for backward compatibility
+and it may be removed in future versions.
+
+If the detection mechanism is to be used,
+it is mandatory to correctly specify
+the filename of the main file as the argument of |\childdocmain|:
+%
+\begin{center}
+\begin{tabular}{l}
+|\input{childdoc.def}|\\
+|\childdocmain{|\textit{main}|}|\\
+\end{tabular}
+\end{center}
+%
+If |\jobname| does not match the argument \textit{main} of |\childdocmain|,
+it is assumed that |\jobname| points to the child file to be compiled.
+When using |\childdocmain| with the main file specified as argument,
+it suffices to start a child file
+with just |\input{|\textit{main}|}|
+without loading of the package and using |\childdocof|.
+If instead all processing is done
+with the appropriate \textsf{childdoc} directives,
+the argument of \textit{main} of |\childdocmain| can be empty.
+
+An alternative version of the command line processing described
+in \secref{sec:commandline} using the detection mechanism reads:
+%
+\begin{center}
+|... -jobname "|\textit{target}|" "|[\textit{flags}]%
+[|\def\jobname{|\textit{dest}|}|]|\input{|\textit{main}|}"|
+\end{center}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Manual Code}
+\label{sec:manual}
+
+In case one cannot be certain whether the definitions file |childdoc.def|
+is installed on the target \TeX{} distribution
+and one prefers not to ship it,
+it is conceivable to paste a few relevant commands into the sources.
+
+To that end, drop all statements |\input{childdoc.def}|
+and perform the replacements as outlined below.
+Instead of |\childdocmain{|\textit{main}|}| add the following code
+to the top of the main file:
+%
+\begin{center}
+\begin{tabular}{l}
+|\||ifdefined\childdocname\endinput\||fi\newif\ifchilddoc|\\
+|\edef\childdocname{\scantokens\expandafter{\jobname\noexpand}}|\\
+|\def\childdocmain{|\textit{main}|}\||ifx\childdocmain\childdocname\||else|\\
+|\childdoctrue\includeonly{\childdocname}\let\jobname\childdocmain\||fi|\\
+\end{tabular}
+\end{center}
+%
+Instead of |\childdocof{|\textit{main}|}| just include the main file
+at the top of each child file:
+%
+\begin{center}
+|\input{|\textit{main}|}|
+\end{center}
+%
+A simple redirection |\childdocforward{|\textit{dest}|}| is achieved by:
+%
+\begin{center}
+|\def\jobname{|\textit{dest}|}\input{\jobname}|
+\end{center}
+%
+The redirection with prefix
+|\childdocforwardprefix[|\textit{prefix}|]{|\textit{dest}|}|
+is accomplished by:
+%
+\begin{center}
+\begin{tabular}{l}
+|{\edef\jobname{\scantokens\expandafter{\jobname\noexpand}}|\\
+|\def\redirectjob |\textit{prefix}|#1~~~{\gdef\jobname{|\textit{dest}|#1}}|\\
+|\expandafter\redirectjob\jobname~~~}\input{\jobname}|
+\end{tabular}
+\end{center}
+
+In an alternative approach,
+child documents can be compiled by a specific command line
+without additional code or specific definitions:
+%
+\begin{center}
+|... -jobname "|\textit{target}|" "|[\textit{flags}]%
+|\includeonly{|\textit{dest}|}\input{|\textit{main}|}"|
+\end{center}
+%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Information}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Copyright}
+
+Copyright \copyright{} 2017--2018 Niklas Beisert
+
+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
+ \url{http://www.latex-project.org/lppl.txt}
+and version 1.3 or later is part of all distributions of \LaTeX{}
+version 2005/12/01 or later.
+
+This work has the LPPL maintenance status `maintained'.
+
+The Current Maintainer of this work is Niklas Beisert.
+
+This work consists of the files |README.txt|, |childdoc.ins| and |childdoc.dtx|
+as well as the derived files |childdoc.def|, |cdocsamp.tex|
+with |cdocsch1.tex|, |cdocsch2.tex|, |cdocspt3.tex|, |cdocspt4.tex|,
+|cdocsdrf.tex|, |cdocsfn1.tex|, |cdocsfn2.tex|
+as well as |childdoc.pdf|.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Files and Installation}
+
+The package consists of the files:
+%
+\begin{center}
+\begin{tabular}{ll}
+ |README.txt| & readme file \\
+ |childdoc.ins| & installation file \\
+ |childdoc.dtx| & source file \\
+ |childdoc.def| & definition file \\
+ |cdocsamp.tex| & sample main file \\
+ |cdocsch1.tex| & sample include file \\
+ |cdocsch2.tex| & sample include file \\
+ |cdocspt3.tex| & sample part file \\
+ |cdocspt4.tex| & sample part file \\
+ |cdocsdrf.tex| & sample redirection file \\
+ |cdocsfn1.tex| & sample redirection file \\
+ |cdocsfn2.tex| & sample redirection file \\
+ |childdoc.pdf| & manual
+\end{tabular}
+\end{center}
+%
+The distribution consists of the files
+|README.txt|, |childdoc.ins| and |childdoc.dtx|.
+%
+\begin{itemize}
+\item
+Run (pdf)\LaTeX{} on |childdoc.dtx|
+to compile the manual |childdoc.pdf| (this file).
+\item
+Run \LaTeX{} on |childdoc.ins| to create the definitions file |childdoc.def|
+and the sample |cdocsamp.tex| with include files
+|cdocsch1.tex|, |cdocsch2.tex|, |cdocspt3.tex|, |cdocspt4.tex|,
+|cdocsdrf.tex|, |cdocsfn1.tex|, |cdocsfn2.tex|.
+Then copy the file |childdoc.def| to an appropriate directory of your \LaTeX{}
+distribution, e.g.\ \textit{texmf-root}|/tex/latex/childdoc|.
+\end{itemize}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Related CTAN Packages}
+
+There are several other packages which offer a similar functionality:
+%
+\begin{itemize}
+\item
+The packages
+\href{http://ctan.org/pkg/docmute}{\textsf{docmute}},
+\href{http://ctan.org/pkg/includex}{\textsf{includex}} and
+\href{http://ctan.org/pkg/standalone}{\textsf{standalone}}
+provide commands to include only the document body of
+a child file thus allowing both files to be compiled individually.
+\item
+The packages \href{http://ctan.org/pkg/subdocs}{\textsf{subdocs}}
+and \href{http://ctan.org/pkg/subfiles}{\textsf{subfiles}}
+provide structures in which the main and child documents can be
+encapsulated and allowing them to be compiled individually.
+The inclusion mechanism is different from the conventional |\include|.
+\item
+The package \href{http://ctan.org/pkg/combine}{\textsf{combine}}
+is an elaborate solution to combine several documents into one.
+\end{itemize}
+%
+See also the CTAN topic \href{http://ctan.org/topic/subdocs}{\textsf{subdocs}}
+for further related packages.
+The present package differs from the above solutions in that
+a document structure constructed with the conventional |\include| mechanism
+just needs two extra commands at the top of every file
+such that all constituent files can be compiled individually.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%\subsection{Feature Suggestions}
+%
+%The following is a list of features which may be useful for future
+%versions of this package:
+%%
+%\begin{itemize}
+%\item
+%\ldots
+%\end{itemize}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Revision History}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\paragraph{v2.0:} 2018/12/30
+
+\begin{itemize}
+\item
+immediate forward processing
+\item
+added |\childdocby| mechanism
+\item
+manual restructured
+\end{itemize}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\paragraph{v1.6:} 2018/01/17
+
+\begin{itemize}
+\item
+application for development of include files
+\item
+corrections to manual
+\end{itemize}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\paragraph{v1.5:} 2017/05/21
+
+\begin{itemize}
+\item
+more complete structuring introduced
+\item
+|\childdocof| introduced
+\item
+|\childdoc| renamed to |\childdocmain|
+\item
+|\childredirect| renamed to |\childdocforward| and |\childdocforwardprefix|
+and functionality expanded
+\end{itemize}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\paragraph{v1.0:} 2017/04/27
+
+\begin{itemize}
+\item
+manual and install package
+\item
+first version published on CTAN
+\end{itemize}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\paragraph{v0.6:} 2017/04/26
+
+\begin{itemize}
+\item
+redirection mechanism added
+\end{itemize}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\paragraph{v0.5:} 2017/04/26
+
+\begin{itemize}
+\item
+functionality in definition file
+\end{itemize}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\appendix
+
+\settowidth\MacroIndent{\rmfamily\scriptsize 000\ }
+
+ \DocInput{childdoc.dtx}
+
+\end{document}
+%</driver>
+% \fi
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \section{Sample}
+%\iffalse
+%<*samplemain>
+%\fi
+%
+% The following presents a sample document
+% with two chapters, two parts, a title page,
+% a compile flag as well as three forwarding files to set the flag.
+% It consists of eight |.tex| files:
+% \begin{center}
+% \begin{tabular}{ll}
+% |cdocsamp.tex|&main file\\
+% |cdocsch1.tex|&include file for chapter 1\\
+% |cdocsch2.tex|&include file for chapter 2\\
+% |cdocspt3.tex|&include file for part 3\\
+% |cdocspt4.tex|&include file for part 4\\
+% |cdocsdrf.tex|&forwarding file for main file in draft mode\\
+% |cdocsfi1.tex|&forwarding file for final version of chapter 1\\
+% |cdocsfi2.tex|&forwarding file for final version of chapter 2\\
+% \end{tabular}
+% \end{center}
+% Each of the eight files can be compiled directly by the \LaTeX{} compiler.
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \paragraph{Main File.}
+%
+% The main file is called |cdocsamp.tex|.
+%
+% Load the \textsf{childdoc} definitions and
+% declare the filename for the main document:
+% \begin{macrocode}
+\input{childdoc.def}
+\childdocmain{}
+% \end{macrocode}
+
+% Optional override for |\version| flag:
+% \begin{macrocode}
+%%\ifchilddoc\else\providecommand{\version}{draft}\fi
+% \end{macrocode}
+
+% Define the default values for the |\version| flag
+% (|final| for the main file and |draft| for childs):
+% \begin{macrocode}
+\ifchilddoc
+\providecommand{\version}{draft}
+\else
+\providecommand{\version}{final}
+\fi
+% \end{macrocode}
+
+% Load the standard document class:
+% \begin{macrocode}
+\documentclass[12pt]{article}
+% \end{macrocode}
+
+% Start the document body:
+% \begin{macrocode}
+\begin{document}
+% \end{macrocode}
+
+% Declare a title page.
+% Print title, part of document being processed and version flag:
+% \begin{macrocode}
+\addtocounter{page}{-1}
+\begin{center}
+{\LARGE\bfseries{}childdoc example\par}
+\vspace{1cm}
+\ifchilddoc
+\ifchilddocmanual part\else chapter\fi:
+`\childdocname' of `\childdocjob'\par
+\else
+main document: `\childdocjob'\par
+\fi
+version: \version\par
+\end{center}
+\newpage
+% \end{macrocode}
+
+% Manually include selected file,
+% otherwise process as usual:
+% \begin{macrocode}
+\ifchilddocmanual
+\section*{part `\childdocname'}
+\input{\childdocname}
+\else
+% \end{macrocode}
+
+% Include the two chapters:
+% \begin{macrocode}
+\include{cdocsch1}
+\include{cdocsch2}
+% \end{macrocode}
+
+% Include the two parts unless only chapters should be displayed:
+% \begin{macrocode}
+\ifchilddoc\else
+\section{part three}
+\input{cdocspt3}
+\section{part four}
+\input{cdocspt4}
+\fi
+% \end{macrocode}
+
+% Process as usual until here:
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+
+% End of document body:
+% \begin{macrocode}
+\end{document}
+% \end{macrocode}
+%\iffalse
+%</samplemain>
+%\fi
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \paragraph{Chapter Include Files.}
+%
+% The include files are called |cdocsch1.tex| and |cdocsch2.tex|.
+%
+%\iffalse
+%<*samplechap1|samplechap2>
+%\fi
+
+% Optional override for |\version| flag:
+% \begin{macrocode}
+%%\providecommand{\version}{final}
+% \end{macrocode}
+
+% Include the main document:
+% \begin{macrocode}
+\input{childdoc.def}
+\childdocof{cdocsamp}
+% \end{macrocode}
+
+%\iffalse
+%</samplechap1|samplechap2>
+%\fi
+%
+%\iffalse
+%<*samplechap1>
+%\fi
+% Some text for chapter 1:
+% \begin{macrocode}
+\section{one}
+some text in chapter one
+% \end{macrocode}
+
+%\iffalse
+%</samplechap1>
+%\fi
+% Some text for chapter 2:
+%\iffalse
+%<*samplechap2>
+%\fi
+% \begin{macrocode}
+\section{two}
+more text in chapter two
+% \end{macrocode}
+
+%\iffalse
+%</samplechap2>
+%\fi
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \paragraph{Part Include Files.}
+%
+% The include files are called |cdocspt3.tex| and |cdocspt4.tex|.
+%
+%\iffalse
+%<*samplepart3|samplepart4>
+%\fi
+
+% Optional override for |\version| flag:
+% \begin{macrocode}
+%%\providecommand{\version}{final}
+% \end{macrocode}
+
+% Include the main document:
+% \begin{macrocode}
+\input{childdoc.def}
+\childdocby{cdocsamp}
+% \end{macrocode}
+
+%\iffalse
+%</samplepart3|samplepart4>
+%\fi
+%
+%\iffalse
+%<*samplepart3>
+%\fi
+% Some text for part 3:
+% \begin{macrocode}
+some text in part three
+% \end{macrocode}
+
+%\iffalse
+%</samplepart3>
+%\fi
+% Some text for part 4:
+%\iffalse
+%<*samplepart4>
+%\fi
+% \begin{macrocode}
+more text in part four
+% \end{macrocode}
+
+%\iffalse
+%</samplepart4>
+%\fi
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \paragraph{Forwarding for a Complete Draft.}
+%
+% The following forwarding file |cdocsdrf.tex|
+% compiles the main document in draft mode:
+%\iffalse
+%<*sampledraft>
+%\fi
+% \begin{macrocode}
+\def\version{draft}
+\input{childdoc.def}
+\childdocforward{cdocsamp}
+% \end{macrocode}
+
+%\iffalse
+%</sampledraft>
+%\fi
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \paragraph{Forwarding for Final Version of the Chapters.}
+%
+% The following forwarding files |cdocsfn1.tex| and |cdocsfn2.tex|
+% (with identical content)
+% compile the final versions of the child documents
+% |cdocsch1.tex| and |cdocsch2.tex|, respectively:
+%\iffalse
+%<*samplefinal>
+%\fi
+% \begin{macrocode}
+\def\version{final}
+\input{childdoc.def}
+\childdocforwardprefix[cdocsamp]{cdocsfn}{cdocsch}
+% \end{macrocode}
+
+%\iffalse
+%</samplefinal>
+%\fi
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \paragraph{Command Line Processing.}
+%
+% The following three command lines generate the output files
+% |cdocscld|, |cdocscl1| and |cdocscl2|
+% which should be identical to
+% |cdocsdrf|, |cdocsch1| and |cdocsfn2|, respectively:
+% \begin{center}
+% \begin{tabular}{l}
+% |latex -jobname cdocscld \|\\
+% | "\def\version{draft}\input{childdoc.def}\childdocforward{cdocsamp}"|\\
+% |latex -jobname cdocscl1 \|\\
+% | "\input{childdoc.def}\childdocforward[cdocsamp]{cdocsch1}"|\\
+% |latex -jobname cdocscl2 \|\\
+% | "\def\version{final}\input{childdoc.def}\childdocforward{cdocsch2}"|
+% \end{tabular}
+% \end{center}
+% Note that the trailing backslash on each first line
+% merely continues the input to the second line
+% (for convenient cut ant paste).
+% Furthermore, the command |latex| can be replaced by any
+% of its alternative versions such as |pdflatex|.
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \section{Implementation}
+%\iffalse
+%<*package>
+%\fi
+%
+% This section describes the definitions file |childdoc.def|.
+
+% The definitions cannot be loaded using |\usepackage| or |\RequirePackage|
+% which has a mechanism to prevent loading a style file more than once.
+% When loading the definitions by means of |\input|
+% multiple instances have to be prevented manually:
+%\iffalse
+%This code needs to be before the `\ProvidesFile' directive
+%which is defined at the beginning of this file.
+%Therefore it is also placed there and commented out here.
+%</package>
+%<*discard>
+%\fi
+% \begin{macrocode}
+\ifdefined\childdocmain\endinput\fi
+% \end{macrocode}
+%\iffalse
+%</discard>
+%<*package>
+%\fi
+%
+% \macro{\ifchilddoc}
+% \macro{\ifchilddocmanual}
+% The conditional |\ifchilddoc| tells whether a
+% child (true) or main (false) document is being compiled.
+% The conditional |\ifchilddocmanual| tells whether
+% the |\includeonly| mechanism is used (false) or
+% the selection of child files must be performed manually (true).
+% The definitions initialise to false:
+% \begin{macrocode}
+\newif\ifchilddoc
+\newif\ifchilddocmanual
+% \end{macrocode}
+
+% \macro{\childdocname}
+% \macro{\childdocjob}
+% The macro |\childdocname| stores the name of the main document
+% to be compiled. The macro |\childdocjob| stores the name of
+% the document on which the \LaTeX{} compiler was originally invoked.
+% The content of |\jobname| cannot be compared
+% to filenames specified in the source due to different catcodes.
+% The following code rescans |\jobname|, stores the result
+% in |\childdocname| and saves a copy in |\childdocjob|:
+% \begin{macrocode}
+\edef\childdocname{\scantokens\expandafter{\jobname\noexpand}}
+\let\childdocjob\childdocname
+% \end{macrocode}
+
+% \macro{\childdocdisable}
+% The macro |\childdocdisable| prevents the main file
+% from being processed more than once.
+% At this stage, the main document command |\childdocmain|
+% is assumed to be called once again where it should do nothing.
+% Any subsequent call to it should prevent
+% a secondary processing of the main document
+% It overwrites the forwarding commands
+% |\childdocof| and |\childdocforward|
+% with empty macros to prevent further inclusions of the main document:
+% \begin{macrocode}
+\newcommand{\childdocdisable}
+{
+ \renewcommand{\childdocmain}[1]{\renewcommand{\childdocmain}[1]{\endinput}}
+ \renewcommand{\childdocof}[1]{}
+ \renewcommand{\childdocby}[2][]{}
+ \renewcommand{\childdocforward}[2][]{}
+ \renewcommand{\childdocdisable}{}
+}
+% \end{macrocode}
+
+% \macro{\childdocmain}
+% The macro |\childdocmain| is to be called at the top of the main file
+% with nothing or the main filename (without extension) as argument.
+% First, it breaks loops.
+% If the argument is not empty and does not match |\childdocname|
+% (which is set by the first inclusion of |childdoc.def|),
+% |\ifchilddoc| is set to true, |\includeonly| is applied to the child file
+% and |\jobname| is set to the main file
+% (for proper handling of |.aux| files):
+% \begin{macrocode}
+\newcommand{\childdocmain}[1]
+{
+ \childdocdisable\childdocmain{}
+ \if?#1?\else
+ \begingroup
+ \def\childdoctmp{#1}
+ \ifx\childdoctmp\childdocname
+ \def\childdoctmp{}
+ \else
+ \def\childdoctmp
+ {
+ \childdoctrue
+ \includeonly{\childdocname}
+ \def\childdocjob{#1}
+ \def\jobname{#1}
+ }
+ \fi
+ \expandafter
+ \endgroup
+ \childdoctmp
+ \fi
+}
+% \end{macrocode}
+
+% \macro{\childdocof}
+% The command |\childdocof| redirects
+% compilation to the main file |#1|.
+% \begin{macrocode}
+\newcommand{\childdocof}[1]
+{
+ \childdocdisable
+ \childdoctrue
+ \includeonly{\childdocname}
+ \def\jobname{#1}
+ \def\childdocjob{#1}
+ \input{#1}
+}
+% \end{macrocode}
+
+% \macro{\childdocby}
+% The command |\childdocby| ....
+% \begin{macrocode}
+\newcommand{\childdocby}[2][]
+{
+ \childdocdisable
+ \childdoctrue
+ \childdocmanualtrue
+ \if?#1?\else
+ \def\jobname{#2}
+ \fi
+ \def\childdocjob{#2}
+ \input{#2}
+ \endinput
+}
+% \end{macrocode}
+
+% \macro{\childdocforward}
+% The command |\childdocforward| redirects
+% compilation to the main file or
+% (if the optional argument is given) a child file.
+% Parameters are set as if the main file
+% or a child file starting with |\childdocof| was compiled.
+% Then compilation is handed over to the main file:
+% \begin{macrocode}
+\newcommand{\childdocforward}[2][]
+{
+ \begingroup
+ \if?#1?
+ \def\childdoctmp
+ {
+ \def\childdocname{#2}
+ \def\childdocjob{#2}
+ \def\jobname{#2}
+ \input{#2}
+ \endinput
+ }
+ \else
+ \def\childdoctmp
+ {
+ \childdocdisable
+ \def\childdocname{#2}
+ \childdoctrue
+ \includeonly{#2}
+ \def\childdocjob{#1}
+ \def\jobname{#1}
+ \input{#1}
+ \endinput
+ }
+ \fi
+ \expandafter
+ \endgroup
+ \childdoctmp
+}
+% \end{macrocode}
+
+% \macro{\childdocforwardprefix}
+% The command |\childdocforwardprefix| redirects
+% compilation to the main or a child file by means of a pattern.
+% The prefix |#1| in the current filename is replaced by |#2|
+% and the suffix of the current filename is kept
+% (it is assumed that the filename does not contain the substring `|~~~|'
+% which is used as a delimiter).
+% Compilation is handed over to the new file by |\childdocforward|:
+% \begin{macrocode}
+\newcommand{\childdocforwardprefix}[3][]
+{
+ \begingroup
+ \def\childdocextract #2##1~~~{\def\childdoctmp{\childdocforward[#1]{#3##1}}}
+ \expandafter\childdocextract\childdocname~~~
+ \expandafter
+ \endgroup
+ \childdoctmp
+}
+% \end{macrocode}
+
+% \macro{\childdoc}
+% The deprecated macro |\childdoc| is a legacy version of |\childdocmain|:
+% \begin{macrocode}
+\newcommand{\childdoc}{\childdocmain}
+% \end{macrocode}
+
+% \macro{\childdocredirect}
+% The deprecated macro |\childdocredirect| is a legacy version
+% of |\childdocforward| and |\childdocforwardprefix|:
+% \begin{macrocode}
+\newcommand{\childdocredirect}[2][]
+{
+ \begingroup
+ \if?#1?
+ \def\childdoctmp{\childdocforward{#2}}
+ \else
+ \def\childdoctmp{\childdocforwardprefix{#1}{#2}}
+ \fi
+ \expandafter
+ \endgroup
+ \childdoctmp
+}
+% \end{macrocode}
+
+%\iffalse
+%</package>
+%\fi
+%
+\endinput
diff --git a/macros/latex/contrib/childdoc/childdoc.ins b/macros/latex/contrib/childdoc/childdoc.ins
new file mode 100644
index 0000000000..dbee687c9e
--- /dev/null
+++ b/macros/latex/contrib/childdoc/childdoc.ins
@@ -0,0 +1,46 @@
+\def\batchfile{childdoc.ins}
+\input docstrip.tex
+
+\keepsilent
+% childdoc.ins Copyright (C) 2017-2018 Niklas Beisert
+%
+% 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 2005/12/01 or later.
+
+\preamble
+
+Copyright (C) 2017-2018 Niklas Beisert
+
+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 2005/12/01 or later.
+
+\endpreamble
+
+% the definitions and sample files
+\generate{\askforoverwritefalse
+\file{childdoc.def}{\from{childdoc.dtx}{package}}
+\file{cdocsamp.tex}{\from{childdoc.dtx}{samplemain}}
+\file{cdocsch1.tex}{\from{childdoc.dtx}{samplechap1}}
+\file{cdocsch2.tex}{\from{childdoc.dtx}{samplechap2}}
+\file{cdocspt3.tex}{\from{childdoc.dtx}{samplepart3}}
+\file{cdocspt4.tex}{\from{childdoc.dtx}{samplepart4}}
+\file{cdocsdrf.tex}{\from{childdoc.dtx}{sampledraft}}
+\file{cdocsfn1.tex}{\from{childdoc.dtx}{samplefinal}}
+\file{cdocsfn2.tex}{\from{childdoc.dtx}{samplefinal}}
+}
+
+\Msg{***********************************************************************}
+\Msg{* Done. Please copy the file childdoc.def to an appropriate directory *}
+\Msg{* of your LaTeX distribution, e.g. texmf-root/tex/latex/childdoc. *}
+\Msg{***********************************************************************}
+\endinput
diff --git a/macros/latex/contrib/childdoc/childdoc.pdf b/macros/latex/contrib/childdoc/childdoc.pdf
new file mode 100644
index 0000000000..c4dcfc472a
--- /dev/null
+++ b/macros/latex/contrib/childdoc/childdoc.pdf
Binary files differ