default document language
[latex2e.git] / trunk / base / source2e.tex
blobfea1e04cb73abd72268013a0d8225a7c2d4b154c
1 % \iffalse meta-comment
3 % Copyright 1993-2016
4 % The LaTeX3 Project and any individual authors listed elsewhere
5 % in this file.
6 %
7 % This file is part of the LaTeX base system.
8 % -------------------------------------------
9 %
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 % This document will typeset the LaTeX sources as a single document.
31 % This will produce quite a large file (roughly 555 pages) and may
32 % take a long time.
34 % Some notes on processing this document are contained at the end
35 % of this document, after \end{document}
37 % DPC 1997/11/17
39 % First a special index style for makeindex
42 \begin{filecontents}{source2e.ist}
43 actual '='
44 quote '!'
45 level '>'
46 preamble
47 "\n \\begin{theindex} \n \\makeatletter\\scan@allowedfalse\n"
48 postamble
49 "\n\n \\end{theindex}\n"
50 item_x1 "\\efill \n \\subitem "
51 item_x2 "\\efill \n \\subsubitem "
52 delim_0 "\\pfill "
53 delim_1 "\\pfill "
54 delim_2 "\\pfill "
55 % The next lines will produce some warnings when
56 % running Makeindex as they try to cover two different
57 % versions of the program:
58 lethead_prefix "{\\bfseries\\hfil "
59 lethead_suffix "\\hfil}\\nopagebreak\n"
60 lethead_flag 1
61 heading_prefix "{\\bfseries\\hfil "
62 heading_suffix "\\hfil}\\nopagebreak\n"
63 headings_flag 1
65 % and just for source2e:
66 % Remove R so I is treated in sequence I J K not I II III
67 page_precedence "rnaA"
68 \end{filecontents}
72 \documentclass{ltxdoc}
74 \listfiles
76 % Do not index some TeX primitives, and some common plain TeX commands.
78 \DoNotIndex{\def,\long,\edef,\xdef,\gdef,\let,\global}
79 \DoNotIndex{\if,\ifnum,\ifdim,\ifcat,\ifmmode,\ifvmode,\ifhmode,%
80 \iftrue,\iffalse,\ifvoid,\ifx,\ifeof,\ifcase,\else,\or,\fi}
81 \DoNotIndex{\box,\copy,\setbox,\unvbox,\unhbox,\hbox,%
82 \vbox,\vtop,\vcenter}
83 \DoNotIndex{\@empty,\immediate,\write}
84 \DoNotIndex{\egroup,\bgroup,\expandafter,\begingroup,\endgroup}
85 \DoNotIndex{\divide,\advance,\multiply,\count,\dimen}
86 \DoNotIndex{\relax,\space,\string}
87 \DoNotIndex{\csname,\endcsname,\@spaces,\openin,\openout,%
88 \closein,\closeout}
89 \DoNotIndex{\catcode,\endinput}
90 \DoNotIndex{\jobname,\message,\read,\the,\m@ne,\noexpand}
91 \DoNotIndex{\hsize,\vsize,\hskip,\vskip,\kern,\hfil,\hfill,\hss}
92 \DoNotIndex{\m@ne,\z@,\z@skip,\@ne,\tw@,\p@}
93 \DoNotIndex{\dp,\wd,\ht,\vss,\unskip}
95 % Set up the Index and Change History to use \part
96 \IndexPrologue{\part*{Index}%
97 \markboth{Index}{Index}%
98 \addcontentsline{toc}{part}{Index}%
99 The italic numbers denote the pages where the
100 corresponding entry is described,
101 numbers underlined point to the definition,
102 all others indicate the places where it is used.}
104 \GlossaryPrologue{\part*{Change History}%
105 % Allow control names to be hyphenated here...
106 {\GlossaryParms\ttfamily\hyphenchar\font=`\-}%
107 \markboth{Change History}{Change History}%
108 \addcontentsline{toc}{part}{Change History}}
110 % The standard \changes command modified slightly to better cope with
111 % this multiple file document.
112 \makeatletter
113 \def\@changes@iso@date#1/#2/#3/#4\space{#1\if\relax#2\relax\else-#2-#3\fi\space}
114 \def\changes@#1#2#3{%
115 \let\protect\@unexpandable@protect
116 \edef\@tempa{\noexpand\glossary{\@changes@iso@date#2///\space
117 \currentfile\space#1\levelchar
118 \ifx\saved@macroname\@empty
119 \space
120 \actualchar
121 \generalname
122 \else
123 \expandafter\@gobble
124 \saved@macroname
125 \actualchar
126 \string\verb\quotechar*%
127 \verbatimchar\saved@macroname
128 \verbatimchar
130 :\levelchar #3}}%
131 \@tempa\endgroup\@esphack}
133 % Section numbers now reach eg 74.17.2 which need more space
134 \renewcommand*\l@subsection{\@dottedtocline{2}{1.5em}{2.8em}}
135 \renewcommand*\l@subsubsection{\@dottedtocline{3}{3.8em}{3.4em}}
136 \makeatother
138 % Produce a Change Log and (2 column) Index.
139 \RecordChanges
140 \CodelineIndex
141 \EnableCrossrefs
142 \setcounter{IndexColumns}{2}
144 % Needed for documentation in ltoutenc.dtx
145 \usepackage{textcomp}
147 \begin{document}
148 \title{The \LaTeXe\ Sources}
149 \author{%
150 Johannes Braams\\
151 David Carlisle\\
152 Alan Jeffrey\\
153 Leslie Lamport\\
154 Frank Mittelbach\\
155 Chris Rowley\\
156 Rainer Sch\"opf}
158 % This command will be used to input the patch file
159 % if that file exists.
160 \newcommand{\includeltpatch}{%
161 \def\currentfile{ltpatch.ltx}
162 \part{ltpatch}
163 {\let\ttfamily\relax
164 \xdef\filekey{\filekey, \thepart={\ttfamily\currentfile}}}%
165 Things we did wrong\ldots
166 \IndexInput{ltpatch.ltx}}
170 % Get the date and patch level from ltvers.dtx
171 \makeatletter
172 \let\patchdate=\@empty
173 \begingroup
174 \def\ProvidesFile#1\fmtversion#2#3\patch@level#4{%
175 \date{#2}\xdef\patchdate{#4}\endinput}
176 \input{ltvers.dtx}
177 \global\let\X@date=\@date
179 % Add the patch version if available.
180 \long\def\Xdef#1#2#3\def#4#5{%
181 \xdef\X@date{#2}%
182 \xdef\patchdate{#5}%
183 \endinput}%
184 \InputIfFileExists{ltpatch.ltx}
185 {\let\def\Xdef}{\global\let\includeltpatch\relax}
186 \endgroup
188 \ifx\@date\X@date
189 \def\Xpatch{0}
190 \ifx\patchdate\Xpatch\else
191 \edef\@date{\@date\space Patch level \patchdate}
193 \else
194 \@warning{ltpatch.ltx does not match ltvers.dtx!}
195 \let\includeltpatch\relax
197 \makeatother
199 \pagenumbering{roman}
200 \MaintainedByLaTeXTeam{latex}
201 \maketitle
202 \renewcommand\maketitle{}
204 \tableofcontents
206 \clearpage
208 \pagenumbering{arabic}
210 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
212 % Each of the following \DocInclude lines includes a file with extension
213 % .dtx. Each of these files may be typeset separately. For instance
214 % latex ltboxes.dtx
215 % will typeset the source of the LaTeX box commands.
217 % If this file is processed, each of these separate dtx files will be
218 % contained as a part of a single document. Using ltxdoc.cfg you can
219 % then optionally produce a combined index and/or change history for
220 % the entire source of the format file. Note that such a document will
221 % be quite large (about 555 pages).
224 \DocInclude{ltdirchk} % System dependent initialisation
226 \DocInclude{ltplain} % LaTeX version of Knuth's plain.tex
228 \DocInclude{ltvers} % Current version date
230 \DocInclude{ltdefns} % Initial definitions.
232 \DocInclude{ltalloc} % Allocation of counters and others.
234 \DocInclude{ltcntrl} % Program control macros.
236 \DocInclude{lterror} % Error handling.
238 \DocInclude{ltpar} % Paragraphs.
240 \DocInclude{ltspace} % Spacing, line and page breaking.
242 \DocInclude{ltlogos} % Logos.
244 \DocInclude{ltfiles} % \input files and related commands
246 \DocInclude{ltoutenc} % Output encoding interface
248 \DocInclude{ltcounts} % Counters
250 \DocInclude{ltlength} % Lengths
252 \DocInclude{ltfssbas} % NFSS Base macros
254 \DocInclude{ltfsstrc} % NFSS Tracing (and tracefnt.sty)
256 \DocInclude{ltfsscmp} % NFSS1 Compatibility
258 \DocInclude{ltfssdcl} % NFSS Declarative interface
260 \DocInclude{ltfssini} % NFSS Initialisation
262 \DocInclude{fontdef} % fonttext.ltx/fontmath.ltx
264 \DocInclude{preload} % preload.ltx
266 \DocInclude{ltfntcmd} % \textrm etc
268 \DocInclude{ltpageno} % Page numbering
270 \DocInclude{ltxref} % Cross referencing
272 \DocInclude{ltmiscen} % Miscellaneous environment definitions.
274 \DocInclude{ltmath} % Mathematics set up.
276 \DocInclude{ltlists} % List and related environments
278 \DocInclude{ltboxes} % Parbox and friends
280 \DocInclude{lttab} % Tabbing tabular and array
282 \DocInclude{ltpictur} % Picture mode
284 \DocInclude{ltthm} % Theorem environments
286 \DocInclude{ltsect} % Sectioning
288 \DocInclude{ltfloat} % Floats
290 \DocInclude{ltidxglo} % Index and Glossary
292 \DocInclude{ltbibl} % Bibliography
294 \DocInclude{ltpage} % \pagestyle \raggedbottom \sloppy
296 \DocInclude{ltoutput} % Output routine
298 \DocInclude{ltclass} % Package & Class interface
300 \DocInclude{lthyphen} % Hyphenation (hyphen.ltx).
302 \DocInclude{ltluatex} % Luatex support
304 \DocInclude{ltfinal} % Last minute initialisations and dump
306 \includeltpatch % Corrections distributed after the full release
308 % Stop here if ltxdoc.cfg says \AtEndOfClass{\OnlyDescription}
309 \StopEventually{\end{document}}
311 \clearpage
312 \pagestyle{headings}
314 % Make TeX shut up.
315 \hbadness=10000
316 \newcount\hbadness
317 \hfuzz=\maxdimen
319 \typeout{%
320 \string # Produce change log with^^J%
321 makeindex -s gglo.ist -o source2e.gls source2e.glo}
324 \PrintChanges
326 \clearpage
328 % makeindex needs a symbol between the parts of composite page numbers
329 % but we dont want one, so:
330 \typeout{%
331 \string # Produce index with^^J%
332 makeindex -s source2e.ist source2e.idx}
334 \begingroup
335 \def\endash{--}
336 \catcode`\-\active
337 \def-{\futurelet\temp\indexdash}
338 \def\indexdash{\ifx\temp-\endash\fi}
340 \PrintIndex
341 \endgroup
343 % Make sure that the index is not printed twice
344 % (ltxdoc.cfg might have a second \PrintIndex command)
345 \let\PrintChanges\relax
346 \let\PrintIndex\relax
348 \end{document}
351 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
353 To use this file to produce a fully indexed source code
354 you need to execute the following (or equivalent) commands:
356 latex source2e.tex
358 makeindex -s source2e.ist source2e.idx
359 makeindex -s gglo.ist -o source2e.gls source2e.glo
361 latex source2e.tex
362 latex source2e.tex
365 The makeindex style source2e.ist is used in place of the usual
366 doc gind.ist to ensure that I is used in the sequence I J K
367 not I II II, which would be the default makeindex behaviour.
369 The third run with latex is only required to get the table of
370 contents entries for the change log and index. You may speed things up
371 by using the \includeonly mechanism so as not to typeset the source
372 files on the second run. This involves changing the file
373 ltxdoc.cfg
374 between the latex runs.
376 The following unix script automates this.
377 (It could easily be ported to scripts for DOS or VMS,
378 rm is ReMove a file, and echo "..." > file writes ... to "file".)
381 After this script (after the second ==============) is a similar script
382 that will produce the documentation for all the files in the base
383 distribution that are *not* included in source2e.dvi. This second script
384 was requested, but before using it, beware it will take a long time!
385 It may however be modified as required, eg to not typeset the fdd files
386 or whatever...
388 ==============
389 #!/bin/sh
391 rm -f source2e.gls source2e.ind source2e.toc
393 # First run:
394 # Create new standard ltxdoc.cfg file
395 # Pass the (possibly empty) list of arguments supplied on the
396 # command line to article class.
398 # If you use A4 paper, running this script with argument
399 # a4paper
400 # may save about 30 pages.
402 echo "\PassOptionsToClass{$*}{article}" > ltxdoc.cfg
405 # Now LaTeX the file with this cfg file.
407 latex source2e.tex
410 # Make the Change log and Glossary.
412 makeindex -s source2e.ist source2e.idx
413 makeindex -s gglo.ist -o source2e.gls source2e.glo
416 # Second run: append \includeonly{} to ltxdoc.cfg to speed up things
417 # (this run needed only to get changes and index listed in .toc file)
419 # Note that the index will not be made incorrect by the insertion
420 # of the table of contents as the front matter uses a different page
421 # numbering scheme.
423 echo "\includeonly{}" >> ltxdoc.cfg
425 latex source2e.tex
428 # Third and final run, to put everything together.
429 # First restore the cfg file:
431 echo "\PassOptionsToClass{$*}{article}" > ltxdoc.cfg
432 latex source2e.tex
435 ==============
436 #!/bin/sh
438 # Running this script will process all the dtx fdd and *guide.tex
439 # and ltnews*.tex files in the LaTeX distribution, except the dtx
440 # files included in source2e.tex.
441 # (The shell first script in the comments of source2e.tex will
442 # process those.)
444 # Any command line arguments (eg a4paper) are taken as options to the
445 # article class.
447 # This script is likely to take ages!
449 echo "\PassOptionsToClass{$*}{article}" > ltxdoc.cfg
450 echo "\batchmode" >> ltxdoc.cfg
452 # The next four lines produce full indexes and change logs
453 # you may not want those.
454 echo "\AtBeginDocument{\RecordChanges}" >> ltxdoc.cfg
455 echo "\AtEndDocument{\PrintChanges}" >> ltxdoc.cfg
456 echo "\AtBeginDocument{\CodelineIndex\EnableCrossrefs}" >> ltxdoc.cfg
457 echo "\AtEndDocument{\PrintIndex}" >> ltxdoc.cfg
459 # If you do not want any code listings, just documentation, then instead
460 # of the above four lines, uncomment the following:
461 # echo "\AtBeginDocument{\OnlyDescription}" >> ltxdoc.cfg
463 echo "\PassOptionsToClass{$*}{article}" > ltxguide.cfg
464 echo "\batchmode" >> ltxguide.cfg
466 cp ltxguide.cfg ltnews.cfg
469 for i in *dtx *fdd *guide.tex ltnews*.tex
471 B=`basename $i .dtx`
473 if (grep "Include{$B}" source2e.tex >/dev/null ; )
474 then
475 echo In source2e: $i
476 else
477 echo latex $i
478 if (latex $i > /dev/null)
479 then
480 echo latex $i
481 latex $i > /dev/null
482 echo makeindex -s gind.ist $B.idx
483 makeindex -s gind.ist $B.idx > /dev/null 2> /dev/null
484 echo makeindex -s gglo.ist -o $B.gls $B.glo
485 makeindex -s gglo.ist -o $B.gls $B.glo > /dev/null 2> /dev/null
486 echo latex $i
487 latex $i > /dev/null
488 else
489 echo "!!! LaTeX ERROR: $i. (See $B.log.)"
493 done