diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-11 23:58:56 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-11 23:58:56 +0000 |
commit | 9357aac23d912520b793afa28016ea1998892c15 (patch) | |
tree | b4c32ebaec96da588778881c102248aee71ab702 /Master | |
parent | 86227ed36d4e633fd2f9d9cec93c81399b41a19f (diff) |
trunk/Master/texmf-dist/source/latex/volumes
git-svn-id: svn://tug.org/texlive/trunk@583 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r-- | Master/texmf-dist/source/latex/volumes/volumes.dtx | 846 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/volumes/volumes.ins | 88 |
2 files changed, 934 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/volumes/volumes.dtx b/Master/texmf-dist/source/latex/volumes/volumes.dtx new file mode 100644 index 00000000000..fe694be5723 --- /dev/null +++ b/Master/texmf-dist/source/latex/volumes/volumes.dtx @@ -0,0 +1,846 @@ +% \CheckSum{440} +% \iffalse meta-comment +% (the version number in the next line is an internal CVS version!) +% $Id: volumes.dtx,v 1.31 2004/06/18 13:57:47 frank Exp $ +% ====================================================================== +% volumes.dtx +% Copyright (C) 2004 Frank Küster +% +% This file can be redistributed and/or modified under the terms +% of the LaTeX Project Public Licence Version 1.3 or later, at your choice. +% See: http://www.latex-project.org/lppl/ +% ---------------------------------------------------------------------- +% volumes.dtx +% Copyright (C) 2004 Frank Küster +% +% Diese Datei kann nach den Regeln der LaTeX Project Public +% Licence Version 1.3 oder neuer weiterverbreitet und/oder modifiziert +% werden. +% +% ====================================================================== +% +% \charactertable +% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +% Digits \0\1\2\3\4\5\6\7\8\9 +% Exclamation \! Double quote \" Hash (number) \# +% Dollar \$ Percent \% Ampersand \& +% Acute accent \' Left paren \( Right paren \) +% Asterisk \* Plus \+ Comma \, +% Minus \- Point \. Solidus \/ +% Colon \: Semicolon \; Less than \< +% Equals \= Greater than \> Question mark \? +% Commercial at \@ Left bracket \[ Backslash \\ +% Right bracket \] Circumflex \^ Underscore \_ +% Grave accent \` Left brace \{ Vertical bar \| +% Right brace \} Tilde \~} +% \fi +% \iffalse +%<*dtx> + \ProvidesFile{volumes.dtx} +%</dtx> +%\NeedsTeXFormat{LaTeX2e}[1995/12/01] +%<driver>\ProvidesFile{volumes.drv} +%<volumes>\ProvidesPackage{volumes} +%<*driver|dtx|volumes> + [2004/06/02 v1.0 print only parts of a LaTeX document, + with complete indices etc.] +%</driver|dtx|volumes> +%<*nowtoaux> +\ProvidesPackage{nowtoaux}[2004/06/14 v1.0 write to the aux file immediately] +%</nowtoaux> +%<*driver> +%% \documentclass{article} +%% \usepackage{doc} +\documentclass{ltxdoc} +\EnableCrossrefs +\DoNotIndex{\@for,\@gobble,\@gobblefour,\@ifnextchar,\@ifpackageloaded,\@ifundefined,\@tempcnta} +\DoNotIndex{\@tempswatrue,\@tempswafalse,\@unexpandable@protect,\@whilenum} +\DoNotIndex{\begingroup,\csname,\DeclareOption,\def,\do} +\DoNotIndex{\edef,\if,\else,\fi,\endcsname,\endgroup,\expandafter,\glossary} +\DoNotIndex{\if@nobreak,\if@tempswa,\ifnum,\ifvmode,\ifx,\fi,\fi,\fi,\fi,\fi,\index} +\DoNotIndex{\label,\let,\long,\MessageBreak,\newcommand,\newcounter,\newif,\nobreak} +\DoNotIndex{\PackageError,\PackageWarningNoLine,\protect,\ProcessOptions,\providecommand,\relax,\RequirePackage,\reserved@a} +\DoNotIndex{\setcounter,\space,\stepcounter,\string,\undefined} +\CodelineIndex +% +\begin{document} + \DocInput{volumes.dtx} +\end{document} +%</driver> +% \fi +% +% \newcommand*{\EmacsCheckParens}[1]{} +% \GetFileInfo{volumes.dtx} +% \RecordChanges +% +% \MacroIndent=1em +% \setcounter{IndexColumns}{2} +% +% \MakeShortVerb{\|} +% \MakeShortVerb{\§} +% \newcommand{\package}[1]{\textsf{#1}} +% \renewcommand{\partname}{Part} +% +% \changes{v1.0}{2004/06/02}{initial public release} +% \title{volumes.sty: Support for Printing of only parts of a LaTeX +% document, with complete indices etc. } +% \author{Frank K\"uster} +% \date{\filedate} +% \maketitle{} +% +% \begin{abstract} +% \noindent This package tries to help you if you want to produce +% separate printed volumes from one LaTeX document, as well as one +% comprehensive "all inclusive" version. It suppresses the parts of +% the table of contents that are not typeset, while counters, +% definitions, index entries etc. are kept consistent throughout the +% input file. The same goal can probably also be achieved by +% different approaches, e.g. packages to combine separate documents +% in one typeset version. But for me it was easier this way -- I +% define lots of macros in the document on-the-fly, and have to +% avoid double definitions in the different parts. +% +% This file also provides \package{nowtoaux.sty} which allows writing +% to the |aux| file, and thus to the |toc|, |lof| and |lot| files, +% without waiting for a page to be shipped out. +% \end{abstract} +% +% \tableofcontents{} +% +% \part{User documentation} +% \label{part:user-documentation} +% +%\section{Purpose, alternatives, and credits} +%\label{sec:purpose} +% +% If you use \cmd{\includeonly} to typeset only parts of your +% document, you have only two choices: Either you delete the old aux +% files, and get no information at all about the parts that are not +% typeset, or you keep it, but then you get a full table of contents, +% lists of figures and tables, etc., even for the parts that are not +% included. Thus, \cmd{\includeonly} is only suitable to keep +% compilation times short while writing parts of your document, but +% not for the final typesetting of parts of a document. +% +% If you want to have a more fine-grained control over what is being +% typeset, \package{volumes.sty} may help you. There are, however, +% some alternatives. If you know in advance that you will want to +% typeset your package in two or more volumes, it might be better to +% develop it as separate documents, using \package{xr.sty} for +% references to the other document, or to use tools as +% \package{shorttoc}. +% +% When I developed this package, I had yet written a large part of the +% document -- in fact it was a laboratory diary (using my own +% \package{labbook} class) -- and was using lots of automated indexing +% commands that occurred in all parts, and macros that defined and +% re-used command sequences on-the-fly. I wanted those commands to be +% consistent throughout my work in this lab, avoiding dobule +% definitions, and I wanted the complete index, also for older +% volumes, in every volume. Therefore it seemed harder to take apart +% the whole document, than suppressing a part of the table of +% contents. +% +% In a discussion with Markus Kohm, he came up with the basic idea for +% this, and I am much in debt to him for his help. Some definitions +% where also taken and/or adapted from his \package{scrclass.dtx}, as +% well as from basic \LaTeXe{} files, and the contributors of the +% newsgroup \texttt{de.comp.text.tex} also helped me, as usual. +% +%\section{Using the \package{volumes} Package} +%\label{sec:using-volumes} +% +% \DescribeMacro{\onlyvolume} +% To use the Package, you must at least load it and call the +% \cmd{\onlyvolumes} macro: +% \begin{verbatim} +% \usepackage{volumes} +% \onlyvolume +% \end{verbatim} +% The reason why you need two commands is that it makes it possible to +% customize it's behavior between the \cmd{\usepackage} and +% \cmd{\onlyvolume} (see below). +% +% \package{volumes.sty} assumes that you are using \cmd{\include} for +% the parts that you want to typeset conditionally, and standardized, +% numbered filenames (see below). However, the appearance of your +% document still won't change if you insert just the lines above. You +% also need to specify which part should be typeset. There are two +% ways to accomplish that: +% \begin{enumerate} +% \item You can specify the part you want as an optional argument to +% \cmd{\onlyvolume}, for example: +% \begin{verbatim} +% \onlyvolume[2] +% \end{verbatim} +% to get the second part. The disadvantage for this is that you have +% to change the document when you want to change the part to be +% typeset. +% \item \DescribeMacro{\volume}Alternatively, you can define the macro +% \cmd{\volume} outside the file, it should expand to the number of +% the part you want. This can be done on the command line, e.g. like +% this: +% \begin{verbatim} +% latex "\def\volume{2} \input{filename}" +% \end{verbatim} +% \end{enumerate} +% +% \package{volumes.sty} will handle each file that is included with +% \cmd{\include} as one volume, and treat the rest as fixed parts. It +% does not take care of \cmd{\input} at all, therefore you're free to +% use it as you want. +% +%\subsection{Customization} +%\label{sec:custom} +% +% +%\paragraph{Filenames} +%\label{sec:filenames} +% +% \DescribeMacro{\volumename} +% By default, \package{volumes.sty} expects the included +% files to be named |volume1.tex|, |volume2.tex| etc.\footnote{In fact +% this is only true for conditionally included files. If you use +% \cmd{\alwaysinclude} (see below), those files can have arbitrary +% names.} The numbers at the end must always be there, but you can +% change the basename from |volume| to \meta{anything} else using +% +% \cmd{\volumename}\marg{anything} +% +% +%\paragraph{Commands specific to volumes} +%\label{sec:volumecommands} +% +% \DescribeMacro{\allvolumescommand}\DescribeMacro{\volumecommand} You +% might want certain commands only to be executed when the whole +% document is typeset, and others only for a specific volume. To +% achieve this, write \cmd{\allvolumescommand}\marg{commands} and/or +% \cmd{\volumecommand}\marg{number}\marg{commands}. +% +% The commands are currently\footnote{In future versions, this might +% be moved to an other place - don't rely on that.} +% executed at the end of the preamble using +% \cmd{\AtBeginDocument}. Therefore you cannot typeset anything, +% instead you should define commands that are later typeset, +% e.g. change the \cmd{\title} or \cmd{\date}. +% +%\paragraph{Excluding \cmd{\addtocontents} commands} +%\label{sec:newaddtoc} +% +% The mechanisms presented so far only exclude things added to the +% |toc|, |lof|, or |lot| files by sectioning commands or floats, or +% using \cmd{\addcontentsline}. If you add some stuff manually to +% those lists using \cmd{\addtocontents}, it still gets typeset. +% +% To circumvent this, you can use \cmd{\voladdtotoc}\marg{Text}, +% \cmd{\voladdtolof}\marg{Text}, and \cmd{\voladdtolot}\marg{Text}, +% instead of \cmd{\addtocontents}\marg{Text}. These texts will +% automatically be suppressed if the respective list is suppressed in +% the part where they are used. +% +% +% +%\subsection{Options: Determining what to exclude} +%\label{sec:options-using} +% +% \package{volumes.sty} by default suppresses the unprinted entries +% into the Table of Contents (|lof|), List of Figures (|lof|) and List +% of Tables (|lot|). You can change this using the following options: +% \begin{description} +% \item[|tocall|] The complete table of contents is printed even when +% only typesetting one part, i.e. only the lists of tables and of +% figures is suppressed +% \item[|lofall|] The complete list of figures is printed even when +% only typesetting one part, i.e. only the lists of tables and table +% of contents is suppressed. +% \item[|lotall|] The complete list of tables is printed even when +% only typesetting one part, i.e. only the lists of figures and +% table of contents is suppressed. +% \end{description} +% \DescribeMacro{\volumeone}\DescribeMacro{\volumetwo}\DescribeMacro{\volumethree}\DescribeMacro{...} +% We redefine the \cmd{\include} command to achieve this. If this +% causes incompatibilities with other packages, use the option +% \begin{description} +% \item[|manual|] You must then specify the beginning of a volume by +% putting the commands \cmd{\volumeone}, \cmd{\volumetwo}, +% \cmd{\volumethree} and so forth directly before the corresponding +% \cmd{\include}. The filenames still need to follow the conventions +% described above. +% \end{description} +% +% +% +%\subsection{Future plans} +%\label{sec:future} +% +%Here are some ideas that I had, and believe can be implemented quite +%easily -- but I didn't have time yet: +%\begin{itemize} +% \item Check whether the filename in \cmd{\include} maches the +% pattern \cmd{\volumename}\meta{number} and include it always if it +% does not. +% \item Provide a user interface that allows to suppress entries in +% other lists, like lists of equations, listings, or user-defined +% floats. +%\end{itemize} +% +%\section{The \package{nowtoaux} Package} +%\label{sec:nowtoaux-usage} +% +% The \cmd{\addtocontents} macro uses the \TeX\ primitive \cmd{\write} +% to insert its text into the |aux| file, from where it will finally +% end up in the |toc| file etc. \cmd{\write} puts its contents into a +% \emph{whatsit}, and the actual writing is done when the material +% currently processed fills a page, and the page is shipped out. This +% way, putting \cmd{\thepage} into the arguments of +% \cmd{\addtocontents} will produce the correct page number. However, +% sometimes one really wants the writing to take place immediately, +% when the macro is expanded. This can be achieved with the +% \package{nowtoaux} package. +% +% Consider the following example, which tries to typeset the table of +% contents in the main part of the document in red: +% \begin{verbatim} +% \documentclass{report} +% \usepackage{color} +% \begin{document} +% +% \tableofcontents +% +% \include{intro} +% \addtocontents{toc}{\color{red}} +% \include{main} +% \end{document} +% \end{verbatim} +% +% Here, the \cmd{\addtocontents} command is at a place where nothing +% is typeset: The previous \cmd{\include} has just caused a page +% break, and the next include will open its own |aux| file, before +% also doing a \cmd{\clearpage} and starting the typesetting, probably +% of many pages with sections that go into the toc. It's only after +% the processing comes back from |main.tex| that \TeX{} notices that a +% \emph{whatsit} is left, and writes to the |aux| file. +% +% \DescribeMacro{\immediateaddtocontents} +% What you want instead is a command like \cmd{\addtocontents} that +% writes immediately to the |aux| file, without waiting for a page +% shipout. The \package{nowaux} package defines +% \cmd{\immediateaddtocontents}\marg{table}\marg{Text} which does +% exactly that. If you substitute it for the \cmd{\addtocontents} in +% the above example, the entries in the table of contents that come +% from |main.tex| are colored red (how horrible\dots). +% +% \DescribeMacro{\immediatewriteaux} You can also write arbitrary +% commands to the aux file, if you find a use for this. +% \cmd{\writeaux}\marg{commands} writes the commands to the aux file, +% using a \emph{whatsit} as usual. +% \cmd{\immediatewriteaux}\marg{commands} does the same, but with +% \cmd{\immediate}. The commands in their argument need to be properly +% protected. It is best to define one command to perform all the tasks +% that you want to be done in the aux file. You can then put this +% command into the aux file with \cmd{\macrotoaux}\marg{one\_command}, +% without further protection, because this is done internally. Here's +% an example: +% +%\section{The test suite} +%\label{sec:testsuite} +% +% The principles of the test suite will be described elsewhere. Here +% are just some remarks on how it works in this particular case. +% \begin{itemize} +% \item In the first run, the file switch-onlytwo.tex does not +% exist. Therefore, \cmd{\volume} is undefined, and the complete +% document is processed, producing aux files also for the files that +% will not be included in later runs. +% \end{itemize} +% +% \StopEventually{\PrintIndex\PrintChanges} +% +% \part{Implementation} +% +% +% +%\section{The \package{nowtoaux} package} +%\label{sec:nowtoaux} +% +% \begin{macro}{\immediateaddtocontents} +% \begin{macro}{\immediate@protected@write} +% The definitions of \cmd{\immediateaddtocontents} and +% \cmd{\immediate@protected@write} are taken from the definition of +% \cmd{\addtocontents} in \package{ltsect.dtx} and \cmd{\protected@write} +% in \package{ltfiles.dtx}, and the only change is the addition of +% \cmd{\immediate} before \cmd{\write}. +% +% +% \begin{macrocode} +%<*nowtoaux> +\long\def\immediateaddtocontents#1#2{% + \immediate@protected@write\@auxout + {\let\label\@gobble \let\index\@gobble \let\glossary\@gobble}% + {\string\@writefile{#1}{#2}} +} +\long\def \immediate@protected@write#1#2#3{% + \begingroup + \let\thepage\relax + #2% + \let\protect\@unexpandable@protect + \edef\reserved@a{\immediate\write#1{#3}}% + \reserved@a + \endgroup + \if@nobreak\ifvmode\nobreak\fi\fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{\macrotoaux} +% \begin{macro}{\immediatewriteaux} +% \begin{macro}{\writeaux} +% Here come three goodies: \cmd{\immediatewriteaux} allows you to +% write arbitrary commands to the |aux| file. \cmd{\writeaux} does +% the same, but in the standard way, without \cmd{\immediate}. The +% commands in their argument need to be properly protected. It is +% best to define one command to perform all the tasks that you want +% to be done in the aux file. You can then put this command into the +% aux file with \cmd{\macrotoaux}, without further protection, +% because this is done internally. +% +% \begin{macrocode} +\long\def\writeaux#1{% + \protected@write\@auxout + {\let\label\@gobble \let\index\@gobble \let\glossary\@gobble}% + {#1} +} +\long\def\immediatewriteaux#1{% + \immediate@protected@write\@auxout + {\let\label\@gobble \let\index\@gobble \let\glossary\@gobble}% + {#1} +} +\long\def\macrotoaux#1{% + \immediatewriteaux{\string#1} +} +%</nowtoaux> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +%\section{The \package{volumes} Package} +%\label{sec:volumes-impl} +% +%\subsection{Option handling and needed packages} +%\label{sec:options} +% +% For the all options, we simply create a conditional that is checked +% later, when the necessary commands have been or will be +% defined. Furthermore, we need the \package{nowtoaux} helper package. +% +% \begin{macrocode} +%<*volumes> +\newif\if@allincludes\@allincludestrue +\newif\if@tocall\@tocallfalse +\newif\if@lofall\@lofallfalse +\newif\if@lotall\@lotallfalse +\DeclareOption{manual}{\@allincludesfalse} +\DeclareOption{tocall}{\@tocalltrue} +\DeclareOption{lofall}{\@lofalltrue} +\DeclareOption{lotall}{\@lotalltrue} +\ProcessOptions% +\RequirePackage{nowtoaux} +% \end{macrocode} +% +%\subsection{Suppressing \cmd{\addtocontents} commands} +%\label{sec:voladdtotoc} +% +% \begin{macrocode} +\newcommand{\vol@do@addto}[1]{#1} +\let\vol@dont@addto\@gobble +\newcommand{\voladdtotoc}[1]{% + \addtocontents{toc}{\protect\vol@maybe@addto@toc{#1}}% +}% +\let\vol@maybe@addto@toc\vol@do@addto +\newcommand{\voladdtolof}[1]{% + \addtocontents{lof}{\protect\vol@maybe@addto@lof{#1}}% +}% +\let\vol@maybe@addto@lof\vol@do@addto +\newcommand{\voladdtolot}[1]{% + \addtocontents{lot}{\protect\vol@maybe@addto@lot{#1}}% +}% +\let\vol@maybe@addto@lot\vol@do@addto +% \end{macrocode} +% +%\subsection{Suppressing entries in the table of contents} +%\label{sec:notoc} +% +% In order to get the table of contents, list of figures and list of +% tables with entries only for the part that we want to print, we +% redefine |\contentsline| to do nothing. This is done by writing +% |\let| assignments into the respective files (|*.toc|, |*.lof|, +% |*.lot|). +% +% \begin{macro}{\contentsline} +% \begin{macro}{\volumes@orig@contentsline} +% But we need to be able to suppress parts at the beginning, and +% reenable later parts. Therefore we save the old definition of +% \cmd{\contentsline} in the macro |\volumes@orig@contentsline|. If +% the \package{hyperref} Package will be loaded later, it will +% redefine |\contentsline|. Therefore we have to repeat our command +% after (and only if) \package{hyperref} has been loaded: +% +% \begin{macrocode} +\let\volumes@orig@contentsline\contentsline \RequirePackage{scrlfile} +\AfterPackage{hyperref}{\let\volumes@orig@contentsline\contentsline} +% \end{macrocode} +% +% The new |\contentsline| macro should do nothing, but just gobble its +% arguments. Again a \package{hyperref} problem: If the package has +% been loaded, |\contentsline| will have 4 arguments instead of 3. We +% do the same trick, but this time we also have to check whether +% \package{hyperref} has been loaded yet: +% +% \begin{macrocode} +\@ifpackageloaded{hyperref}{% + \let\volumes@new@contentsline\@gobblefour +}{% + \def\volumes@new@contentsline#1#2#3{} + \AfterPackage{hyperref}{% + \let\volumes@new@contentsline\@gobblefour + } +} +% \end{macrocode} +% +% We want to |\let| the |\contentsline| macro to the meaning we want +% in the |*.toc| file etc., but we cannot write directly to those +% files. Instead, we write to the |*.aux| file using +% \cmd{\immediateaddtocontents}. Commands written to the |aux| and +% |toc| file this way need to be proctected; in order to make this +% easier, we define macros that will do the |\let| assignment and can +% be proctected with one |\protect| command: +% +% \begin{macrocode} +\def\volumes@switch@orig@contentsline@toc{% + \let\contentsline\volumes@orig@contentsline% + \let\vol@maybe@addto@toc\vol@do@addto +} +\def\volumes@switch@new@contentsline@toc{% + \let\contentsline\volumes@new@contentsline% + \let\vol@maybe@addto@toc\vol@dont@addto +} +\def\volumes@switch@orig@contentsline@lof{% + \let\contentsline\volumes@orig@contentsline% + \let\vol@maybe@addto@lof\vol@do@addto +} +\def\volumes@switch@new@contentsline@lof{% + \let\contentsline\volumes@new@contentsline% + \let\vol@maybe@addto@lof\vol@dont@addto +} +\def\volumes@switch@orig@contentsline@lot{% + \let\contentsline\volumes@orig@contentsline% + \let\vol@maybe@addto@lot\vol@do@addto +} +\def\volumes@switch@new@contentsline@lot{% + \let\contentsline\volumes@new@contentsline% + \let\vol@maybe@addto@lot\vol@dont@addto +} +% \def\volumes@switch@orig@contentsline{% +% \let\contentsline\volumes@orig@contentsline} +% \def\volumes@switch@new@contentsline{% +% \let\contentsline\volumes@new@contentsline} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\volume@switch@off} +% \begin{macro}{\volume@switch@on} +% The actual writing to |*.aux| will done by \cmd{\volume@switch@on} +% and\linebreak[4] \cmd{\volume@switch@off}. While +% \cmd{\volume@switch@on} switches on unconditionally, +% \cmd{\volume@switch@off} checks whether any of the |tocall|, +% |lofall|, or |lotall| options was given; if writes to the +% respective file only if the option wasn't given. +% +% \begin{macrocode} +\def\volume@switch@off{% + \if@tocall\else% + \immediateaddtocontents{toc}{\protect\volumes@switch@new@contentsline@toc}% + \fi% + \if@lofall\else% + \immediateaddtocontents{lof}{\protect\volumes@switch@new@contentsline@lof}% + \fi% + \if@lotall\else% + \immediateaddtocontents{lot}{\protect\volumes@switch@new@contentsline@lof}% + \fi% +} +\def\volume@switch@on{% + \immediateaddtocontents{toc}{\protect\volumes@switch@orig@contentsline@toc}% + \immediateaddtocontents{lof}{\protect\volumes@switch@orig@contentsline@lof}% + \immediateaddtocontents{lot}{\protect\volumes@switch@orig@contentsline@lof}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +%\subsection{User commands for the appearance of volumes} +%\label{sec:conditional-usercomm} +% +% +% \begin{macro}{\allvolumescommand} +% \begin{macro}{\volumecommand} In order to allow the user to define +% commands that should be executed conditionally only if a +% particular volume is typeset, we provide the command +% \cmd{\volumecommand}\marg{number}\marg{\LaTeX\ commands}. +% Similarly, the macro\linebreak[4] +% \cmd{\allvolumescommand}\marg{\LaTeX{} commands} is executed when +% the whole document is typeset. The internal commands that are +% generated by both macros need to be set to \cmd{\relax}, so that +% no error occurs if the user does not use (some of) the +% \cmd{\volumecommand}s and \cmd{\allvolumescommand}. For the +% numbered \cmd{\volume@command@..}, this is done later. +% +% \begin{macrocode} +\def\volumecommand#1#2{% + \expandafter\def\csname volume@command@#1\endcsname{% + #2% + }% +} +\def\allvolumescommand#1{% + \def\all@volumes@command{#1}% +} +\let\all@volumes@command\relax +% \end{macrocode} +% \end{macro} +% \end{macro} +% +%\subsection{Determining which part(s) to typeset} +%\label{sec:determine-which} +% +% +% Now we define the macro that will finally be used to determine if, +% and which volume is typeset. The key is the macro \cmd{\volume} -- if +% it is undefined, the whole document will be typeset. If it is set to +% a number, the respective volume will be typeset. +% +% +%\subsubsection{Helper macros: checking for numbers} +%\label{sec:helper-macros} +% +% \begin{macro}{\ifnumber} +% In order to test whether \cmd{\volume}, if defined, is in fact a +% number, we use a command taken from \package{scrclass.dtx}, and +% explained there (albeit in german): +% +% \begin{macrocode} +\providecommand\ifnumber[3]{ + \begingroup\@tempswafalse\let\scr@next\test@number + \expandafter\scr@next#1\scr@next + \if@tempswa\endgroup#2\else\endgroup#3\fi +} +\providecommand*{\test@number}[1]{ + \ifx \scr@next#1 + \let\scr@next\relax + \else + \@tempcnta=\expandafter\expandafter\expandafter\number + \expandafter`#1\relax + \ifnum \@tempcnta>47\relax + \ifnum \@tempcnta<58\relax + \@tempswatrue + \else\@tempswafalse\fi + \else\@tempswafalse\fi + \if@tempswa\else\let\scr@next\gobble@till@next\fi\fi + \scr@next} +\providecommand*{\gobble@till@next}{} +\def\gobble@till@next#1\scr@next{} +% \end{macrocode} +% \end{macro} +% +% +%\subsubsection{Specifying the basename of included files} +%\label{sec:basename} +% +% \begin{macro}{\volumenname} +% The name of the included files corresponding to the individual +% volumes must end with a number, but it can have any legal filename +% before this. By default, |Buch1.tex|, |Buch2.tex| etc. are used, but +% this is stored in \cmd{\volume@name} and can be changed with the user +% command \cmd{\volumename}: +% +% \begin{macrocode} +\newcommand*{\volumename}[1]{% + \def\volume@name{#1}% +}% +\volumename{volume}% +% \end{macrocode} +% \end{macro} +% +% +%\subsubsection{Specifying constant \cmd{\include}'s} +%\label{sec:constants} +% +% \begin{macro}{\alwaysinclude} +% This macro is used to specify parts that should always be included, +% and can only be used with the |manual| option. +% \begin{macrocode} +\newcommand*{\alwaysinclude}[1]{% + \if@allincludes + \PackageError{volumes}{% + need option "manual" for \string\alwaysinclude.% + }{% + You must use the option "manual" when you want to use + \string\alwaysinclude, and\MessageBreak specify + the volumes using \string\volumeone\space etc. - see + the package documentation. + } + \else + \def\always@include{,#1} + \fi +} +\def\always@include{} +% \end{macrocode} +% \end{macro} +% +%\subsubsection{Typesetting the right part} +%\label{sec:the-right} +% +% \begin{macro}{\onlyvolume} +% The command that triggers conditional typesetting is +% \cmd{\onlyvolume}. If it is called with a number as optional +% argument, it defines \cmd{\volume} to expand to that number, meaning +% the volume to be typeset. If no optional argument is given, +% \cmd{\volume} is not assigned, but the check whether it is assigned is +% still done. This enables the user to switch between +% typesetting the whole document or only one volume without changing +% the file, by assigning \cmd{\volume} on the command line: +% \begin{verbatim} +% latex "\def\volume{3} \input{filename}" +% \end{verbatim} +% The real work is then done by \cmd{\@@onlyvolume}: +% \begin{macrocode} +\newcommand*{\onlyvolume}[1]{} +\def\onlyvolume{% + \@ifnextchar [{\@onlyvolume}{\@@onlyvolume} +} +\def\@onlyvolume[#1]{% + \ifnumber{#1}{% + \def\volume{#1} + }{% + \PackageError{volumes}{% + Argument to \string\onlyvolume\space must be a number% + }{% + The optional argument to \string\onlyvolume\space is used to + tell volumes.sty which volume it should typeset. You should have + specified a number there, but instead, you said: \volume% + }% + }% + \@@onlyvolume +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\volume} +% \begin{macro}{\@@onlyvolume} +% To define \cmd{\@@onlyvolume}, we first neeed two counters. Then +% we check whether \cmd{\volume} is defined -- if not, we \cmd{\let} +% all \cmd{\volume@switch@...}es to \cmd{\relax}. This is done for +% |numberofvolumes| volumes -- there is no user interface yet to +% change this value. Then we tell \LaTeX{} to execute +% \cmd{\all@volumes@command} at the begin of the document +% +% \begin{macrocode} +\newcounter{volume}% +\newcounter{numberofvolumes}\setcounter{numberofvolumes}{10}% +\def\@@onlyvolume{% + \ifx\volume\undefined% + \PackageWarningNoLine{volumes}{Typesetting complete document.} + \setcounter{volume}{0}% + \@whilenum\c@volume<\c@numberofvolumes\do + {% + \expandafter\let% + \csname volume@switch@\arabic{volume}\endcsname\relax% + \stepcounter{volume}% + }% + \setcounter{volume}{0}% + \AtBeginDocument{\all@volumes@command}% +% \end{macrocode} +% +% If \cmd{\volume} is defined, we \cmd{\let} all +% \cmd{\volume@switch@...}es to \cmd{\volume@switch@off}. Then we +% schedule the execution of the respective \cmd{\volume@command@...} +% to the begin of the document, and make sure only the right part is +% included. +% +% \begin{macrocode} + \else + \ifnumber{\volume}{% + \PackageWarningNoLine{volumes}{Typesetting part \volume.} + }{% + \PackageError{volumes}{\string\volume\space is defined, but not a + number}{% + The macro \string\volume\space is used to tell volumes.sty which + volume it should typeset. You have defined this macro, but it is + not a number. Instead, it is: \volume% + }% + }% + \setcounter{volume}{0}% + \@whilenum\c@volume<\c@numberofvolumes\do {% + \expandafter\let% + \csname volume@switch@\arabic{volume}\endcsname% + \volume@switch@off% + \stepcounter{volume}% + } + \setcounter{volume}{0}% + \AtBeginDocument{\csname volume@command@\volume\endcsname} + \expandafter\let% + \csname volume@switch@\volume\endcsname\volume@switch@on + \includeonly{\volume@name\volume\always@include}% + \fi +% \end{macrocode} +% +% If the |manual| option was given, we define \cmd{\volumeone}, +% \cmd{\volumetwo},\dots{} to be the corresponding +% \cmd{\volume@switch@...}. +% +% \begin{macrocode} + \if@allincludes\else% + \@ifundefined{volumelist}{% + \def\volumelist{one,two,three,four,five,six,seven,eight,nine,ten}% + }{}% + \@for\vol@num:=\volumelist\do + {% + \stepcounter{volume}% + \expandafter\let\csname volume\vol@num\expandafter\endcsname% + \csname volume@switch@\arabic{volume}\endcsname% + }% + \setcounter{volume}{0}% + \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\include} +% If the |manual| option was not given, we redefine |\include| so +% that it does the necessary switching. Otherwise, we define +% commands with no |@| signs as aliases for +% |\volume@switch@|\meta{number}. If the user wants more then ten +% volumes, or different names, she can define |\volumelist| herself, +% but before the package is loaded. +% +% TODO: Hier die Nummer als include-Argument einarbeiten! +% \begin{macrocode} +\setcounter{volume}{0}% +\if@allincludes% + \let\volume@orig@include\include% + \def\include{% + \stepcounter{volume}% + \csname volume@switch@\arabic{volume}\endcsname% + \volume@orig@include% + } +\fi +%</volumes> +% \end{macrocode} +% \end{macro} +% +% \clearpage +% \Finale +% +\endinput diff --git a/Master/texmf-dist/source/latex/volumes/volumes.ins b/Master/texmf-dist/source/latex/volumes/volumes.ins new file mode 100644 index 00000000000..d4c8e5c64ae --- /dev/null +++ b/Master/texmf-dist/source/latex/volumes/volumes.ins @@ -0,0 +1,88 @@ +%& -translate-file=cp8bit +\let\ifbeta\iftrue +%% $Id: volumes.ins,v 1.5 2004/06/18 13:57:47 frank Exp $ +%% +%% This file will generate fast loadable files from the dtx files in this +%% bundle when run through LaTeX or TeX. +%% +%% --------------------------------------------------- +%% +%% This system is distributed in the hope that it will be useful, +%% but WITHOUT ANY WARRANTY; without even the implied warranty of +%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +%% +%% IMPORTANT NOTICE: +%% +%% Copyright 2004 Frank Küster +%% All rights reserved. This package is licensed under the +%% LaTeX Project Public License Version 1.3 or later, at your choice. +%% See: http://www.latex-project.org/lppl/. +%% +%% +%% +%% --------------- start of docstrip commands ------------------ +%% +\def\batchfile{volumes.ins} +\input docstrip.tex + +\keepsilent +\ifbeta\askforoverwritetrue\else\askforoverwritetrue\fi + +\preamble +\endpreamble + +\ifToplevel{\ifx\generate\undefined +\Msg{**********************************************} +\Msg{*} +\Msg{* This installation requires docstrip} +\Msg{* version 2.3c or later.} +\Msg{*} +\Msg{* An older version of docstrip has been input} +\Msg{*} +\Msg{**********************************************} +\errhelp{Move or rename old docstrip.tex.} +\errmessage{Old docstrip in input path} +\batchmode +\csname @@end\endcsname +\fi +} + +\declarepreamble\mainpreamble + +Copyright (C) 2003 Frank Küster. + +All rights reserved. +\endpreamble +\declarepostamble\nullpostamble +\endpostamble + +%% File generation: + +\generate{% + \usepreamble\mainpreamble + \file{volumes.sty}{\from{volumes.dtx}{volumes}} + \file{nowtoaux.sty}{\from{volumes.dtx}{nowtoaux}} +} + +\ifToplevel{ +\Msg{***********************************************************} +\Msg{*} +\ifbeta +\Msg{* THIS IS A BETA VERSION. YOU SHOULD NOT INSTALL OR USE IT!} +\Msg{* THERE MAY BE A LOT OF BUGS AT THIS VERSION!} +\Msg{* PLEASE INSTALL THE RELEASE YOU CAN FIND AT CTAN!} +\Msg{*} +\else +\Msg{* To finish the installation you have to move} +\Msg{* volumes.sty into a directory searched by TeX.} +\Msg{*} +\Msg{* For the documentation see the README file.} +\Msg{*} +\Msg{* Happy TeXing} +\fi +\Msg{***********************************************************} +} + +\endinput +%% +%% end of file `volumes.ins' |