summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/texsis/base/TXSconts.tex
blob: eb03f7606f1ff3a12c76a4b4a2a0fa919867aeaf (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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
%% file: TXSconts.tex - Table of Contents - TeXsis version 2.18
%% $Id: TXSconts.tex,v 18.0 1999/07/09 17:26:11 myers Exp $
%======================================================================*
%
%   These macros are an easy way to make a table of contents.
% An entry in the table of contents is created with \addTOC like so:
%
%       \addTOC{level}{title-text}{page}
%
% The level is a number 0, 1, 2, etc for chapters, sections or
% subsections and is used to control the indentation of the entry.
% The page number should probably be {\folio}, so that it comes out
% correctly, but you can use anything else you like.
% 
% \addTOC writes the table of contents information to a file called
% \jobname.toc. At the end of the job you simply say \Contents to read
% in this information and actually create the table of contents.
% \Contents does not print any heading or change the page numbering --
% you must take care of that yourself.
%
% If you include \TOCcID{chapter-id} in the title-text then the 
% chapter-id will or will not be printed in the title depending on
% whether you have set \showchaptIDtrue or \showchaptIDfalse at the
% time you say \Contents.  Similarly, \TOCsID{section-id} displays the
% section-id if \showsectIDtrue.  For example, if you say 
%
%       \addTOC{1}{\TOCsID{3.14}Section of $\pi$}{\folio}
%
% then the section number 3.14 will or will not be displayed when
% \Contents is invoked, depending on \ifshowsectID.
%
% You can write anything you want to the table of contents file by
% saying \TOCwrite{stuff}.  Use this to insert formatting information
% or headings.
%
% Note that no table of contents information is written if \Contentsfalse
% is set.  This is the default in TeXsis for most document formats
% except \book and \thesis,  so you should explicitly say \Contentstrue
% to get a table of contents.  If this file is \input separately then
% \Contentstrue is already set.  
%
% This file is a part of TeXsis, but may be used by itself with Plain TeX.
% (In that case \TOCcID and \TOCsID always show their arguments.)
%
% This file is a part of TeXsis.
% (C) copyright 1991, 1994, 1997 by Eric Myers and Frank Paige.
%----------------------------------------------------------------------*
\message{Table of Contents.}
\catcode`@=11

% I/O and switches, etc:

\newwrite\TOCout                        % table of contents temp file
\newskip\TOCmargin \TOCmargin=3cm       % right margin indent for TOC

\newif\ifContents                       % do we write out to table of contents?
\Contentstrue                           % default is true if loaded by itself

\def\ContentsSwitchtrue{\Contentstrue}  % \@obsolete in 2.18
\def\ContentsSwitchfalse{\Contentsfalse}% \@obsolete in 2.18

%---------------------------*
% Initialization:  open the output file

\def\TOCinit{%  open and initialize Table of Contents file
 \ifContents                                    % is switch on?
  \immediate\openout\TOCout=\jobname.toc        % yes: then open file
  \immediate\write\TOCout{\@comment Table of Contents for job `\jobname'
                                        -- Created at \runtime}%
  \immediate\write\TOCout{\@comment ====================================}%
  \gdef\TOCinit{\relax}%                        % initialize only once!
 \fi}

% \TOCwrite lets you write to the Table of Contents file

\def\TOCwrite#1{\TOCinit\ifContents\write\TOCout{#1}\fi}

%---------------------------*
% \addTOC#1#2#3 adds a chapter, section, etc. to the table of contents,
% by writing the arguments to the .toc file in just the way \TOCitem
% wants to read them.  The arguments are:
%       #1 = 0 for chapter, 1 for section, 2 for subsection
%       #2 = title text
%       #3 = page number

\def\addTOC#1#2#3{% add entry to Table of Contents
   \ifContents                                  % only if enabled
     \TOCinit                                   % make sure file is open
     \write\TOCout{\string\TOCitem{#1}}%        % type of entry
     \edef\@line@{{{#2}}}%                      % expand title text
     \write\TOCout\@line@                       % write title text to file
     \write\TOCout{{#3}\@comment}%              % write page number to file
   \fi}   

% \TOCcID and \TOCsID just give their names as a \string, so they
% can be written to the file.  They are re-defined to their active
% forms later by \Contents.

\def\TOCcID{\string\TOCcID}\def\TOCsID{\string\TOCsID}% 

%---------------------------*
% \TOCitem processes a Table of Contents entry. The arguments are the
% same as for \addTOC.  

\def\TOCitem#1#2#3{%          process a Table of Contents item
   \ifcase#1\bigskip                            % \bigskip for chapters,
     \or\medskip                                % \medskip for sections
     \or\smallskip\fi                           % \smallskip for subsections
   \begingroup                                  %
     \advance\leftskip by #1\parindent          % indent sub-items
     \raggedright\tolerance=1700                % don't justify
     \advance\rightskip by \TOCmargin           % right margin comes in, but
     \parfillskip=-\TOCmargin                   % page number at edge of page
     \hangindent=1.41\parindent\hangafter=1     % hanging indentation
     \noindent #2\hskip 0pt plus 10pt           % the text
     \leaddots                                  % leaders to edge
     \hbox to 2em{\hss\linkto{page.#3}{#3}}%    % the page number
     \vskip 0pt                                 % end paragraph
   \endgroup                                    %
   }

% Leaders for dots:

\def\leaddots{\leaders\hbox to 10pt{\hss.\hss}\hfill}

%---------------------------*
% \Contents just reads and prints the table of contents file.
% \label is disabled since it is not really part of the title. 

\def\Contents{%  print out table of contents
   \immediate\closeout\TOCout                   % close the .toc file!
   \immediate\openin\TOCout=\jobname.toc        % now open it to read
   \ifeof\TOCout\closein\TOCout                 % if EOF just close it
     \emsg{> \string\Contents: no Table of Contents file \jobname.toc.}%
   \else\immediate\closein\TOCout               % else close it and read in
     \begingroup                                % make this local
       \def\label##1{}\relax                    % disable \label in .toc file
       \catcode`@=11\catcode`"=12               % no fancy active characters
       \catcode`(=12\catcode`)=12               % no active ( or )
       \catcode`[=12\catcode`]=12               % no active [ or ]
       \def\TOCcID##1{\ifshowchaptID{##1} \fi}% % activate \TOCcID
       \def\TOCsID##1{\ifshowsectID{##1} \fi}%  % activate \TOCsID
       \ContentsFormat                          % customize layout
       \noindent                                % supress any \par indent
       \input \jobname.toc \relax               % read in the contents file
     \endgroup                                  %
   \fi}

\let\contents=\Contents                         % synonym (since 2.14)

% \ContentsFormat is done before the table of contents and lets
% you customize the way the table is displayed. For example
% you could say  \def\mib{}\def\n{} to turn off \mib and line breaks. 

\def\ContentsFormat{\relax}             % default does nothing

%---------------------------*
% Plain TeX compatability:  you can use these macros with Plain TeX
% simply by saying '\input TXSconts.tex ', but to do so we need to
% make sure that the following macros from other parts of TeXsis are
% defined or faked:

\ifx\emsg\undefined             % if \emsg is undefined this is not TeXsis
   \def\emsg#1{\immediate\write16{#1}}%  simple version of \emsg
   {\catcode`\%=11 \gdef\@comment{% }}%  \@comment for writing '% ' to file 
   \def\ifshowchaptID#1\fi{#1}\def\ifshowsectID#1\fi{#1}%
   \def\runtime{\the\year/\the\month/\the\day\space\the\time}%
   \def\linkto#1#2{\relax}%
\fi

%======================================================================*
%                 (OLD TEXSIS 2.13 -- to be removed!)
%  \addsectioncont#1#2#3 adds section number #1, with title #2, and
%  level #3 (0 for chapter, 1 for section, 2 for subsection) to the
%  table of contents page.  This is obsolete and replaced by \addTOC

\def\addsectioncont#1#2#3{\@obsolete\addsectioncont\addTOC  
  \addTOC{#1}{#2}{#3}}

%>>> EOF TXSconts.tex <<<