summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/ncctools/source/topsection.dtx
blob: 905b702f94fbe228e599465a080cb0e09c5625ad (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
% \iffalse
%%
%% File: topsection.dtx Copyright (C) 2005 by Alexander I. Rozhenko
%%
%<package>\NeedsTeXFormat{LaTeX2e}
%<package>\ProvidesPackage{topsection}
%<package>         [2005/12/24 v1.0 Top section definition (NCC)]
%
% \changes{v1.0}{2005/12/24}{Initial version}
%
%<*driver>
\let\makeindex\relax
\documentclass{ltxdoc}
\usepackage{topsection}
\GetFileInfo{topsection.sty}
\begin{document}
\title{The \textsf{topsection} package\thanks{This file
        has version number \fileversion, last
        revised \filedate.}}
\author{Alexander I. Rozhenko\\rozhenko@oapmg.sscc.ru}
\date{\filedate}
\maketitle
\DocInput{topsection.dtx}
\end{document}
%</driver>
% \fi
% \DescribeMacro\topsection
% This package implements an unnumbered top-level section
% (chapter in books and reports or section in articles):
% \begin{quote}
% |\topsection|\marg{title}
% \end{quote}
% Such a section is used when table of contents, index, or
% bibliography are prepared. So, the |\topsection| command can
% be used to make such definitions or redefinitions to be independent
% on class in use. The command definition is compatible with standard
% \textbf{article}, \textbf{book}, and \textbf{report} classes
% and also with the \textbf{ncc} class.
%
% \DescribeMacro\@iftopchapter
% To distinguish what type of top section is used, the following
% conditional command is also specified:
% \begin{quote}
% |\@iftopchapter|\marg{chapter-clause}\marg{section-clause}
% \end{quote}
% The \meta{chapter-clause} is executed if top section is the |\chapter|.
% Otherwise, the \meta{section-clause} is executed.
%
% If the \textbf{nccsect}
% package is used together with this package, the top-section title
% is also written to the aux-file. To avoid this,
% use |\skipwritingtoaux| modifier just before the top section.
%
% \StopEventually{}
%
% \section{The Implementation}
%
% At first, we provide |\@mkboth| command to be sure that
% it is defined (in \textbf{ncc} class |\@mkboth| useless and
% so it does not defined here). If it does not exist yet, its
% default value will be equal to \LaTeX's |\@gobbletwo| command.
%    \begin{macrocode}
%<*package>
\providecommand\@mkboth[2]{}
%    \end{macrocode}
%
% \begin{macro}{\NCC@topsection}
% \begin{macro}{\@iftopchapter}
% The |\NCC@topsection| macro contains a command to be used as a
% top section. To select an appropriate command, we test the
% |\chapter| command to be defined. The |\@iftopchapter| macro is
% also specified here.
%    \begin{macrocode}
\newcommand\@iftopchapter[2]{}
\@ifundefined{chapter}{%
  \def\NCC@topsection{\section}%
  \let\@iftopchapter\@secondoftwo
}{%
  \def\NCC@topsection{\chapter}%
  \let\@iftopchapter\@firstoftwo
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\topsection}
% Now we define the |\topsection| command. When the package is loaded,
% we specify the command to be a new one. Its real definition
% is done at the beginning of document when all packages are
% already loaded and an appropriate decision can be selected.
%    \begin{macrocode}
\newcommand*\topsection[1]{}
\AtBeginDocument{%
%    \end{macrocode}
% If the \textbf{nccsect} package is in use, we define the |\topsection|
% command using the basic form of the corresponding sectioning command.
% The |\noheadingtag| modifier turns off the top-section numbering.
% In the definition, we test the |\@mkboth| command to be equal to
% |\@gobbletwo|. This situation appears in two cases: when the page
% style other than |headings| is used or when the \textbf{ncc} class
% is loaded. In the last case, the appropriate page header is already
% specified in sectioning command with corresponding mark-command
% (|\chaptermark| or |\sectionmark| updates both headers by the same
% manner). So, in both these cases we need not use the |\@mkboth|.
% But in other cases we specify the header mark in standard way
% and use the |\norunninghead| modifier to skip updating headers
% inside the sectioning command.
%    \begin{macrocode}
  \@ifpackageloaded{nccsect}{%
    \renewcommand*\topsection[1]{%
      \ifx\@mkboth\@gobbletwo
        \noheadingtag \NCC@topsection{#1}%
      \else
        \norunninghead
        \noheadingtag \NCC@topsection{#1}%
        \@mkboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}%
      \fi
    }%
%    \end{macrocode}
% When the \textbf{nccsect} package does not loaded, the top-section
% definition uses just the same technique as in standard classes.
%    \begin{macrocode}
  }{%
    \renewcommand*\topsection[1]{%
      \NCC@topsection*{#1}%
      \@mkboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}%
    }%
  }%
}
%</package>
%    \end{macrocode}
% \end{macro}
\endinput