summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/excludeonly/excludeonly.sty
blob: 91c07aef022a2e2361fa1ffcb9a1e6721a0e212c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
% excludeonly.sty 
% Dan Luecking <luecking@uark.edu> and Donald Arseneau <asnd@triumf.ca>
%
% This software is contributed to the public domain.
%
% Usage:
% ~~~~~~
% In the document preamble, "\excludeonly{aaa,bbb}" will prevent files
% aaa.tex and bbb.tex from being typeset by \include{aaa} and \include{bbb}. 
% If both \includeonly and \excludeonly are used, then only the files
% permitted by both declarations are used:
% \includeonly{aaa,bbb}
% \excludeonly{bbb,ccc}
% results in only aaa being included.
%
% This behavior contradicts the name "exclude only" but the name is 
% desirable anyway to show the relationship with \includeonly.
%     In case it is actually desireable that \excludeonly lives up
% to its name, and causes *all* parts to be included, except those
% explicitly listed for exclusion, there is an [only] package option 
% \usepackage[only]{excludeonly}
% The effect of this is to override any \includeonly commands.
%
% Conflicts:
% ~~~~~~~~~~ 
% This package redefines the internal \@include command, so it could
% conflict with other redefinitions.  Known conflicts are with document 
% classes "paper.cls" and "thesis.cls" by Wenzel Matiaske. 
%     A different method for implementing \excludeonly would be to 
% redefine \@setckpt to compile a file-inclusion list (\@partlist)
% that accounts for exclusions.  Surprisingly, several packages
% redefine \@setckpt, so this alternative would have more conflicts.
%
\ProvidesPackage{excludeonly}[2003/03/14 v1.0 %
   eponymous command opposite to \string\includeonly]
%
\newif\if@excludesw \@excludeswfalse
\let\ExOn@swaset\relax
%
\DeclareOption{only}{\let\ExOn@swaset\@tempswatrue}
\ProcessOptions
%
\newcommand*{\excludeonly}[1]{%
  \@excludeswtrue
  \edef\@excllist{\zap@space#1 \@empty}}
\@onlypreamble\excludeonly
%
\def\@include#1 {%
  \clearpage
  \if@filesw
    \immediate\write\@mainaux{\string\@input{#1.aux}}%
  \fi
  \@tempswatrue
  \if@partsw
    \@tempswafalse
    \edef\reserved@b{#1}%
    \@for\reserved@a:=\@partlist\do
      {\ifx\reserved@a\reserved@b\@tempswatrue\fi}%
  \fi
  \if@excludesw
    \ExOn@swaset
    \edef\reserved@b{#1}%
    \@for\reserved@a:=\@excllist\do
      {\ifx\reserved@a\reserved@b\@tempswafalse\fi}%
  \fi
  \if@tempswa
    \let\@auxout\@partaux
    \if@filesw
      \immediate\openout\@partaux #1.aux
      \immediate\write\@partaux{\relax}%
    \fi
    \@input@{#1.tex}%
    \clearpage
    \@writeckpt{#1}%
    \if@filesw
      \immediate\closeout\@partaux
    \fi
  \else
    \deadcycles\z@
    \@nameuse{cp@#1}%
  \fi
  \let\@auxout\@mainaux}
\endinput