summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source')
-rw-r--r--Master/texmf-dist/source/latex/childdoc/childdoc.dtx897
-rw-r--r--Master/texmf-dist/source/latex/childdoc/childdoc.ins44
2 files changed, 941 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/childdoc/childdoc.dtx b/Master/texmf-dist/source/latex/childdoc/childdoc.dtx
new file mode 100644
index 00000000000..bf2880d658b
--- /dev/null
+++ b/Master/texmf-dist/source/latex/childdoc/childdoc.dtx
@@ -0,0 +1,897 @@
+% \iffalse
+%
+% childdoc.dtx Copyright (C) 2017 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>\ProvidesFile{childdoc.def}[2017/04/27 v1.0 child document driver]
+%<samplemain>\ProvidesFile{cdocsamp.tex}[2017/04/27 v1.0 sample for childdoc]
+%<*driver>
+%\ProvidesFile{childdoc.drv}[2017/04/27 v1.0 childdoc reference manual file]
+\PassOptionsToClass{10pt,a4paper}{article}
+\documentclass{ltxdoc}
+
+\usepackage[margin=35mm]{geometry}
+\usepackage{hyperref}
+\usepackage[usenames]{color}
+
+\hypersetup{colorlinks=true}
+\hypersetup{pdfstartview=FitH}
+\hypersetup{pdfpagemode=UseNone}
+
+\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{27 April 2017, \textsf{v1.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}
+
+\tableofcontents
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\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.
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Usage}
+
+The package \textsf{childdoc} is \emph{not} a standard
+\LaTeXe{} |.sty| style file! Therefore it needs to be invoked in
+a non-standard way.
+
+\DescribeMacro{\childdoc}
+To use the package add the commands
+\begin{center}
+\begin{tabular}{l}
+|\input{childdoc.def}|\\
+|\childdoc{|\textit{main}|}|\\
+\end{tabular}
+\end{center}
+at the very top of your main \LaTeX{} file,
+in particular \emph{before} the |\documentclass| statement!
+Furthermore, you must add the command
+\begin{center}
+|\input{|\textit{main}|}|
+\end{center}
+at the top of every child file which is included by |\include|
+from within the main file
+(or at least for those files which you would like to compile individually).
+In each case, the argument \textit{main}
+must be the filename of the main file.
+Note that the closed loop generated by
+this combination of |\input| and |\include| commands
+is broken by |\childdoc|.
+
+Please note the following restrictions:
+\begin{itemize}
+\item
+The argument \textit{main} of |\childdoc| must match the
+filename of the file in which it is specified.
+This is necessary because \TeX{} does not store the name
+of files included via |\input|.
+\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 |\childdoc| 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 |\childdoc| and puts it
+at the beginning of every child section;
+however, a whitespace is ignored.
+\end{itemize}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Considerations}
+
+Let us mentions a couple of
+consideration in setting up the main and child documents:
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\paragraph{Content of Main File.}
+
+It is advisable to place all output in the child files included by |\include|.
+Any output contained in the main file will appear in all child documents;
+it cannot be suppressed by the |\includeonly| directive
+and thus should normally be avoided.
+Below we shall describe a method to include some output in the main file
+by means of conditional processing.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\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}
+
+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:
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\medskip
+\noindent
+\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}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\medskip
+\noindent
+\DescribeMacro{\childdocname}
+The macro |\childdocname| contains the filename (without extension)
+of the main or child file being processed.
+Note that |\jobname| will always contain the name of the main file.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\paragraph{Title Page.}
+
+For example,
+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 \jobname.|
+\end{center}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Flags and Redirection}
+
+The package allows to easily generate different versions
+of the main or child documents
+and to (permanently) store these in different files.
+To this end compilation flags can be defined
+and assigned different default values.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\paragraph{Defining Flags.}
+
+Suppose we want to define 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 |\childdoc| directive):
+%
+\begin{center}
+\begin{tabular}{l}
+|\ifchilddoc|\\
+|\providecommand{\version}{draft}|\\
+|\||else|\\
+|\providecommand{\version}{final}|\\
+|\||fi|
+\end{tabular}
+\end{center}
+%
+By using |\providecommand| we make sure that previous definitions
+are not overwritten.
+We can thus add further statements
+|\providecommand{\version}{...}|
+before the above code to override it.
+
+For the main file, one might add a line
+(between |\childdoc| 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 |\input{|\textit{main}|}| directive)
+%
+\begin{center}
+|%\providecommand{\version}{final}|
+\end{center}
+%
+which can be uncommented to produce the final version of this child document.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\paragraph{Redirection.}
+
+Once compilation flags are defined, we can permanently set up files
+to produce certain versions of the documents.
+To this end, the package defines a command
+to pass on compilation to a different file:
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\medskip
+\noindent
+\DescribeMacro{\childdocredirect}
+The command |\childdocredirect| redirects processing to
+the another source file:
+%
+\begin{center}
+|\childdocredirect[|\textit{prefix}|]{|\textit{dest}|}|
+\end{center}
+%
+The argument \textit{dest} is the destination file
+(without extension).
+It should be the main file or one of the child files.
+When the optional argument \textit{prefix} is given,
+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}}'
+and processing is 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}}'
+without optional argument.\
+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|
+compiles the main document as a draft:
+%
+\begin{center}
+\begin{tabular}{l}
+|\def\version{draft}|\\
+|\input{childdoc.def}|\\
+|\childdocredirect{|\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}|\\
+|\childdocredirect{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 will be convenient to set up a |Makefile| or
+shell script to automatise the process.
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Manual Code}
+
+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 |\childdoc{|\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}
+%
+A simple redirection |\childdocredirect{|\textit{dest}|}| is achieved by:
+%
+\begin{center}
+|\def\jobname{|\textit{dest}|}\input{\jobname}|
+\end{center}
+%
+The redirection by pattern
+|\childdocredirect[|\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}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Command Line Processing}
+
+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 line effectively performs a redirection
+(note that depending on the shell being used,
+backslashes may have to be doubled: `|\|' $\to$ `|\\|')
+%
+\begin{center}
+|... -jobname "|\textit{target}|" "|[\textit{flags}]%
+|\def\jobname{|\textit{dest}|}\input{|\textit{main}|}"|
+\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).
+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 in turn tweaks the definition of |\jobname| to \textit{dest}
+which is later passed on to |\includeonly| by |\childdoc|
+and then hands over to the main file \textit{main}.
+
+In fact, a similar effect can be achieved
+without the \textsf{childdoc} mechanism
+by using the command line:
+%
+\begin{center}
+|... -jobname "|\textit{target}|" "|[\textit{flags}]%
+|\includeonly{|\textit{dest}|}\input{|\textit{main}|}"|
+\end{center}
+%
+However, some of the functionality of \textsf{childdoc} is lost,
+e.g.\ child documents cannot be processed individually
+and the conditional |\ifchilddoc| is not defined.
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Information}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Copyright}
+
+\begingroup
+\parskip1ex
+\parindent0pt
+
+Copyright \copyright{} 2017 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 |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|.
+
+\endgroup
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Files and Installation}
+
+The package consists of the files:
+%
+\begin{center}
+\begin{tabular}{ll}
+ |README| & 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 \\
+ |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|, |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|, |cdocsdrf.tex|, |cdocsfn1.tex|, |cdocsfn2.tex|.
+Copy the file |childdoc.def| to an appropriate directory of your \LaTeX{}
+distribution, e.g.\ \textit{texmf-root}|/tex/latex/childdoc|.
+\end{itemize}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%\subsection{Feature Suggestions}
+%
+%The following is a list of features which may be useful for future
+%versions of this package:
+%%
+%\begin{itemize}
+%\item
+%...
+%\end{itemize}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Revision History}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\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:} 2016/04/26
+
+\begin{itemize}
+\item
+functionality in definition file
+\end{itemize}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\appendix
+
+\settowidth\MacroIndent{\rmfamily\scriptsize 00\ }
+\parskip1ex
+\parindent0pt
+
+ \DocInput{childdoc.dtx}
+
+\end{document}
+%</driver>
+% \fi
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \section{Sample}
+%\iffalse
+%<*samplemain>
+%\fi
+%
+% Here we present a sample document with two chapters, a title page,
+% a compile flag as well as three redirection files to set the flag.
+% It consists of six |.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\\
+% |cdocsdrf.tex|&redirection file for main file in draft mode\\
+% |cdocsfi1.tex|&redirection file for final version of chapter 1\\
+% |cdocsfi2.tex|&redirection file for final version of chapter 2\\
+% \end{tabular}
+% \end{center}
+% Each of the six 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}
+\childdoc{cdocsamp}
+% \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}
+part:
+\ifchilddoc
+`\childdocname' of `\jobname'\par
+\else
+main\par
+\fi
+version: \version\par
+\end{center}
+\newpage
+% \end{macrocode}
+
+% Include the two chapters:
+% \begin{macrocode}
+\include{cdocsch1}
+\include{cdocsch2}
+% \end{macrocode}
+
+% End of document body:
+% \begin{macrocode}
+\end{document}
+% \end{macrocode}
+%\iffalse
+%</samplemain>
+%\fi
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \paragraph{Chapter Include Files.}
+%
+% The chapter 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{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{Redirection for a Complete Draft.}
+%
+% The following redirection file |cdocsdrf.tex|
+% compiles the main document in draft mode:
+%\iffalse
+%<*sampledraft>
+%\fi
+% \begin{macrocode}
+\def\version{draft}
+\input{childdoc.def}
+\childdocredirect{cdocsamp}
+% \end{macrocode}
+
+%\iffalse
+%</sampledraft>
+%\fi
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \paragraph{Redirection for Final Version of the Chapters.}
+%
+% The following redirection 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}
+\childdocredirect[cdocsfn]{cdocsch}
+% \end{macrocode}
+
+%\iffalse
+%</samplefinal>
+%\fi
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \section{Implementation}
+%\iffalse
+%<*package>
+%\fi
+%
+% In this section we describe 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|
+% we have to prevent multiple instances manually:
+% \begin{macrocode}
+\ifdefined\childdoc\endinput\fi
+% \end{macrocode}
+
+% \begin{macro}{\ifchilddoc}
+% The conditional |\ifchilddoc| tells whether a
+% child (true) or main (false) document is being compiled.
+% The definition initialises to false:
+% \begin{macrocode}
+\newif\ifchilddoc
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\childdocname}
+% The macro |\childdocname| stores the name of the document
+% to be compiled. In modern \TeX{} engines the content of |\jobname|
+% appears to be protected to account for special characters
+% or subdirectories in filenames.
+% This prevents a successful comparison to the name of the main file.
+% The following code stores an expanded version of |\jobname|
+% in |\childdocname|:
+% \begin{macrocode}
+\edef\childdocname{\scantokens\expandafter{\jobname\noexpand}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\childdoc}
+% The macro |\childdoc| is to be called at the top of the
+% main file with the main filename (without extension) as argument.
+% First, it overwrites its own definition to end processing of the
+% present file (|\endinput|) on subsequent calls.
+% This prevents the main file from being processed more than once.
+% Then the current filename is compared to the main filename
+% and in case of mismatch |\ifchilddoc| is set to true.
+% In that case
+% |\includeonly| is applied to the child file
+% and |\jobname| is set to the main file
+% (for proper handling of |.aux| files):
+% \begin{macrocode}
+\newcommand{\childdoc}[1]
+{
+ \def\childdoc##1{\endinput}
+ {
+ \def\childdoctmp{#1}
+ \ifx\childdocname\childdoctmp\else
+ \global\childdoctrue
+ \fi
+ }
+ \ifchilddoc
+ \includeonly{\childdocname}
+ \def\jobname{#1}
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\childdocredirect}
+% The command |\childdocredirect| redirects
+% compilation to the main or a child file |#2|.
+% If the optional argument |#1| is given,
+% the prefix |#1| in the current filename is replaced by |#2|
+% (it is assumed that the filename does not contain the substring `|~~~|'
+% which is used as a delimiter).
+% Finally, |\jobname| and |\childdocname| are set to the new filename
+% and compilation is handed over to the new file:
+% \begin{macrocode}
+\newcommand{\childdocredirect}[2][]
+{
+ {
+ \def\childdoctmp{#1}
+ \def\childdocempty{}
+ \ifx\childdoctmp\childdocempty
+ \gdef\jobname{#2}
+ \else
+ \def\childdocextract #1##1~~~{\gdef\jobname{#2##1}}
+ \expandafter\childdocextract\childdocname~~~
+ \fi
+ }
+ \let\childdocname\jobname
+ \input{\jobname}
+ \endinput
+}
+% \end{macrocode}
+% \end{macro}
+
+%\iffalse
+%</package>
+%\fi
+%
+\endinput
+%
+%% \CheckSum{3381}
diff --git a/Master/texmf-dist/source/latex/childdoc/childdoc.ins b/Master/texmf-dist/source/latex/childdoc/childdoc.ins
new file mode 100644
index 00000000000..0b745a67e4d
--- /dev/null
+++ b/Master/texmf-dist/source/latex/childdoc/childdoc.ins
@@ -0,0 +1,44 @@
+\def\batchfile{childdoc.ins}
+\input docstrip.tex
+
+\keepsilent
+% childdoc.ins Copyright (C) 2017 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 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{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