Add an initial model for testing TU encodings
[latex2e.git] / latex2e-20160331 / base / ltxdoc.dtx
blobcb7b2ee2ac30d1aa390d315cf5252836f8fa00d2
1 % \iffalse meta-comment
3 % Copyright 1993-2016
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
29 % \iffalse
31 %<class>\NeedsTeXFormat{LaTeX2e}
32 %<class>\ProvidesClass{ltxdoc}
33 %<class>         [2015/03/26 v2.0w Standard LaTeX documentation class]
35 %<*driver>
36 \documentclass{ltxdoc}
37 \GetFileInfo{ltxdoc.cls}
38 \providecommand\dst{\expandafter{\normalfont\scshape docstrip}}
39 \title{The file \texttt{ltxdoc.dtx} for use with
40       \LaTeXe.\thanks{This file has version
41            number \fileversion, dated \filedate.}\\[2pt]
42       It contains the code for \texttt{ltxdoc.cls}}
43 \date{\filedate}
44 \author{David Carlisle}
45 \begin{document}
46  \MaintainedByLaTeXTeam{latex}
47  \maketitle
48  \DocInput{ltxdoc.dtx}
49 \end{document}
50 %</driver>
52 % \fi
55 % \changes{v2.0i}{1994/04/29}{Update the documentation.}
56 % \changes{v2.0s}{1998/08/17}{(RmS) Documentation fixes.}
58 % \section{Documentation of the \LaTeX\ sources}
60 % This class file is designed for documenting the \LaTeX\ source files.
61 % You may however find it generally useful as a class for typesetting
62 % the documentation of files  produced in `doc' format.
64 % Each documented file in the standard distribution comes with extension
65 % |dtx|. The appropriate class package or initex file will be extracted
66 % from the source by the docstrip system. Each |dtx| file may be
67 % directly processed with \LaTeXe, for example
68 %\begin{verbatim}
69 % latex2e docclass.dtx
70 %\end{verbatim}
71 % would produce the documentation of the Class and package interface.
73 % Each file that is used in producing the \LaTeXe\ format (ie not
74 % including the standard class and packages) will be printed together in
75 % one document if you \LaTeX\ the file |sources2e.tex|. This has the
76 % advantage that one can produce a full index of macro usage across all
77 % the source files.
79 % If you need to customise the typesetting of any of these files, there
80 % are two options:
81 % \begin{itemize}
82 % \item You can use \dst\ with the module `driver' to extract a small
83 % \LaTeX\ file that you may edit to use whatever class or package
84 % options you require, before inputting the source file.
85 % \item You can create a file |ltxdoc.cfg|. This configuration file will
86 % be read whenever the |ltxdoc| class is used, and so can be used to
87 % customise the typesetting of all the source files, without having to
88 % edit lots of small driver files.
89 %\end{itemize}
91 % The second option is usually more convenient. Various possibilities
92 % are discussed in the next section.
94 % \section{Customisation}
96 % The simplest form of customisation is to pass more options to the
97 % |article| class which is loaded by |ltxdoc|. For instance if you wish
98 % all the documentation to be formatted for A4 paper, add the following
99 % line to |ltxdoc.cfg|:
100 %\begin{verbatim}
101 % \PassOptionsToClass{a4paper}{article}
102 %\end{verbatim}
104 % All the source files are in two parts, separated by |\StopEventually|.
105 % The first part (should) contain `user' documentation. The second part
106 % is a full documented listing of the source code. The |doc| package
107 % provides the command |\OnlyDescription| which suppresses the code
108 % listings. This may also be used in the configuration file, but as the
109 % |doc| package is read later, you must delay the execution of
110 % |\OnlyDescription| until after the |doc| package has been read. The
111 % simplest way is to use |\AtBeginDocument|. Thus you could put the
112 % following in your |ltxdoc.cfg|.
113 %\begin{verbatim}
114 % \AtBeginDocument{\OnlyDescription}
115 %\end{verbatim}
118 % If the full source listing |sources2e.tex| is processed, then an index
119 % and change history are produced by default, however indices are not
120 % normally produced for individual files.
122 % As an example, consider |ltclass.dtx|, which contains the sources for
123 % the new class and package interface commands.  With no |cfg|
124 % file, a 19~page document is produced. With the above configuration
125 % a slightly more readable document (4~pages) is produced.
127 % Conversely, if you really want to read the source listings in detail,
128 % you will want to have an index. Again the index commands provided by
129 % the doc package may be used, but their execution must be delayed.
130 %\begin{verbatim}
131 % \AtBeginDocument{\CodelineIndex\EnableCrossrefs}
132 % \AtEndDocument{\PrintIndex}
133 %\end{verbatim}
135 % The |doc| package writes index files to be sorted using MakeIndex with
136 % the |gind| style, so one would then use a command such as
137 %\begin{verbatim}
138 % makeindex -s gind.ist ltclass.idx
139 %\end{verbatim}
140 % and re-run \LaTeX.
142 % Similarly to print a Change history, you would add
143 %\begin{verbatim}
144 % \AtBeginDocument{\RecordChanges}
145 % \AtEndDocument{\PrintChanges}
146 %\end{verbatim}
147 % to |ltxdoc.cfg|, and use  MakeIndex with a command such as
148 %\begin{verbatim}
149 % makeindex -s gglo.ist -o ltclass.gls ltclass.glo
150 %\end{verbatim}
152 % Finally if you do not want to list all the sections of |source2e.tex|,
153 % you can use  |\includeonly| in the |cfg| file:
154 %\begin{verbatim}
155 % \includeonly{ltvers,ltboxes}
156 %\end{verbatim}
158 % \StopEventually{}
161 % \section{Options}
163 %    \begin{macrocode}
164 %<*class>
165 \DeclareOption{a5paper}{\@latexerr{Option not supported}%
166    {}}
167 %    \end{macrocode}
169 %    \begin{macrocode}
170 \DeclareOption*{%
171     \PassOptionsToClass  {\CurrentOption}{article}}
172 %    \end{macrocode}
174 % \section{Configuration}
175 % Input a local configuration file, if it exists.
176 %    \begin{macrocode}
177 \InputIfFileExists{ltxdoc.cfg}
178            {\typeout{*************************************^^J%
179                      * Local config file ltxdoc.cfg used^^J%
180                      *************************************}}
181            {}
182 %    \end{macrocode}
185 % \section{Option Processing}
187 %    \begin{macrocode}
188 \ProcessOptions
189 %    \end{macrocode}
191 % \section{Loading article and doc}
193 %    \begin{macrocode}
194 \LoadClass{article}
195 %    \end{macrocode}
197 %    \begin{macrocode}
198 \RequirePackage{doc}
199 %    \end{macrocode}
201 % Make \verb+|+ be a `short verb' character, but not in the document
202 % preamble, where an active character may interfere with packages that
203 % are loaded.
204 %    \begin{macrocode}
205 \AtBeginDocument{\MakeShortVerb{\|}}
206 %    \end{macrocode}
208 % As `doc' documents tend to have a lot of monospaced material,
209 % Set up some |tt| substitutions to occur silently.
210 % \changes{v2.0p}{1995/11/02}{Add font substitutions}
211 % \changes{v2.0t}{1999/04/17}{Replaced octal number, CAR}
212 %    \begin{macrocode}
213 \DeclareFontShape{OT1}{cmtt}{bx}{n}{<-> ssub * cmtt/m/n}{}
214 \DeclareFontFamily{OMS}{cmtt}{\skewchar\font 48}  % '60
215 \DeclareFontShape{OMS}{cmtt}{m}{n}{<-> ssub * cmsy/m/n}{}
216 \DeclareFontShape{OMS}{cmtt}{bx}{n}{<-> ssub * cmsy/b/n}{}
217 %    \end{macrocode}
218 % This substitution is in the standard fd file, but not silent.
219 %    \begin{macrocode}
220 \DeclareFontShape{OT1}{cmss}{m}{it}{<->ssub*cmss/m/sl}{}
221 %    \end{macrocode}
223 %    \begin{macrocode}
224 \CodelineNumbered
225 \DisableCrossrefs
226 %    \end{macrocode}
228 % Increase the text width slightly so that with the standard fonts
229 % 72 columns of code may appear in a |macrocode| environment.
230 % \changes{v2.0c}{1994/03/15}{Set \cs{textwidth}.}
231 %    \begin{macrocode}
232 \setlength{\textwidth}{355pt}
233 %    \end{macrocode}
235 % Increase the marginpar width slightly, for long command names.
236 % And increase the left margin by a similar amount
237 % \changes{v2.0l}
238 %      {1994/05/25}{Increase \cs{marginparwidth}}
239 % \changes{v2.0q}{1995/11/28}
240 %      {Increase \cs{marginparwidth} and page margin.}
241 %    \begin{macrocode}
242 \addtolength\marginparwidth{30pt}
243 \addtolength\oddsidemargin{20pt}
244 \addtolength\evensidemargin{20pt}
245 %    \end{macrocode}
248 %    \begin{macrocode}
249 \setcounter{StandardModuleDepth}{1}
250 %    \end{macrocode}
252 % \section{Useful abbreviations}
254 % |\cmd{\foo}| Prints |\foo| verbatim. It may be used inside moving
255 % arguments. It can \emph{not} be use to record commands that are defined as
256 %    ``|\outer|'' nor is it possible to use it on conditionals such as
257 %    |\iftrue| or  defined by |\newif|.
258 % |\cs{foo}| also prints |\foo|, for those who prefer that
259 % syntax. (This second form can be used to record all types of command so the
260 %    above restrictions do not apply.
261 % \begin{macro}{\cmd}
262 % \changes{v2.0k}{1994/05/21}{New definition, so \cmd\{ works.}
263 % \begin{macro}{\cs}
264 % \changes{v2.0d}{1994/03/17}{Add \cs{cs}}
265 %    \begin{macrocode}
266 \def\cmd#1{\cs{\expandafter\cmd@to@cs\string#1}}
267 \def\cmd@to@cs#1#2{\char\number`#2\relax}
268 \DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}}
269 %    \end{macrocode}
270 % \end{macro}
271 % \end{macro}
273 % \changes{v2.0r}{1996/01/11}{Removed \cs{star} since useless pr/2039}
275 % \begin{macro}{\marg}
276 % \changes{v2.0d}{1994/03/17}{Add \cs{marg}}
277 %    |\marg{text}| prints \marg{text}, `mandatory argument'.
278 %    \begin{macrocode}
279 \providecommand\marg[1]{%
280   {\ttfamily\char`\{}\meta{#1}{\ttfamily\char`\}}}
281 %    \end{macrocode}
282 % \end{macro}
284 % \begin{macro}{\oarg}
285 %    |\oarg{text}| prints \oarg{text}, `optional argument'.
286 %    \begin{macrocode}
287 \providecommand\oarg[1]{%
288   {\ttfamily[}\meta{#1}{\ttfamily]}}
289 %    \end{macrocode}
290 % \end{macro}
292 % \begin{macro}{\parg}
293 %    |\parg{te,xt}| prints \parg{te,xt}, `picture mode argument'.
294 % \changes{v2.0h}{1994/04/28}{Add \cs{parg}}
295 % \changes{v2.0o}{1995/08/09}{Use \cs{meta} when showing arguments}
296 %    \begin{macrocode}
297 \providecommand\parg[1]{%
298   {\ttfamily(}\meta{#1}{\ttfamily)}}
299 %    \end{macrocode}
300 % \end{macro}
303 % \section{Old Comments}
305 % The \LaTeXe\ sources contain a lot of code inherited from
306 % \LaTeX2.09. The comments in this code were not designed to be
307 % typeset, and do not contain the necessary \LaTeX\ markup. The
308 % \texttt{oldcomments} environment typesets these comments,
309 % automatically sensing when any control sequence appears, and
310 % implicitly adding the |\verb|. This procedure does not produce
311 % particularly beautiful pages, but it allows us to fully document new
312 % sections, and have some form of typeset comments on all the old
313 % code.
314 % \changes{v2.0e}{1994/03/18}{Use a fixed font.}
316 % Scan control names and put them in tt.
317 % Will actually (incorrectly) scan past |\\| but this does not matter as
318 % this is almost never followed by a letter in practice.
319 % (ie |\\foo|) would put |foo| in |\ttfamily|.
320 %    \begin{macrocode}
321 \def\oc@scan#1{%
322   \ifx\oc@bslash#1%
323                       \egroup\let\next\oc@bslash\else
324   \ifcat a\noexpand#1%
325                       #1\let\next\oc@scan\else
326   \ifx\oc@percent#1%
327                       \def\next{\char`\%\egroup}%
328   \else
329                       #1\let\next\egroup
330   \fi\fi\fi\next}
331 %    \end{macrocode}
333 %    \begin{macrocode}
334 \def\oc@bslash{\bgroup\oc@ttf\char`\\\oc@scan}%
335 %    \end{macrocode}
337 %    \begin{macrocode}
338 \def\oc@verb#1{%
339   \catcode`#1\active
340   \uccode`\~`#1%
341   \uppercase{\def~{{\oc@ttf\char`#1}}}}
342 %    \end{macrocode}
344 %    \begin{macrocode}
345 \begingroup
346   \obeyspaces%
347   \catcode`\/=\catcode`\\
348   /catcode`/\/active
349   /catcode`<=/catcode`{%
350   /catcode`>=/catcode`}%
351   /catcode`/{/active%
352   /catcode`/}/active%
353   /gdef/oldc< \end{oldcomments}>%
354   /gdef/begmac<    \begin{macrocode}>%
355   /gdef/obs</def <</oc@ttf/ >>>%
356 /endgroup%
357 %    \end{macrocode}
359 %    \begin{macrocode}
360 \begingroup
361   \catcode`\/=\catcode`\\
362   \catcode`\\=13
363   /catcode`/|=/catcode`/%
364   /catcode`/%=13
365   /gdef/oldcomments{|
366     /makeatletter
367     /let/do/oc@verb/dospecials
368     /frenchspacing/@vobeyspaces/obs
369     /raggedright
370     /oc@verb/>|
371     /oc@verb/<|
372     /let\/oc@bslash
373     /let%/oc@percent
374     /obeylines
375     /parindent/z@
376     /ttfamily/expandafter/let/expandafter/oc@ttf/the/font
377     /rmfamily
378     /hfuzz/maxdimen
379     }
380 /endgroup
381 %    \end{macrocode}
383 %    \begin{macrocode}
384 \begingroup
385   \sloppy%
386   \obeylines%
387   \gdef\oc@percent#1^^M{%
388     \ifvmode%
389     \def\commentline{#1}%
390     \ifx\commentline\oldc%
391     \end{oldcomments}%
392     \else%
393     \ifx\commentline\begmac%
394     \begin{macrocode}%
395     \else%
396     \leavevmode%
397     #1^^M%
398     \fi\fi%
399     \else%
400     {\oc@ttf\char`\%}#1^^M%
401     \fi}%
402 \endgroup%
403 %    \end{macrocode}
406 % \section{DocInclude}
408 %    \begin{macrocode}
409 \@addtoreset{CodelineNo}{part}
410 %    \end{macrocode}
412 % \begin{macro}{\DocInclude}
413 % More or less exactly the same as |\include|, but uses |\DocInput|
414 % on a |dtx| file, not |\input| on a |tex| file.
415 % \changes{v2.0b}{1994/03/14}{Rename from \cs{docinclude}}
416 % \changes{v2.0f}{1994/03/25}{Use \cs{part}}
417 % \changes{v2.0u}{1999/08/08}{Also works for .fdd (M. Schroeder)}
418 %    \begin{macrocode}
419 \def\partname{File}
420 %    \end{macrocode}
422 %    \begin{macrocode}
423 \newcommand*{\DocInclude}[1]{%
424   \relax
425   \clearpage
426   \docincludeaux
427   \IfFileExists{#1.fdd}%
428     {\def\currentfile{#1.fdd}}%
429     {\def\currentfile{#1.dtx}}%
430   \ifnum\@auxout=\@partaux
431     \@latexerr{\string\include\space cannot be nested}\@eha
432   \else \@docinclude#1 \fi}
433 \def\@docinclude#1 {\clearpage
434 \if@filesw \immediate\write\@mainaux{\string\@input{#1.aux}}\fi
435 \@tempswatrue\if@partsw \@tempswafalse\edef\@tempb{#1}\@for
436 \@tempa:=\@partlist\do{\ifx\@tempa\@tempb\@tempswatrue\fi}\fi
437 \if@tempswa \let\@auxout\@partaux \if@filesw
438 \immediate\openout\@partaux #1.aux
439 \immediate\write\@partaux{\relax}\fi
440 %    \end{macrocode}
441 % We need to save (and later restore) various index-related
442 % commands which might be changed by the included file.
443 %    \begin{macrocode}
444 \let\@ltxdoc@PrintIndex\PrintIndex
445 \let\PrintIndex\relax
446 \let\@ltxdoc@PrintChanges\PrintChanges
447 \let\PrintChanges\relax
448 \let\@ltxdoc@theglossary\theglossary
449 \let\@ltxdoc@endtheglossary\endtheglossary
450 \part{\currentfile}%
451   {\let\ttfamily\relax
452   \xdef\filekey{\filekey, \thepart={\ttfamily\currentfile}}}%
453 \DocInput{\currentfile}%
454 \let\PrintIndex\@ltxdoc@PrintIndex
455 \let\PrintChanges\@ltxdoc@PrintChanges
456 \let\theglossary\@ltxdoc@theglossary
457 \let\endtheglossary\@ltxdoc@endtheglossary
458 \clearpage
459 \@writeckpt{#1}\if@filesw \immediate\closeout\@partaux \fi
460 \else\@nameuse{cp@#1}\fi\let\@auxout\@mainaux}
461 %    \end{macrocode}
463 %    \begin{macrocode}
464 \gdef\codeline@wrindex#1{\if@filesw
465         \immediate\write\@indexfile
466             {\string\indexentry{#1}%
467             {\filesep\number\c@CodelineNo}}\fi}%
468 %    \end{macrocode}
469 % \end{macro}
471 %    \begin{macrocode}
472 \let\filesep\@empty
473 %    \end{macrocode}
476 %  \begin{macro}{\aalph}
477 % Special  form of |\alph| as currently |source2e.tex|
478 % includes more than 26 files
479 % \changes{v2.0n}{1994/05/27}{Use uppercase letters, for makeindex}.
480 %    \begin{macrocode}
481 \def\aalph#1{\@aalph{\csname c@#1\endcsname}}
482 \def\@aalph#1{%
483   \ifcase#1\or a\or b\or c\or d\or e\or f\or g\or h\or i\or
484          j\or k\or l\or m\or n\or o\or p\or q\or r\or s\or
485          t\or u\or v\or w\or x\or y\or z\or A\or B\or C\or
486          D\or E\or F\or G\or H\or I\or J\or K\or L\or M\or
487          N\or O\or P\or Q\or R\or S\or T\or U\or V\or W\or
488          X\or Y\or Z\else\@ctrerr\fi}
489 %    \end{macrocode}
490 %  \end{macro}
492 % \begin{macro}{\docincludeaux}
493 % \changes{v2.06}{1994/03/31}{Use \cs{footnotesize} in file key.}
494 % \changes{v2.0k}{1994/05/21}{Use \cs{aalph}}
495 %    \begin{macrocode}
496 \def\docincludeaux{%
497   \def\thepart{\aalph{part}}\def\filesep{\thepart-}%
498   \let\filekey\@gobble
499   \g@addto@macro\index@prologue{%
500     \gdef\@oddfoot{\parbox{\textwidth}{\strut\footnotesize
501        \raggedright{\bfseries File Key:} \filekey}}%
502     \let\@evenfoot\@oddfoot}%
503   \global\let\docincludeaux\relax
504  \gdef\@oddfoot{%
505    \expandafter\ifx\csname ver@\currentfile\endcsname\relax
506     File \thepart: {\ttfamily\currentfile} %
507    \else
508     \GetFileInfo{\currentfile}%
509     File \thepart: {\ttfamily\filename} %
510     Date: \filedate\ %
511     Version \fileversion
512     \fi
513     \hfill\thepage}%
514  \let\@evenfoot\@oddfoot}%
515 %    \end{macrocode}
516 % \end{macro}
518 % \begin{macro}{\MaintainedByLaTeXTeam}
519 % \changes{v2.0v}{2015/03/25}{macro added}
520 % \changes{v2.0w}{2015/03/25}{use display block not footnote text}
521 % Generate boilerplate reference to bug database.
522 %    \begin{macrocode}
523 \def\MaintainedBy#1{\gdef\@maintainedby{#1}}
524 %    \end{macrocode}
526 %    \begin{macrocode}
527 \let\@maintainedby\@empty
528 %    \end{macrocode}
530 %    \begin{macrocode}
531 \def\MaintainedByLaTeXTeam#1{%
532 {\gdef\@maintainedby{%
533 This file is maintained by the \LaTeX{} Project team.\\%
534 Bug reports can be opened (category \texttt{#1}) at\\%
535 \url{http://latex-project.org/bugs.html}.}}}
536 %    \end{macrocode}
538 %    \begin{macrocode}
539 \def\@maketitle{%
540   \newpage
541   \null
542   \vskip 2em%
543   \begin{center}%
544   \let \footnote \thanks
545     {\LARGE \@title \par}%
546     \vskip 1.5em%
547     {\large
548       \lineskip .5em%
549       \begin{tabular}[t]{c}%
550         \@author
551       \end{tabular}\par}%
552     \vskip 1em%
553     {\large \@date}%
554     \ifx\@maintainedby\@empty
555     \else
556     \vskip 1em%
557     \fbox{\fbox{\begin{tabular}{@{}l@{}}\@maintainedby\end{tabular}}}%
558     \fi
559   \end{center}%
560   \par
561   \vskip 1.5em}
562 %    \end{macrocode}
563 % \end{macro}
565 % \begin{macro}{\url}
566 %    \begin{macrocode}
567 \providecommand\url{\texttt}
568 %    \end{macrocode}
569 % \end{macro}
571 %    \begin{macrocode}
572 \def\task#1#2{}
573 %</class>
574 %    \end{macrocode}
575 % \Finale