Update LuaTeX testfiles for ^@ change
[latex2e.git] / trunk / base / ltsect.dtx
blob046932e603f6387de1e027ea540e61b349e7987d
1 % \iffalse meta-comment
3 % Copyright 1993-2017
4 % The LaTeX3 Project and any individual authors listed elsewhere
5 % in this file.
7 % This file is part of the LaTeX base system.
8 % -------------------------------------------
10 % It may be distributed and/or modified under the
11 % conditions of the LaTeX Project Public License, either version 1.3c
12 % of this license or (at your option) any later version.
13 % The latest version of this license is in
14 %    http://www.latex-project.org/lppl.txt
15 % and version 1.3c or later is part of all distributions of LaTeX
16 % version 2005/12/01 or later.
18 % This file has the LPPL maintenance status "maintained".
20 % The list of all files belonging to the LaTeX base distribution is
21 % given in the file `manifest.txt'. See also `legal.txt' for additional
22 % information.
24 % The list of derived (unpacked) files belonging to the distribution
25 % and covered by LPPL is defined by the unpacking scripts (with
26 % extension .ins) which are part of the distribution.
28 % \fi
30 % \iffalse
31 %%% From File: ltsect.dtx
32 %<*driver>
33 % \fi
34 \ProvidesFile{ltsect.dtx}[2017/03/17 v1.1a LaTeX Kernel (Sectioning)]
35 % \iffalse
36 \documentclass{ltxdoc}
37 \GetFileInfo{ltsect.dtx}
38 \title{\filename}
39 \date{\filedate}
40  \author{%
41   Johannes Braams\and
42   David Carlisle\and
43   Alan Jeffrey\and
44   Leslie Lamport\and
45   Frank Mittelbach\and
46   Chris Rowley\and
47   Tobias Oetiker\thanks{Tobi updated
48               the comments to `doc' conventions}\and
49   Rainer Sch\"opf}
51 \begin{document}
52  \MaintainedByLaTeXTeam{latex}
53  \maketitle
54  \DocInput{\filename}
55 \end{document}
56 %</driver>
57 % \fi
60 % \changes{v1.0o}{1995/05/07}{Use \cs{hb@xt@}}
61 % \changes{v1.0y}{1996/10/31}{Corrected and tidied documentation;
62 %                             removed long lines}
65 % \section{Sectioning Commands}
67 % This file defines the declarations such as |\author| which are used
68 % by |\maketitle|. |\maketitle| itself is defined by each class, not
69 % in the \LaTeX{} kernel.
71 % The second part of the file defines the generic commands used for
72 % defining sectioning commands such as |\chapter|. Again the actual
73 % document level commands are defined in the class files, in terms of
74 % these commands.
76 % \StopEventually{}
79 % \changes{v1.0a}{1994/03/04}{Initial version, split from latex.dtx}
80 % \changes{v1.0b}{1994/03/28}{Split further from ltherest.dtx}
81 % \changes{v1.0d}{1994/05/21}{Use new error commands}
82 % \changes{v1.0f}{1994/10/12}{Doc. typos}
83 % \changes{v1.0g}{1994/10/18}{Added \cs{normalcolor}}
84 % \changes{v1.0i}{1994/11/17}
85 %         {\cs{@tempa} to \cs{reserved@a}}
86 % \changes{v1.0m}{1995/05/03}{TO: Promoted documentation to doc.sty
87 %         standard}
89 %    \begin{macrocode}
90 %<*2ekernel>
91 \message{title,}
92 %    \end{macrocode}
94 % \subsection{The Title}
96 % \DescribeMacro{\title}
97 % The user defines the title and  author by the declarations
98 % |\title|\marg{name},
99 % \DescribeMacro{\author}
100 % |\author|\marg{name}
102 % \DescribeMacro{\date}
103 % Similarly the date is declared with
104 % |\date|\marg{date}.
106 % \DescribeMacro{\thanks}
107 % Inside these, the |\thanks|\marg{footnote text} command may be used
108 % to make acknowledgements, notice of address, etc.\ in a footnote.
109 % \DescribeMacro{\and}
110 % If there are multiple authors, they have to be separated with the
111 % |\and| command.
113 % \DescribeMacro{\maketitle}
114 % And finally, the |\maketitle| command produces the actual title,
115 % using the information previously saved with the other commands.
117 %  \begin{macro}{\title}
118 %  \begin{macro}{\@title}
119 % \changes{LaTeX2e}{1993/12/11}{Added default}
120 % |\title| for use in |\maketitle|. If not given |\maketitle| will
121 % produce an error message.
122 %    \begin{macrocode}
123 \def\title#1{\gdef\@title{#1}}
124 \def\@title{\@latex@error{No \noexpand\title given}\@ehc}
125 %    \end{macrocode}
126 %  \end{macro}
127 %  \end{macro}
129 %  \begin{macro}{\author}
130 %  \begin{macro}{\@author}
131 % \changes{LaTeX2e}{1993/12/11}{Added default}
133 %  |\author| for use in |\maketitle|. If not given |\maketitle| will
134 %  produce a warning message.
136 %    \begin{macrocode}
137 \def\author#1{\gdef\@author{#1}}
138 \def\@author{\@latex@warning@no@line{No \noexpand\author given}}
139 %    \end{macrocode}
140 %  \end{macro}
141 %  \end{macro}
143 %  \begin{macro}{\date}
144 %  \begin{macro}{\@date}
145 %    |\date| for use in |\maketitle|. If not given |\maketitle| will
146 %    produce |\today| as the default.
147 %    \begin{macrocode}
148 \def\date#1{\gdef\@date{#1}}
149 \gdef\@date{\today}
150 %    \end{macrocode}
151 %  \end{macro}
152 %  \end{macro}
154 % \changes{1.0h}{1994/11/04}{(ASAJ) Added \cs{protected@xdef} to
155 %    \cs{thanks}.}
156 % \begin{macro}{\thanks}
157 %    \begin{macrocode}
158 \def\thanks#1{\footnotemark
159     \protected@xdef\@thanks{\@thanks
160         \protect\footnotetext[\the\c@footnote]{#1}}%
162 %    \end{macrocode}
163 % \end{macro}
165 % \begin{macro}{\@thanks}
166 %    \begin{macrocode}
167 \let\@thanks\@empty
168 %    \end{macrocode}
169 % \end{macro}
170 % \begin{macro}{\and}
171 %    \begin{macrocode}
172 \def\and{%                  % \begin{tabular}
173   \end{tabular}%
174   \hskip 1em \@plus.17fil%
175   \begin{tabular}[t]{c}}%   % \end{tabular}
176 %    \end{macrocode}
177 % \end{macro}
179 %    \begin{macrocode}
180 \message{sectioning,}
181 %    \end{macrocode}
182 % \subsection{Sectioning}
185 % \begin{macro}{\@secpenalty}
186 %    \begin{macrocode}
187 \newcount\@secpenalty
188 \@secpenalty = -300
189 %    \end{macrocode}
190 % \end{macro}
192 % \begin{macro}{\if@noskipsec}
193 % \begin{macro}{\@noskipsectrue}
194 % \changes{1.0w}{1996/09/29}{Added documentation}
195 % Way back in 1991 (08/26) FMi \& RmS set the |\@noskipsec| switch
196 % to true for the preamble and to false in |\document|.
197 % This was done to trap lists and related text in the preamble but it
198 % does not catch everything.
199 %    \begin{macrocode}
200 \newif\if@noskipsec \@noskipsectrue
201 %    \end{macrocode}
202 % \end{macro}
203 % \end{macro}
205 % \begin{macro}{\@startsection}
207 % The |\@startsection{|\meta{name}|}{|\meta{level}|}{|%
208 %       \meta{indent}|}{|\meta{beforeskip}|}|\\
209 %     |{|\meta{afterskip}|}{|\meta{style}|}*[|\meta{altheading}%
210 %     |]{|\meta{heading}|}|
211 % command is the mother of all the user level sectioning commands.
212 % The part after the |*|, including the |*| is optional.
214 % \begin{description}
215 % \item[name:] e.g., 'subsection'
216 % \item[level:] a number, denoting depth of section -- e.g.,
217 %                  chapter = 0, section = 1, etc.
218 % \item[indent:] Indentation of heading from left margin
219 % \item[beforeskip:] Absolute value = skip to leave above the heading.
220 %                If negative, then paragraph indent of text following
221 %                heading is suppressed.
222 % \item[afterskip:] if positive, then skip to leave below heading, else
223 %                negative of skip to leave to right of run-in heading.
224 % \item[style:] Commands to set style. Since June 1996 release the
225 %               \emph{last} command in this argument may be a command
226 %                such as |\MakeUppercase| or |\fbox| that takes an
227 %                argument. The section heading will be supplied as the
228 %                argument to this command. So setting |#6| to, say,
229 %                |\bfseries\MakeUppercase| would produce bold,
230 %                uppercase headings.
231 % \end{description}
233 %  If `|*|' is  missing, then increment the counter.  If it is
234 %  present, then there should be no |[|\meta{altheading}|]| argument.
235 %  The command uses the counter 'secnumdepth'. It contains a pointer
236 %  to the highest section level that is to be numbered.
238 %  \textbf{Warning:}
239 %  The |\@startsection| command should be at the same or higher
240 %  grouping level as the text that follows it.  For example, you should
241 %  \emph{not} do something like
242 %  \begin{verbatim}
243 %      \def\foo{ \begingroup ...
244 %                   \paragraph{...}
245 %                 \endgroup}
246 %  \end{verbatim}
248 % Pseudocode for the |\@startsection| command
249 % \begin{oldcomments}
250 % \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE} ==
251 %    BEGIN
252 %     IF  @noskipsec = T  THEN  \leavevmode  FI
253 %                              % true if previous section had no body.
255 %     \par
256 %     \@tempskipa  := BEFORESKIP
257 %     @afterindent := T
258 %     IF \@tempskipa < 0  THEN  \@tempskipa  := -\@tempskipa
259 %                               @afterindent := F
260 %     FI
261 %     IF @nobreak = true
262 %       THEN \everypar == null
263 %       ELSE \addpenalty{\@secpenalty}
264 %            \addvspace{\@tempskipa}
265 %     FI
266 %     IF * next
267 %       THEN \@ssect{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
268 %       ELSE \@dblarg{\@sect
269 %                {NAME}{LEVEL}{INDENT}
270 %                {BEFORESKIP}{AFTERSKIP}{STYLE}}
271 %     FI
272 % END
273 % \end{oldcomments}
275 %    \begin{macrocode}
276 \def\@startsection#1#2#3#4#5#6{%
277   \if@noskipsec \leavevmode \fi
278   \par
279   \@tempskipa #4\relax
280   \@afterindenttrue
281   \ifdim \@tempskipa <\z@
282     \@tempskipa -\@tempskipa \@afterindentfalse
283   \fi
284   \if@nobreak
285     \everypar{}%
286   \else
287     \addpenalty\@secpenalty\addvspace\@tempskipa
288   \fi
289   \@ifstar
290     {\@ssect{#3}{#4}{#5}{#6}}%
291     {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}
292 %    \end{macrocode}
293 % \end{macro}
295 % \begin{macro}{\@sect}
296 % Pseudocode for the |\@sect| command
297 % \begin{oldcomments}
298 % \@sect{NAME}{LEVEL}
299 %       {INDENT}{BEFORESKIP}{AFTERSKIP}
300 %       {STYLE}[ARG1]{ARG2}
301 %           ==
302 %   BEGIN
303 %    IF LEVEL > \c@secnumdepth
304 %      THEN \@svsec :=L null
305 %      ELSE \refstepcounter{NAME}
306 %           \@svsec :=L BEGIN \@seccntformat{#1}\relax END
307 %    FI
308 %    IF AFTERSKIP > 0
309 %      THEN \begingroup
310 %              STYLE
311 %              \@hangfrom{\hskip INDENT\@svsec}
312 %              {\interlinepenalty 10000 ARG2\par}
313 %           \endgroup
314 %           \NAMEmark{ARG1}
315 %           \addcontentsline{toc}{NAME}
316 %              { IF  LEVEL > \c@secnumdepth
317 %                  ELSE \protect\numberline{\theNAME}  FI
318 %                ARG1 }
319 %      ELSE \@svsechd == BEGIN  STYLE
320 %                               \hskip INDENT\@svsec
321 %                               ARG2
322 %                               \NAMEmark{ARG1}
323 %                               \addcontentsline{toc}{NAME}
324 %                                  { IF  LEVEL > \c@secnumdepth
325 %                                      ELSE
326 %                                        \protect\numberline{\theNAME}
327 %                                      FI
328 %                                    ARG1 }
329 %                        END
330 %    FI
331 %    \@xsect{AFTERSKIP}
332 % END
333 % \end{oldcomments}
335 % \changes{LaTeX2.09}{1992/08/25}
336 %         {(FMi) replaced explicit setting of \cs{@svsec}
337 %               by call to \cs{@seccntformat}}
338 % \changes{LaTeX2.09}{1993/08/05}
339 %         {(RmS) Made sure that \cs{protect} works correctly in
340 %               expansion of \cs{the} counter}
341 % \changes{1.0h}{1994/11/04}
342 %         {(ASAJ) Added \cs{protected@edef}.}
343 %    \begin{macrocode}
344 \def\@sect#1#2#3#4#5#6[#7]#8{%
345   \ifnum #2>\c@secnumdepth
346     \let\@svsec\@empty
347   \else
348     \refstepcounter{#1}%
349 %    \end{macrocode}
350 %    Since |\@seccntformat| might end with an improper |\hskip| which
351 %    is scanning forward for |plus| or |minus| we end the definition
352 %    of |\@svsec| with |\relax| as a precaution.
353 % \changes{1.0n}{1995/05/06}{Added \cs{relax} after
354 %                            \cs{@seccntformat} just in case}
355 %    \begin{macrocode}
356     \protected@edef\@svsec{\@seccntformat{#1}\relax}%
357   \fi
358   \@tempskipa #5\relax
359   \ifdim \@tempskipa>\z@
360     \begingroup
361 %    \end{macrocode}
362 % \changes{v1.0s}{1996/05/21}
363 %         {(DPC) Moved brace to allow commands like
364 %           \cs{MakeUppercase} in 6th argument.
365 %            Changed \cs{par} to \cs{endgraf} to allow non-long
366 %            commands. internal/2148}
367 % \changes{v1.0t}{1996/06/10}
368 %         {(DPC) Changed \cs{endgraf} to \cs{@@par}}
369 % This |{| used to be after the argument to |\@hangfrom| but was moved
370 % here to allow commands such as |\MakeUppercase| to be used at the end
371 % of |#6|.
372 %    \begin{macrocode}
373       #6{%
374         \@hangfrom{\hskip #3\relax\@svsec}%
375           \interlinepenalty \@M #8\@@par}%
376     \endgroup
377     \csname #1mark\endcsname{#7}%
378     \addcontentsline{toc}{#1}{%
379       \ifnum #2>\c@secnumdepth \else
380         \protect\numberline{\csname the#1\endcsname}%
381       \fi
382       #7}%
383   \else
384 %    \end{macrocode}
385 % |\relax| added 2 May 90
386 % \changes{v1.0s}{1996/05/21}
387 %         {(DPC) Added extra braces for internal/2148}
388 %    \begin{macrocode}
389     \def\@svsechd{%
390       #6{\hskip #3\relax
391       \@svsec #8}%
392       \csname #1mark\endcsname{#7}%
393       \addcontentsline{toc}{#1}{%
394         \ifnum #2>\c@secnumdepth \else
395           \protect\numberline{\csname the#1\endcsname}%
396         \fi
397         #7}}%
398   \fi
399   \@xsect{#5}}
400 %    \end{macrocode}
401 % \end{macro}
403 % \begin{macro}{\@xsect}%
404 % Pseudocode for the |\@xsect| command
405 % \begin{oldcomments}
406 % \@xsect{AFTERSKIP} ==
407 %  BEGIN
408 %    IF AFTERSKIP > 0
409 %      THEN \par \nobreak
410 %           \vskip AFTERSKIP
411 %           \@afterheading
412 %      ELSE @nobreak :=G F
413 %           @noskipsec :=G T
414 %           \everypar{ IF @noskipsec = T
415 %                        THEN @noskipsec :=G F
416 %                             \clubpenalty := 10000 % local
417 %                             \hskip -\parindent
418 %                             \begingroup
419 %                               \@svsechd
420 %                             \endgroup
421 %                             \unskip
422 %                             \hskip -AFTERSKIP \relax
423 %                                           %% relax added 14 Jan 91
424 %                        ELSE \clubpenalty := \@clubpenalty % local
425 %                             \everypar := NULL
426 %                      FI
427 %                    }
428 %    FI
430 %   END
431 % \end{oldcomments}
433 % \changes{0.0}{1992/08/19}
434 %     {(RmS) corrected bug: stretch and shrink in argument to
435 %               \cs{hskip} previously not negated}
436 %    \begin{macrocode}
437 \def\@xsect#1{%
438   \@tempskipa #1\relax
439   \ifdim \@tempskipa>\z@
440 %    \end{macrocode}
441 %    Why not combine |\@sect| and |\@xsect| and save doing the
442 %    same test twice? It is not possible to change this now as these
443 %    have become hooks!
445 %    This |\par| seems unnecessary.
446 %    \begin{macrocode}
447     \par \nobreak
448     \vskip \@tempskipa
449     \@afterheading
450   \else
451 %    \end{macrocode}
452 % \changes{v1.0u}{1996/07/26}{Removed \cs{global} before
453 %                             \cs{@nobreak...}}
454 % \changes{v1.0x}{1996/10/23}{Replaced \cs{hskip...} with \cs{setbox...}
455 %                             as used in \cs{@afterheading}}
456 %    \begin{macrocode}
457     \@nobreakfalse
458     \global\@noskipsectrue
459     \everypar{%
460       \if@noskipsec
461         \global\@noskipsecfalse
462        {\setbox\z@\lastbox}%
463         \clubpenalty\@M
464         \begingroup \@svsechd \endgroup
465         \unskip
466         \@tempskipa #1\relax
467         \hskip -\@tempskipa
468       \else
469         \clubpenalty \@clubpenalty
470         \everypar{}%
471       \fi}%
472   \fi
473   \ignorespaces}
474 %    \end{macrocode}
475 % \end{macro}
477 % \begin{macro}{\@seccntformat}
478 %    This command formats the section number including the space
479 %    following it.
480 % \changes{1.0n}{1995/05/06}{Use \cs{quad} instead of \cs{hskip}}
481 %    \begin{macrocode}
482 \def\@seccntformat#1{\csname the#1\endcsname\quad}
483 %    \end{macrocode}
484 % \end{macro}
486 % Pseudocode for the |\@ssect| command
487 % \begin{oldcomments}
488 % \@ssect{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}{ARG} ==
489 %   BEGIN
490 %    IF AFTERSKIP > 0
491 %      THEN \begingroup
492 %             STYLE
493 %             \@hangfrom{\hskip INDENT}
494 %                       {\interlinepenalty 10000 ARG\par}
495 %           \endgroup
496 %      ELSE \@svsechd == BEGIN STYLE
497 %                              \hskip INDENT
498 %                              ARG
499 %                        END
500 %    FI
501 %    \@xsect{AFTERSKIP}
502 %   END
503 % \end{oldcomments}
505 % Pseudocode for the |\@afterheading| command
506 % \begin{oldcomments}
507 % \@afterheading ==
508 %  BEGIN
509 %    @nobreak :=G true
510 %    \everypar := BEGIN IF @nobreak = T
511 %                         THEN @nobreak  :=G false
512 %                              \clubpenalty := 10000 % local
513 %                              IF @afterindent = F
514 %                                THEN remove \lastbox
515 %                              FI
516 %                         ELSE \clubpenalty := \@clubpenalty % local
517 %                              \everypar := NULL
518 %                      FI
519 %                 END
520 %  END
521 % \end{oldcomments}
524 % \begin{macro}{\@ssect}
525 %    \begin{macrocode}
526 \def\@ssect#1#2#3#4#5{%
527   \@tempskipa #3\relax
528   \ifdim \@tempskipa>\z@
529     \begingroup
530 %    \end{macrocode}
531 % \changes{v1.0s}{1996/05/21}
532 %         {(DPC) Moved brace to allow commands like
533 %           \cs{MakeUppercase} in 4th argument.
534 %            Changed \cs{par} to \cs{endgraf} to allow non-long
535 %            commands. internal/2148}
536 % \changes{v1.0t}{1996/06/10}
537 %         {(DPC) Changed \cs{endgraf} to \cs{@@par}}
538 % This |{| used to be after the argument to |\@hangfrom| but was moved
539 % here to allow commands such as |\MakeUppercase| to be used at the end
540 % of |#4|.
541 %    \begin{macrocode}
542       #4{%
543         \@hangfrom{\hskip #1}%
544           \interlinepenalty \@M #5\@@par}%
545     \endgroup
546   \else
547 %    \end{macrocode}
548 % \changes{v1.0s}{1996/05/21}
549 %         {(DPC) Added extra braces for internal/2148}
550 %    \begin{macrocode}
551     \def\@svsechd{#4{\hskip #1\relax #5}}%
552   \fi
553   \@xsect{#3}}
554 %    \end{macrocode}
555 % \end{macro}
557 % \begin{macro}{\if@afterindent}
558 % \begin{macro}{\@afterindenttrue}
559 %    \begin{macrocode}
560 \newif\if@afterindent \@afterindenttrue
561 %    \end{macrocode}
562 % \end{macro}\end{macro}
564 % \begin{macro}{\@afterheading}
565 % \changes{v1.0v}{1996/08/02}{Removed \cs{global}
566 %                             before \cs{@nobreak...}}
568 % This hook is used in setting up custom-built headings in classes.dtx.
570 %    \begin{macrocode}
571 \def\@afterheading{%
572   \@nobreaktrue
573   \everypar{%
574     \if@nobreak
575       \@nobreakfalse
576       \clubpenalty \@M
577       \if@afterindent \else
578         {\setbox\z@\lastbox}%
579       \fi
580     \else
581       \clubpenalty \@clubpenalty
582       \everypar{}%
583     \fi}}
584 %    \end{macrocode}
585 % \end{macro}
588 % \begin{macro}{\@hangfrom}
590 % |\@hangfrom{|\meta{text}|}| : Puts \meta{text} in a box, and makes a
591 % hanging indentation of the following material up to the first
592 % |\par|. Should be used in vertical mode.
594 % \changes{v1.0a}{1994/03/07}{(DPC)Extra groups for colour}
595 %    \begin{macrocode}
596 \def\@hangfrom#1{\setbox\@tempboxa\hbox{{#1}}%
597       \hangindent \wd\@tempboxa\noindent\box\@tempboxa}
598 %    \end{macrocode}
599 % \end{macro}
601 % \begin{macro}{\c@secnumdepth}
602 % \begin{macro}{\c@tocdepth}
603 %    \begin{macrocode}
604 \newcount\c@secnumdepth
605 \newcount\c@tocdepth
606 %    \end{macrocode}
607 % \end{macro}\end{macro}
609 % \begin{macro}{\secdef}
611 % |\secdef{|\meta{unstarcmds}|}{|\meta{unstarcmds}|}{|%
612 %           \meta{starcmds}|}|\\
613 % When defining a |\chapter| or |\section| command without using
614 % |\@startsection|, you can use |\secdef| as follows:
615 % \begin{enumerate}
616 % \item |\def\chapter{| \ldots  |\secdef|
617 %                |\|\meta{starcmd} |\|\meta{unstarcmd} |}|
618 % \item |\def\|\meta{starcmd}|[#1]#2{| \ldots |}|
619 %            |%| Command to define |\chapter[|\ldots|]{|\ldots|}|
620 % \item |\def\|\meta{unstarcmd}|#1{| \ldots |}|
621 %   |%| Command to define |\chapter*{|\ldots|}|
622 % \end{enumerate}
624 %    \begin{macrocode}
625 \def\secdef#1#2{\@ifstar{#2}{\@dblarg{#1}}}
626 %    \end{macrocode}
627 % \end{macro}
629 % \subsubsection{Initializations}
630 % \begin{macro}{\sectionmark}
631 % \begin{macro}{\subsectionmark}
632 % \begin{macro}{\subsubsectionmark}
633 % \begin{macro}{\paragraphmark}
634 % \begin{macro}{\subparagraphmark}
635 % \changes{v1.0q}{1995/10/25}{Use \cs{let} not \cs{def} to save space.}
636 %    \begin{macrocode}
637 \let\sectionmark\@gobble
638 \let\subsectionmark\@gobble
639 \let\subsubsectionmark\@gobble
640 \let\paragraphmark\@gobble
641 \let\subparagraphmark\@gobble
642 %    \end{macrocode}
643 % \end{macro}
644 % \end{macro}
645 % \end{macro}
646 % \end{macro}
647 % \end{macro}
649 %    \begin{macrocode}
650 \message{contents,}
651 %    \end{macrocode}
653 % \subsection{Table of Contents etc.}
655 % \subsubsection{Convention}
656 % |\tf@|\meta{foo} = file number for output for table foo.
657 %       The file is opened only if |@filesw| = |true|.
659 % \subsubsection{Commands}
662 %  A |\l@|\meta{type}|{|\meta{entry}|}{|\meta{page}|}| Macro needs to
663 %  defined by document style for making an entry of type \meta{type}
664 %  in a table of contents, etc.  E.g., the document style
665 %  should define |\l@chapter|, |\l@section|, etc.
667 %  \textbf{Note:} When the |\protect| command is
668 %  used in the \meta{entry} or \meta{text} of one of the commands
669 %  below, it causes the following control sequence to be written on
670 %  the file without being expanded.  The sequence will be expanded
671 %  when the table of contents entry is processed.
673 %  \textbf{Surprise:} Inside an |\addcontentsline| or |\addtocontents|
674 %  command argument, the commands: |\index|, |\glossary|,  and |\label|
675 %  are  no-ops .  This could cause a problem if the user puts an
676 %  |\index| or |\label| into one of the commands he writes, or into the
677 %  optional `short version' argument of a |\section| or |\caption|
678 %  command.
680 % \begin{macro}{\@starttoc}
681 % The |\@starttoc|\marg{ext} command is used to define the commands:\\
682 % |\tableofcontents|, |\listoffigures|, etc.
684 % For example:
685 % |\@starttoc{lof}| is used in |\listoffigures|.  This command
686 % reads the |.|\meta{ext} file and sets up to write the new
687 % |.|\meta{ext} file.
689 % \begin{oldcomments}
690 % \@starttoc{EXT} ==
691 %   BEGIN
692 %     \begingroup
693 %        \makeatletter
694 %        read file \jobname.EXT
695 %        IF @filesw = true
696 %          THEN  open \jobname.EXT as file \tf@EXT
697 %        FI
698 %        @nobreak :=G FALSE  %% added 24 May 89
699 %     \endgroup
700 %   END
701 % \end{oldcomments}
703 % \changes{0.0}{1992/01/14}{(RmS) added \cs{immediate} to \cs{openout}
704 %               as all \cs{write} commands
705 %               are also executed \cs{immediate}}
706 % \changes{v1.0u}{1996/07/26}{removed \cs{global}
707 %                             before \cs{@nobreak...}}
708 %    \begin{macrocode}
709 \def\@starttoc#1{%
710   \begingroup
711     \makeatletter
712     \@input{\jobname.#1}%
713     \if@filesw
714       \expandafter\newwrite\csname tf@#1\endcsname
715       \immediate\openout \csname tf@#1\endcsname \jobname.#1\relax
716     \fi
717     \@nobreakfalse
718   \endgroup}
719 %    \end{macrocode}
720 % \end{macro}
722 %  \begin{macro}{\addcontentsline}
723 %  The |\addcontentsline{|\meta{table}|}{|\meta{type}|}{|%
724 %  \meta{entry}|}| command allows the user to  add
725 %  his/her own entry to a table of contents, etc. The command adds the
726 %  entry |\contentsline{|\meta{type}|}{|\meta{entry}|}{|\meta{page}|}|
727 %  to the |.|\meta{table} file.
729 %  This macro is implemented as an application of |\addtocontents|.
730 %  Note that |\thepage| is not expandable during |\protected@write|
731 %  therefore one gets the page number at the time of the |\shipout|.
733 % \changes{v1.0c}{1994/05/20}{Correct setting of \cs{protect}.}
734 % \changes{v1.0j}{1995/04/23}{Use \cs{contentsline} internally.}
735 % \changes{v1.0h}{1994/11/04}{Added \cs{protected@write} to
736 %                \cs{addcontentsline}.  ASAJ.}
737 %    \begin{macrocode}
738 \def\addcontentsline#1#2#3{%
739   \addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}}}
740 %    \end{macrocode}
741 %  \end{macro}
743 % \changes{v1.0c}{1994/05/20}{Correct setting of \cs{protect}.}
744 % \changes{v1.0h}{1994/11/04}{Added \cs{protected@write} to
745 %    \cs{addtocontents}.  ASAJ.}
746 % \begin{macro}{\addtocontents}
748 %   The |\addtocontents{|\meta{table}|}{|\meta{text}|}| command
749 %   adds \meta{text} to the |.|\meta{table} file, with no
750 %   page number.
752 %    \begin{macrocode}
753 \long\def\addtocontents#1#2{%
754   \protected@write\@auxout
755       {\let\label\@gobble \let\index\@gobble \let\glossary\@gobble}%
756       {\string\@writefile{#1}{#2}}}
757 %    \end{macrocode}
758 % \end{macro}
760 % \begin{macro}{\contentsline}
761 % The |\contentsline{|\meta{type}|}{|\meta{entry}|}{|\meta{page}|}|
762 % macro produces a \meta{type} entry in a table of contents, etc.
763 % It will appear in the |.toc| or other file.  For example,
764 % The entry for subsection 1.4.3 in the table of contents for
765 % example, might be produced by:
767 %  \begin{verbatim}
768 %       \contentsline{subsection}
769 %           {\makebox{30pt}[r]{1.4.3} Gnats and Gnus}{22}
770 %  \end{verbatim}
772 %  The |\protect| command causes command sequences to be written
773 %  without expanding them.
775 %    \begin{macrocode}
776 \def\contentsline#1{\csname l@#1\endcsname}
777 %    \end{macrocode}
778 % \end{macro}
780 % |\@dottedtocline{|\meta{level}|}{|\meta{indent}|}{|\meta{numwidth}%
781 %        |}{|\meta{title}|}{|\meta{page}|}|:
782 %   Macro to produce a table of contents line with the following
783 %   parameters:
784 %   \begin{description}
785 %   \item[level] If \meta{level} $>$ |\c@tocdepth|, then no line
786 %                produced.
787 %   \item[indent] Total indentation from the left margin.
788 %   \item[numwidth] Width of box for number if the \meta{title} has a
789 %                |\numberline| command.
790 %                As of 25 Jan 1988, this is also the amount of extra
791 %                indentation added to second and later lines of a
792 %                multiple line entry.
793 %   \item[title] Contents of entry.
794 %   \item[page] Page number.
795 %  \end{description}
797 %  Uses the following parameters, which must be set by the document
798 %  style. They should be defined with |\def|'s.
799 %  \begin{description}
800 %  \item[|\@pnumwidth|]  Width of box in which page number is set.
801 %  \item[|\@tocrmarg|] Right margin indentation for all but last line
802 %        of multiple-line entries.
803 %  \item[|\@dotsep|] Separation between dots, in mu units.
804 %                  Should be |\def|'d to a number like 2 or 1.7
805 %  \end{description}
807 % \begin{macro}{\@dottedtocline}
808 % \changes{LaTeX2.09}{1991/09/29}
809 %         {(RmS) added \cs{reset@font} for page number}
810 % \changes{v1.0e}{1994/05/25}{Put braces around argument 4
811 %          (the actual toc entry) to avoid font (and possibly other)
812 %           changes leaking out to the leaders.}
813 % \changes{v1.0g}{1994/10/18}{Added \cs{normalcolor} for page number}
814 % \changes{v1.0z}{1996/12/20}{Added \cs{nobreak} for latex/2343}
815 %    \begin{macrocode}
816 \def\@dottedtocline#1#2#3#4#5{%
817   \ifnum #1>\c@tocdepth \else
818     \vskip \z@ \@plus.2\p@
819     {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
820      \parindent #2\relax\@afterindenttrue
821      \interlinepenalty\@M
822      \leavevmode
823      \@tempdima #3\relax
824 %    \end{macrocode}
825 % \changes{v1.0z}{1996/12/20}{Added \cs{nobreak} for latex/2343}
826 %    \begin{macrocode}
827      \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
828      {#4}\nobreak
829      \leaders\hbox{$\m@th
830 %    \end{macrocode}
831 %    If a document uses fonts other than computer modern, the use of a
832 %    dot from math can be very disturbing despite the fact that this
833 %    might be the only place in a document that then uses computer
834 %    modern.
835 %    Therefore we surround the dot with an |\hbox| to escape to the
836 %    surrounding text font.
837 % \changes{v1.0k}{1995/04/25}{Added \cs{hbox} around dots.}
838 % \changes{v1.0l}{1995/05/02}{Don't reset to \cs{rmfamily}}
839 %    \begin{macrocode}
840         \mkern \@dotsep mu\hbox{.}\mkern \@dotsep
841         mu$}\hfill
842      \nobreak
843      \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}%
844      \par}%
845   \fi}
846 %    \end{macrocode}
847 % \end{macro}
849 % \textbf{Note:} |\nobreak|'s added 7 Jan 86 to prevent bad line break
850 % that left the page number dangling by itself at left edge of a new
851 % line.
853 % Changed 25 Jan 88 to use |\leftskip| instead of |\hangindent| so
854 % leaders of multiple-line contents entries would line up properly.
855 % \begin{macro}{\numberline}
856 % |\numberline{|\meta{number}|}|: For use in a |\contentsline| command.
857 %   It puts \meta{number} flushleft in a box of width |\@tempdima|
858 %   (Before 25
859 %   Jan 88 change, it also added |\@tempdima| to the hanging
860 %   indentation.)
862 %    \begin{macrocode}
863 \def\numberline#1{\hb@xt@\@tempdima{#1\hfil}}
864 %</2ekernel>
865 %    \end{macrocode}
866 % \end{macro}
868 % \Finale