summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/frankenstein/unsupported/includex.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/latex/frankenstein/unsupported/includex.sty')
-rw-r--r--Master/texmf-dist/doc/latex/frankenstein/unsupported/includex.sty492
1 files changed, 492 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/frankenstein/unsupported/includex.sty b/Master/texmf-dist/doc/latex/frankenstein/unsupported/includex.sty
new file mode 100644
index 00000000000..0d0c58a8f66
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/frankenstein/unsupported/includex.sty
@@ -0,0 +1,492 @@
+%^^A* legal notices
+% \iffalse
+%
+% This file is part of the Frankenstein bundle, comprising the
+% files listed in the file Manifest.txt. You should have
+% received the complete bundle when you received this file.
+%
+% Copyright 1995-2001 Matt Swift <swift@alum.mit.edu>.
+%
+% This file contains both the code and documentation for the
+% includex LaTeX package. It will work ONLY if it is placed in
+% a proper directory. Files called README, INSTALL,
+% includex.tex includex.ins, and includex.dvi
+% should have also been distributed to you with this file. See
+% README for more information on how to generate a version of
+% this file that will work faster than this one.
+%
+% This program is free software; you may redistribute it and/or
+% modify it under the conditions of the LaTeX Project Public
+% License, either version 1.2 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.2 or later is
+% part of all distributions of LaTeX version 1999/12/01 or later.
+%
+% This program 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. See the
+% LaTeX Project Public License for more details.
+%
+% \fi
+%
+%^^A* checks
+%
+%^^A NOTE: The character table, with two %'s, will get written to all files.
+%% \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 \~}
+%
+% \CheckSum{227}
+%
+% \begin{abstract}
+% Includex allows you to include just the contents of one source file into
+% another, ignoring the text outside the
+% \code{\begin{document}}\lips\code{\end{document}} in the included file.
+%
+% This package is useful but may have problems and is unsupported.
+%
+% See also the \package{newclude} package.
+% \end{abstract}
+% \tableofcontents
+%
+% \part{Discussion}
+% \section{Including Files}
+%
+% \DescribeMacro{\include*}
+% \cs\include was always pretty useless to me because it did a \cs\clearpage
+% before and after the \cs\input. The macro |\include*| is defined below to be
+% like \cs\include but without the \cs\clearpage s.
+%
+% The other thing we do is define a command \cs\includedoc, which includes a
+% file which is allowed to have its own \cs\documentclass and |\begin{document}|
+% and |\end{document}| and \cs\usepackage commands.
+%
+% This opens up a whole new world of truly modular \LaTeX{} files. There is
+% even nothing special about extracting the |document| environment, we can
+% extract \emph{any} environment, or perhaps even other things.
+%
+% There are some problems, however. Maybe the \cs\usepackage is necessary,
+% maybe it would conflict. Same with other commands like the \cs\newcommand
+% family. It is simply not (yet) an issue in \LaTeX{} design to consider the
+% implications of parent files. The problems are not insurmountable. We can
+% begin by working with a convention, and ultimately maybe make some changes in
+% certain macros. I will be getting to all this. I admit I have not looked
+% carefully to see whether the design specifications of \LaTeX3{} address these
+% important issues.
+%
+% The macros here will be useful in many circumstances, when the included files
+% are themselves simple.
+%
+% \DescribeMacro{\includedoc}
+% \DescribeMacro{\includedoc*}
+% \DescribeMacro{\includedocskip}
+% \DescribeMacro{\includedocskip*}
+% There are now two main commands, \cs\includedoc and \cs\includedocskip,
+% each with a |*| version analogous to the new \cmd{include*}. Each take a
+% filename as an argument just like \cs\include.
+%
+% \cs\includedoc\marg{filename} reads everything in the file except for
+% \cs\documentclass, \cs\usepackage, |\begin{document}|, |\end{document}|
+% (and whatever follows it).
+%
+% \cs\includedocskip\marg{filename} does the same except it also skips
+% everything between \cs\documentclass and |\begin{document}|.
+%
+% \DescribeMacro{\disable}
+% At present there is a makeshift way to ignore additional commands when
+% using \cs\includedoc and \cs\includedocskip. If you want to cause \cs\foo
+% which takes no arguments to be disabled, say |\disable{\let\foo\relax}|. If
+% \cs\foo takes one mandatory argument, say |\let\foo\Gobble| instead. If
+% \cs\foo takes one optional and one mandatory, say |\let\foo\GobbleOM|. If
+% \cs\foo takes two mandatory arguments, say |\let\foo\GobbleMM|. For other
+% permutations of arguments, you can extrapolate from the macros defined
+% below.
+%
+% \StopEventually{}
+%
+% \part{Implementation}
+%
+% \section{Version control}
+%
+% \begin{macro}{\fileinfo}
+% \begin{macro}{\DoXUsepackagE}
+% \begin{macro}{\HaveECitationS}
+% \begin{macro}{\fileversion}
+% \begin{macro}{\filedate}
+% \begin{macro}{\docdate}
+% \begin{macro}{\PPOptArg}
+% These definitions must be the first ones in the file.
+% \begin{macrocode}
+\def\fileinfo{extra ways to include files}
+\def\DoXPackageS {}
+\def\fileversion{v0.6a}
+\def\filedate{1999/02/23}
+\def\docdate{1999/02/23}
+\edef\PPOptArg {%
+ \filedate\space \fileversion\space \fileinfo
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% If we're loading this file from a \cs\ProcessDTXFile command (see the
+% \package{compsci} package), then \cs\JusTLoaDInformatioN will be defined;
+% othewise we assume it is not (that's why the FunkY NamE).
+%
+% If we're loading from \cs\ProcessDTXFile, we want to load the packages listed
+% in \cs\DoXPackageS (needed to typeset the documentation for this file) and
+% then bail out. Otherwise, we're using this file in a normal way as a
+% package, so do nothing. \cs\DoXPackageS, if there are any, are declared in
+% the \ext{dtx} file, and, if you're reading the typeset documentation of this
+% package, would appear just above. (It's OK to call \cs\usepackage with an
+% empty argument or \cs\relax, by the way.)
+% \begin{macrocode}
+\makeatletter% A special comment to help create bst files. Don't change!
+\@ifundefined{JusTLoaDInformatioN} {%
+ }{% ELSE (we know the compsci package is already loaded, too)
+ \UndefineCS\JusTLoaDInformatioN
+ \SaveDoXVarS
+ \eExpand\csname DoXPackageS\endcsname\In {%use \csname in case it's undefined
+ \usepackage{#1}%
+ }%
+ \RestoreDoXVarS
+ \makeatother
+ \endinput
+}% A special comment to help create bst files. Don't change!
+% \end{macrocode}
+%
+% Now we check for \LaTeX2e and declare the LaTeX package.
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{includex}[\PPOptArg]
+% \end{macrocode}^^A special comment to help create bst files. Don't change!
+%
+% ^^A NOTE: We have to compensate for the above backslashes, which are not
+% ^^A actually in the .dtx file the author works on, by adding to the
+% ^^A CheckSum.
+%%
+% \AddToCheckSum{17}^^A `dtx-update-checksum' automatically handles this.
+% \AddToCheckSum{7}^^A The half a macrocode env. at the top is missed, however...
+% \AddToCheckSum{10}^^A ... and so are the 5 \defs from the .dtx file
+% ^^A that precede it.
+% \IfCitations {%
+% \AddToCheckSum{2}^^A When \initelyHavECitationS is defined in
+% } ^^A the .dtx file, we need 2 more in the CheckSum.
+%
+%
+% \section{Requirements}
+%
+% Now we declare the package, check for \LaTeX2e, and load the other packages
+% needed.
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{includex}
+\RequirePackage{moredefs}
+% \end{macrocode}
+%
+% \section{Disabling things}
+%
+% \begin{macro}{\disable}
+% This allows the disabling hacks.
+% \begin{macrocode}
+\ReserveCS\DisableMonster % This line is elsewhere for main package
+\newcommand\disable[1] {%
+ \g@addto@macro\DisableMonster{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \section{New things}
+%
+% \begin{macro}{\sc@saved@include}
+% \begin{macro}{\include}
+% \begin{macro}{\sc@include}
+% \begin{macro}{\sc@@include}
+% This is a simple redefinition of \cs\include without the \cs\clearpage
+% commands. Nothing tricky going on.
+% \begin{macrocode}
+\newlet\sc@saved@include\include
+\renewcommand\include {%
+ \@ifstar
+ \sc@include
+ \sc@saved@include
+}
+\newcommand\sc@include {%
+ \relax
+ \ifnum\@auxout=\@partaux
+ \@latex@error{\string\include\space cannot be nested}\@eha
+ \else
+ \expandafter\sc@@include
+ \fi
+}
+\newcommand\sc@@include[1] {%
+ \if@filesw
+ \immediate\write\@mainaux{\string\@input{#1.aux}}%
+ \fi
+ \@tempswatrue
+ \if@partsw
+ \@tempswafalse
+ \edef\@tempb{#1}%
+ \@for \@tempa:=\@partlist
+ \do{\ifx\@tempa
+ \@tempb
+ \@tempswatrue
+ \fi}%
+ \fi
+ \if@tempswa
+ \let\@auxout\@partaux
+ \if@filesw
+ \immediate\openout\@partaux #1.aux%
+ \immediate\write\@partaux{\relax}%
+ \fi
+ \@input@{#1.tex}%
+ \@writeckpt{#1}%
+ \if@filesw
+% NOTE: Robin took out the \immediate here.
+% \immediate\closeout\@partaux
+ \closeout\@partaux
+ \fi
+ \else
+ \@nameuse{cp@#1}%
+ \fi
+ \let\@auxout\@mainaux
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% Now we start dealing with the much more tricky extraction of the |document|
+% environment.
+%
+% We start with considering how to quit inputting a file. The idea is to make
+% the |\end{document}| command of the included file call \cs\endinput. But
+% there is a hitch that characters on the line after the |\end{document}| get
+% inserted when you don't want them to. To beat that limitation, we have to do
+% some work.
+%
+% \begin{macro}{\sc@radical@shutdown}
+% We will add a bunch of commands to this macro, with the idea of \cs\catcode ing
+% everything and its brother to a comment. This would be a brute force
+% method!
+% \begin{macrocode}
+\ReserveCS\sc@radical@shutdown
+% \end{macrocode}
+% First log a message that we're about to do some crazy things. In case
+% something ever goes wrong, this might help.
+% \begin{macrocode}
+\addto@macro\sc@radical@shutdown {%
+ \PackageInfo{includex}{\protect\sc@radical@shutdown\space beginning}%
+}
+% \end{macrocode}
+% Now we start adding \cs\catcode commands. These first two should be
+% redundant; but just in case someone changed things\lips.
+% \begin{macrocode}
+\addto@macro\sc@radical@shutdown{\catcode`\%=14} % 14 = comment
+\addto@macro\sc@radical@shutdown{\catcode`\^=7} % 7 = superscript
+% \end{macrocode}
+% \begin{macro}{\sc@disable@char}
+% Next, we define a command we weill use in a loop in a moment.
+% \begin{macrocode}
+\newcommand\sc@disable@char[1] {%
+ \addto@macro\sc@radical@shutdown
+ {\catcode`#1=14}} % 14 = comment
+% \end{macrocode}
+% \end{macro}
+% The following list contains every keyboard char except these three, which are
+% treated specially: |%#|.
+% The first is already a comment, and we handle the second in a moment. Each
+% character in the following list is \cs\catcode d to a comment:
+% \begin{macrocode}
+\@tfor\sc@t@a:=abcdefghijklmnopqrstuvwxyz%
+ ABCDEFGHIJKLMNOPQRSTUVWXYZ%
+ ~!@$&*()_+-=[]|/?.,<>%
+ 1234567890%
+ `'";:%
+ \^\\\{\}\ % this is really the chars "^\{}" and space
+ \do {\expandafter\sc@disable@char\sc@t@a}
+% \end{macrocode}
+% We add |#| separately, because it's tricky or impossible to put it into the
+% list we just used.
+% \begin{macrocode}
+\sc@disable@char\#
+% \end{macrocode}
+% We end the macro with \cs\endinput. This has to come after all the previous,
+% otherwise, \TeX{} goes ahead and reads to the end of the line immediately,
+% with regular catcodes. This is a good theory, I'm not sure it's necessary.
+% \begin{macrocode}
+\addto@macro\sc@radical@shutdown{\endinput}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\sc@radical@shutdown@aftergroup}
+% We need to use |\sc@radical@shutdown| this way.
+% \begin{macrocode}
+\newcommand\sc@radical@shutdown@aftergroup {%
+ \aftergroup\sc@radical@shutdown
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\sc@begindoc@toks}
+% \begin{macro}{\sc@enddoc@toks}
+% These are for \cs\AtBeginIncludedDocument and \cs\AtEndIncludedDocument.
+% \begin{macrocode}
+\newtoks\sc@begindoc@toks
+\sc@begindoc@toks{}
+\newtoks\sc@enddoc@toks
+\sc@enddoc@toks{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\AtBeginIncludedDocument}
+% The analogue of \cs\AtBeginDocument.
+% \begin{macrocode}
+\newcommand\AtBeginIncludedDocument[1] {%
+ \sc@begindoc@toks\expandafter{\the\sc@begindoc@toks#1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\AtEndIncludedDocument}
+% The analogue of \cs\AtEndDocument
+% \begin{macrocode}
+\newcommand\AtEndIncludedDocument[1] {%
+ \sc@enddoc@toks\expandafter{\the\sc@enddoc@toks#1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\includedoc}
+% \begin{macro}{\includedoc*}
+% Now we start from the other end, defining the user command.
+% \begin{macrocode}
+\newcommand\includedoc {%
+% Robin's new:
+ \@ifstar {%
+ \def\sc@includebit@cmd{\include*}\sc@includebit
+ }{% ELSE
+ \let\sc@includebit@cmd\include\sc@includebit
+ }%
+}
+
+% My old:
+% {\sc@includebit}
+% {\clearpage
+% \sc@includebit[\clearpage]}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\sc@includebit}
+% The commented-out code is for some eventual extensions.
+%
+% Interface is \cmd{sc@includebit}\oarg{postlude}\marg{file} (where
+% \oarg{postlude} is command(s) to be executed after the inclusion is
+% complete); it is assumed that \cmd{sc@includebit@cmd} is either \cs\include
+% or \cmd{include*}
+% \begin{macrocode}
+\newcounter{sc@count}
+\newcounter{bit}
+\newcommand\sc@includebit [2] [] {%
+ \setcounter{sc@count}{\thebit}%
+ \begingroup
+ \DisableMonster
+ \let\usepackage\GobbleOM
+% Robin's new:
+ \def\enddocument {%
+ \makeatletter
+ \the\sc@enddoc@toks
+ \sc@radical@shutdown@aftergroup
+ }
+% My old:
+% \let\enddocument\sc@radical@shutdown@aftergroup
+ \let\documentclass\GobbleOM
+ \let\documentstyle\GobbleOM % why worry about branching if 2.09..
+ \def\document {%
+ \the\sc@begindoc@toks
+ }%
+ \def\IncludedJobname {#2}%
+ \sc@includebit@cmd{#2}%
+ \endgroup
+ \par
+ #1
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\includedocskip}
+% \begin{macro}{\includedocskip*}
+% Now we make a similar command that \emph{entirely} skips the preamble,
+% whereas \cs\includedoc only skipped those commands that we specifically
+% disabled. Obviously this whole business of the preamble needs to be
+% radically reconceived if convenient modularity of documents is to be had. At
+% the moment, no distinction is made between things like \cs\newcommand and
+% \cs\usepackage that should be exported to a parent file, and those things that
+% should not.
+% \begin{macrocode}
+\newcommand\includedocskip {%
+ \@ifstar {%
+ \sc@includebitskip
+ }{% ELSE
+ \clearpage
+ \sc@includebitskip[\clearpage]%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% I tried combining |\sc@includebitskip| and |\sc@includebit| but something
+% changed when I used a conditional to do this. I'm sure the problem could be
+% figured out and the two combined.
+%
+% \begin{macro}{\sc@includebitskip}
+% We begin skipping with the \cs\documentclass or \cs\documentstyle command, and
+% stop with the |\begin{document}| command. With some hacking to the new
+% |verbatim| environment, this could be done. I haven't done this yet, so this
+% is implemented by stuffing everything into a macro argument. I can't think
+% of a \cs\begin occurring between \cs\documentclass the \cs\begin document, but
+% that will screw things up if it does.
+%
+% The commented lines here are once again for a future extension.
+% \begin{macrocode}
+\newcommand\sc@includebitskip [2] [] {%
+ \setcounter{sc@count}{\thebit}%
+ \begingroup
+ \DisableMonster
+ \let\enddocument\sc@radical@shutdown@aftergroup
+ \long\def\documentclass ##1\begin{%
+ \begingroup
+ \def\@currenvir{document}%
+ \GobbleM
+ }% "{document}" is still to be read.
+ \let\documentstyle\documentclass
+ \include*{#2}%
+ \endgroup
+ \par
+ #1\relax
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \Finale