summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/gmdoc/gmdocc.cls
blob: b224ba6173d4430464987750949ce62c5fb25721 (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
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
%
% \GetFileInfo{gmdocc.cls}
% \title{The \pk{gmdocc} Class For \pk{gmdoc} Driver Files\thfileinfo}
% \author{Natror (Grzegorz Murzynowski)}
% \maketitle
%
% \begin{copyrnote}
%
%%Written by Natror (Grzegorz Murzynowski),
%% natror at o2 dot pl
%%
%% \copyright\,2006 by Natror (Grzegorz Murzynowski).
%%
%% This program is subject to the \LaTeX\ Project Public License.
%% See ^^A
%% \url{http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html} ^^A
%% for the details of that license.
%%
%% LPPL status: "author-maintained".\par
%%
%
%\end{copyrnote}
%
% \RecordChanges
% \ChangesStart{v0.677}{1000/00/00}
%
% \chschange{v0.69}{06/10/1}{81}
% \chschange{v0.70}{06/10/10}{98}
% \chschange{v0.71}{06/10/21}{114}
% \chschange{v0.72}{06/11/14}{122}
% \chschange{v0.73}{06/12/1}{128}
% \chschange{v0.75}{2007/3/2}{130}
%

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{gmdocc}
            [2007/03/02 v0.75 a class for gmdoc driver files (GM)]

%
% \division{Intro}
%%
%% This file is a~part of \pk{gmdoc} bundle and provides a~document
%% class for the driver files documenting \LaTeXpar\ packages \&a.\
%% with my \pk{gmdoc.sty} package. It's not necessary, of course: most
%% probably you may use another document class you like.
%%
%% By default this class loads \pk{mwart} class with a4paper (default)
%% option and \pk{lmodern} package with QX fontencoding. It loads also
%% my \pk{gmdoc} documenting package which loads some auxiliary
%% packages of mine and the standard ones.
%% 
%% If the \pk{mwart} class is not found, the standard \pk{article}
%% class is loaded instead. Similarly, if the \pk{lmodern} is not
%% found, the standard Computer Modern font family is used in the
%% default font encoding.
%% 
%
% \division{Usage}
%
% For the ideas and details of \pk{gmdoc}ing of the \LaTeXpar\ files
% see the \pk{gmdoc.sty} file's documentation (chapter \ref{gmd}). The
% r\^ole of the \pk{gmdocc} document class is rather auxiliary and
% exemplary.  Most probably, you may use your favourite document class
% with the settings you wish. This class I~wrote to meet my needs of
% fine formatting, such as not numbered sections and sans serif demi
% bold headings.
%
% However, with the users other than myself in mind, I~added some
% conditional clauses that make this class works also if an \pk{mwcls}
% class or the \pk{lmodern} package are unknown.  \dekmedskip
%
% Of rather many options supported by \pk{gmdoc.sty}, this class
% chooses my favourite, i.e., the default. An exception is made for
% the \TextUsage*{noindex} option, which is provided by this class and
% passed to \pk{gmdoc.sty}. This is intended for the case you don't
% want to make an index.
%
% Simili modo, the \TextUsage*{nochanges} option is provided to turn
% creating the change history off. 
%
% Both of the above options turn the \emph{writing out to the files}
% off. They don't turn off |\PrintIndex| nor |\PrintChanges|. (Those
% two commands are no-ops by themselves if there's no \file{.ind}
% (n)or \file{.gls} file respectively.)
% \dekmedskip
%
% One more option is \TextUsage*{outeroff}. It's intended for
% compiling the documentation of macros defined with the |\outer|
% prefix. It |\relax|es this prefix so the `|\outer|' macros' names can
% appear in the arguments of other macros, which is necessary to
% pretty mark and index them. 
%
% I~decided not to make discarding |\outer| the default because
% it seems that \LaTeX\ writers don't use it in general and
% \pk{gmdoc.sty} \emph{does} make some use of it.
% \dekmedskip
% 
% This class provides also the \TextUsage*{debug} option. It turns the
% |\if@debug| Boolean switch True and loads the \pk{trace} package that
% was a~great help to me while debugging \pk{gmdoc.sty}.
% \dekmedskip
%
% The default base document class loaded by \pk{gmdocc.cls} is Marcin
% Woli\'nski's \pk{mwart}. If you have not installed it on your
% computer, the standard \pk{article} will be used. 
%
% Moreover, if you like MW's classes (as I~do) and need |\chapter|
% (for multiple files' input e.g.), you may declare another \pk{mwcls}
% with the option homonimic with the class'es name: \TextUsage*{mwrep}
% for \pk{mwrep} and \TextUsage*{mwbk} for \pk{mwbk}. For the symmetry
% there's also \TextUsage*{mwart} option (equivalent to the default
% setting).
%
% The existence test is done for any MW class option as it is in the
% default case.
%
% \stanza
% The \TextUsage\EOFMark\ is in this class typesets like this (of
% course, you can redefine it as you wish):\par\EOFMark
%
% \StopEventually\NoEOF
%
% \division{The Code}

% \CodeDefIndex\gmcc@baseclass
\def\gmcc@baseclass{mwart}% the default is Marcin Woli\'nski's class (\pk{mwcls})
% analogous to \pk{article}.

% Since you can choose the standard \pk{article} class, we'd better
% provide a~Boolean switch to keep the score of what was chosen. It's
% to avoid unused options if \pk{article} is chosen.
%\CodeDefIndex*{gmcc@mwcls}
\newif\ifgmcc@mwcls
\gmcc@mwclstrue
% \CodeDefine*{mwart}
\DeclareOption{mwart}{\def\gmcc@baseclass{mwart}}% The \pk{mwart} class may also
% be declared explicitly.
% \CodeDefine*{mwrep}
\DeclareOption{mwrep}{\def\gmcc@baseclass{mwrep}}% If you need
% chapters, this option chooses an MW's class that corresponds to
% \pk{report},
% \CodeDefine*{mwbk}
\DeclareOption{mwbk}{\def\gmcc@baseclass{mwbk}}% and this MW's class
% corresponds to \pk{book}.
% \CodeDefine*{article}
\DeclareOption{article}{\gmcc@mwclsfalse}% you can also
% \emph{choose} \pk{article}.


% \CodeDefine*{outeroff}
\DeclareOption{outeroff}{\let\outer\relax}% This option allows
% |\outer|-prefixed macros to be \pk{gmdoc}-processed with all the
% bells and whistles.

% \CodeDefine\if@debug
\newif\if@debug
% \CodeDefine*{debug}
\DeclareOption{debug}{\@debugtrue}% This option causes \pk{trace} to
% be loaded and the Boolean switch of this option may be used to hide
% some things needed only while debugging.

% \CodeDefine*{noindex}
\DeclareOption{noindex}{%
  \PassOptionsToPackage{\CurrentOption}{gmdoc}}% This
% option turns the writing outto \file{.idx} file off.

% \CodeDefIndex\if@gmccnochanges
% \CodeDefIndex*\@gmccnochangestrue
% \CodeDefIndex*\@gmccnochangesfalse
\newif\if@gmccnochanges
% \CodeDefine*{nochanges}
\DeclareOption{nochanges}{\@gmccnochangestrue}% This option turns the
% writing outto \file{.glo} file off.

% \CodeDefine*{gmeometric}
\def\gmTheGeometry{geometry}
\DeclareOption{gmeometric}{%
  \IfFileExists{gmeometric.sty}{%
    \def\gmTheGeometry{gmeometric}}{}}% It's an experimental option
% that causes the |\geometry| macro provided by \pk{geometry} package
% is not restricted to the preamble. This option causes the
% \pk{gmeometric} package is loaded (if available) that works the
% limitation around.


\ProcessOptions

% \newif\ifSecondClass^^A~to assure \TeX knows ifSecondClass
% ^^A switch and therefore it counts the fis properly.
% \iffalse It's for cooperation with my another class. (Feature under
% construction.)
\@ifundefined{ifSecondClass}{%
  \newif\ifSecondClass}{}
%\fi\fi

%\iffalse
\ifSecondClass\else
%\fi\fi
\ifgmcc@mwcls
  \IfFileExists{\gmcc@baseclass.cls}{}{\gmcc@mwclsfalse}% As
  % announced, we do the ontological test to any \pk{mwcls}.
\fi 
\ifgmcc@mwcls
  \LoadClass[fleqn, oneside, noindentfirst, 11pt, withmarginpar,
  sfheadings]{\gmcc@baseclass}% 
\else
  \LoadClass[fleqn, 11pt]{article}% Otherwise the standard \pk{article} is
  % loaded. 
\fi

\AtBeginDocument{\mathindent=\CodeIndent}
% The |fleqn| option makes displayed formuals be flushed left and
% |\mathindent| is their indentation. Therefore we ensure it is always
% equal |\CodeIndent| just like |\leftskip| in \env{verbatim}. Thanks
% to that and the |\edverbs| declaration below you may display single
% verbatim lines with |\[...\]|: 
% \[\verb+\[|\verbatim\stuff|\]+\,.\]

\IfFileExists{lmodern.sty}{% We also examine the ontological status of
  % this package
  \RequirePackage{lmodern}% and if it shows to be satisfactory (the
  % package shows \emph{to be}), we load it and set the proper
  % font encoding.
  \RequirePackage[QX]{fontenc}%
}{}
%\iffalse\iffalse
\fi
% of ifSecondClass (a~feature under construction).\fi

\RequirePackage[margin=2.7cm, left=4cm,
   right=2.2cm]{\gmTheGeometry}% Now we set the
% page layout.

\def\gmdoccMargins{%
  \geometry{margin=2.7cm, left=4cm, right=2.2cm}}

\if@debug%  For debugging we load also the \pk{trace} package that was
% very helpful to me.
  \RequirePackage{trace}%
  \errorcontextlines=100 % And we set an error info parameter.
\fi

%\CodeDefine\ifdtraceon
%\CodeDefine\ifdtraceoff
\newcommand*\ifdtraceon{\if@debug\afterfi\traceon\fi}
\newcommand*\ifdtraceoff{\if@debug\traceoff\fi}

%  We load the core package:
\RequirePackage{gmdoc}

\@ifpackageloaded{lmodern}{% The Latin Modern font family provides
  % a~light condensed typewriter font that seems to be the most
  % suitable for the marginpar CS marking.
  \def\marginpartt{\normalfont\fontseries{lc}\ttfamily}}%


% ^^A\setcounter{IndexColumns}{2} narrow columns do spare space and
% ^^A~look better
\raggedbottom

\setcounter{secnumdepth}{0}% We wish only the parts and chapters to be
% numbered. 

\renewcommand*\thesection{\arabic{section}}% isn't it redundant at the
% above setting?

\@ifnotmw{}{%
  \@ifclassloaded{mwart}{% We set the indentation of Contents:
    \SetTOCIndents{{}{\quad}{\quad}{\quad}{\quad}{\quad}{\quad}}}{% for \pk{mwart}
    \SetTOCIndents{{}{\bf9.\enspace}{\quad}{\quad}{\quad}{\quad}{\quad}}}% and for the two other \pk{mwcls}s. 
  \pagestyle{outer}}% We set the page numbers to be printed in the
% outer and bottom corner of the page.

\def\titlesetup{\bfseries\sffamily}% We set the title(s) to be
% boldface and sans serif.

\if@gmccnochanges\let\RecordChanges\relax\fi% If the |nochanges|
% option is on, we discard writing outto the \file{.glo} file.

\RecordChanges% We turn the writing the |\changes| outto the
% \file{.glo} file if not the above.

% \CodeUsgIndex\dekclubs \CodeUsgIndex\smartunder
\dekclubs% We declare the club sign \verb+|+ to be a~shorthand for
% |\verb*|\,.
% \changes[\edverbs]{v0.74}{2007/01/01}{used to simplify displaying
% shortverbs}
\edverbs% to redefine |\[| so that it puts a~shortverb in a~|\hbox|.
\smartunder% and we declare the |_| char to behave as usual in the
% math mode and outside math to be just an uderscore.

\exhyphenpenalty\hyphenpenalty% 'cause \pk{mwcls} set it |=10000| due
% to Polish customs.

\VerbT1% to ensure T1 font encoding in verbatims (in code).

\RequirePackage{amssymb}
\def\EOFMark{\rightline{\ensuremath{\square}}}


\endinput
% \changes{v0.677}{06/9/23}{Added checkings if \pk{mwart.cls} and
% \pk{lmodern.sty} are available and more standard behaviour if they
% are not}
%
% \changes{v0.70}{06/10/10}{Added some options and Latin Modern Light
% Condensed to the marginpar CSs.}
%
% \Finale

% (For my GNU Emacs:)
%%% Local Variables: 
%%% mode: doctex
%%% TeX-master: "../../../../LaTeX/TeXGuru/gmdoc/gmdocDoc"
%%% End: