summaryrefslogtreecommitdiff
path: root/systems/doc/pdftex/manual/pdftexmanual.cls
blob: bc67671234f24bee55b47e4da0338485943f45e3 (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
% $Id: pdftexmanual.cls 914 2024-01-07 21:48:39Z karl $
% LaTeX class file for the pdfTeX manual.
% Originally written by Karl Berry, 2023. Public domain.

\LoadClass[11pt]{report}     % use {report} so we can have \appendix
\usepackage[T1]{fontenc}     % for \textbackslash
\usepackage{fullpage}        % fewer pages is better
\usepackage{rerunfilecheck}  % so the Makefile can easily rerun
\usepackage{mflogo,graphicx} % basics
\usepackage{verbatim}        % for \verbatiminput

\divide\abovecaptionskip by 2  % too spacey by default
\setcounter{topnumber}{3}      % .ini figures

\pdfminorversion=3      % maximally compatible
\pdfobjcompresslevel=0  % since minor version=3, can't compress objects
\hbadness=10000         % don't care
\overfullrule=1mm       % but want to see overfull

% This is the default hsize for letter; not ideal, but works well enough
% for a4. Too irritating to rewrite to avoid overfull hboxes with two
% different widths.
\AtBeginDocument{\hsize=469.75502pt }

% If |microtype| is loaded, deactivate it in verbatim blocks.
% It often manipulates a leading |\| in CM rather too much,
% thus messing with the visible fixed-width alignment.
%    \begin{macrocode}
\AtBeginDocument{%
   \@ifpackageloaded{microtype}
     {\g@addto@macro\@verbatim{\microtypesetup{activate=false}}}{}
}

% We want a verbatim command that will accept all special characters (so
% \texttt doesn't work) and work in arguments (so \verb doesn't work).
% 
% - can't use obeyspaces, it generates extra space.
%\PassOptionsToPackage{obeyspaces}{url}
%
% - can't use \HyOrg@url (\url saved by hyperref), it doesn't obey spaces.
% But we have to live with it, switching all args with spaces to \verb.
\usepackage[allowmove]{url} % we only do simple stuff in \caption, let it work
\def\type{\HyOrg@url}
% / in our document is PostScript, not a url, so we want to allow a
% break before, not after. But then we get an infloop, so disallow breaks.
%\g@addto@macro\UrlSpecials{\do\/{\slash}}
\g@addto@macro\UrlNoBreaks{\do\/}
%
% - can't use \nolinkurl from hyperref, doesn't obey spaces, breaks after /,
% sometimes expands, e.g., \pdfcreationdate.
% https://github.com/latex3/hyperref/issues/291
%\def\type{\nolinkurl}
%
% - can't use \lstinline, doesn't work in tables.
%\usepackage{listings}\def\type{\lstinline}
%
% - expl3 attempt:
% \NewDocumentCommand\type{v}{\texttt{#1}}
% but gets error, so I guess I don't understand:
%   LaTeX cmd Error: Verbatim-like command '\type' illegal in arg
%   \pdftexprimitive{\Syntax{\Tex{\pdfoutput}
%
% It seems the general problem remains unsolved in LaTeX.

\usepackage[pdfa,hidelinks,linktoc=all]{hyperref}

%  Assorted convenience macros.
% 
% we can use \textbackslash since we load [T1].
\DeclareRobustCommand{\cs}[1]{\mbox{\tt \textbackslash #1}}%
\DeclareRobustCommand{\titleref}[1]{{\slshape\frenchspacing#1\/}}

\def\eTeX{{$\varepsilon$}-\kern-.125em\TeX}
\def\filename{\type}
\def\hyph{-\penalty0 \hskip0pt \relax} % allow hyphenation after a -
\def\varname{\textit}
%
\def\ConTeXt{C\kern-.0333emon\-\kern-.0667em\TeX\kern-.0333emt}
\def\MDFIVE{MD5} % not oldstyle 5, capital MD
\def\PDFReference{PDF reference manual}
\def\THANH{H\`an Th\^e\llap{\raise 0.5ex\hbox{\'{}}} Th\`anh}
%S
\def\eg{e.g.,}\def\Eg{E.g.,}
\def\ie{i.e.,}\def\Ie{I.e.,}
%
% the default \verbatiminput evidently ends with a blank line.
% Also, it does not give an error when the input file does not exist,
% only a terminal message. Let's complain.
\def\myverbatiminput#1{\begingroup
  \small
  \openin0 = #1
  \ifeof0 \errmessage{No verbatiminput file #1}\else\closein0 \fi
  \verbatiminput{#1}%
  \vspace{-\baselineskip}%
\endgroup}
%
\newenvironment{smalltable}{\medskip\small}{\medskip}

%  Our self-identified version information.
%
\def\svnscan $#1 #2 #3 #4-#5-#6 #7${
  \def\rcsrevision{#3}
  \def\rcsyear{#4}
  \def\rcsmonth{#5}
  \def\rcsday{{\count0=#6\relax\the\count0}}
  \def\rcsmonthname{\ifcase\rcsmonth ERROR\or
    January\or February\or March\or April\or May\or June\or July\or
    August\or September\or October\or November\or December\else ERROR\fi}
}
\def\versplit#1#2#3{#1.#2#3}% 140 -> 1.40
\def\currentpdftex{\expandafter\versplit\the\pdftexversion.\pdftexrevision}

%  Syntax descriptions.
%
% used in main source text to mark a primitive.
\def\pdftexprimitive{\par\nobreak\vspace{-4pt}\noindent\strut}

\def\aftersyntax{\nobreak\smallskip} % changed for appendix
\def\Syntax   #1{{#1\strut}\par\aftersyntax}
\def\Next       {\nobreak\newline\hbox to 4em{}\nobreak} % multiline syntax
\def\Sugar      {}
\def\Lbrace     {\Sugar{\allowbreak\texttt{\textbraceleft}}}
\def\Literal  #1{\Sugar{\type{#1}}}
\def\Means      {\Sugar{\ensuremath{\rightarrow}\;\;}}
\def\Modelist #1{\Sugar{\;\ensuremath{(\hbox{#1})}}}
\def\Optional #1{\Sugar{\ensuremath{\,[\,\hbox{#1}\,]\,}}}
\def\Or         {\Sugar{\,\ensuremath{\vert}\,\nobreak\ }}
\def\Something#1{\Sugar{\ensuremath{\langle}{#1}\ensuremath{\rangle}}}
\def\Rbrace     {\Sugar{\texttt{\textbraceright}}}
%\def\Tex      #1{\Sugar{\type{#1}}}
\def\Whatever #1{\Sugar{\kern.75em\ensuremath{(\hbox{#1})}}} % parens
                        % more space before, more separation on syntax lines.
% introduced:
\def\introduced#1{The primitive was introduced in \PDFTEX\ #1.}
\def\introducedplural#1{The primitives were introduced in \PDFTEX\ #1.}

%  Urls.
%
% assume all defined url control sequences start with "url":
\def\useurl#1{\expandafter\csname url#1\endcsname}

\urldef{\urlctansystems}  \url{https://ctan.org/tex-archive/systems}
\urldef{\urletexctan}	  \url{https://ctan.org/pkg/etex}
\urldef{\urljbigenc}      \url{https://github.com/agl/jbig2enc}
\urldef{\urlkpathsea}	  \url{https://tug.org/kpathsea}
\urldef{\urlluatex}	  \url{https://ctan.org/pkg/luatex}
\urldef{\urlpdfreference} \url{https://pdfa.org/resource/pdf-specification-index/}
\urldef{\urlptexctan}	  \url{https://ctan.org/pkg/pdftex}
\urldef{\urlptexdevel}	  \url{svn://tug.org/pdftex/branches/stable}
\urldef{\urlptexbugs}     \url{https://lists.tug.org/pdftex}
\urldef{\urlptexorg}	  \url{https://www.pdftex.org}
\urldef{\urltcxfiles}	  \url{https://tug.org/texinfohtml/web2c.html#TCX-files}
\urldef{\urltexlive}	  \url{https://tug.org/texlive}
\urldef{\urlthanhtruetypetub} \url{https://tug.org/TUGboat/tb30-1/tb94thanh.pdf}
\urldef{\urltughelp}	  \url{https://tug.org/begin}
\urldef{\urlwebc}	  \url{https://tug.org/web2c}
\urldef{\urlxetex}	  \url{https://tug.org/xetex}
\urldef{\urlwindows}	  \url{http://ctan.org/tex-archive/systems/windows}

%  Abbreviations.
\newtoks\abbrevtoks
\def\abbrevlist{{%
  \par\bigskip
  \small
  \advance\baselineskip by 2pt plus1pt minus1pt
  \halign{&##\qquad\hfil\cr\the\abbrevtoks}%
}}
\def\abbrevitem#1#2{#1&#2\cr}
\def\abbreviation[#1] #2 #3{%
  \expandafter\def\csname#1\endcsname{#2}%
  \abbrevtoks = \expandafter{\the\abbrevtoks \abbrevitem{#2}{#3}}
}

\abbreviation [AFM]        {AFM}        {Adobe Font Metrics}
\abbreviation [ASCII]      {ASCII}      {American Standard Code for Information Interchange}
\abbreviation [CONTEXT]    {\ConTeXt}   {general purpose macro package}
\abbreviation [CTAN]       {CTAN}       {global \TEX\ archive server}
\abbreviation [DVI]        {DVI}        {native \TEX\ DeVice Independent file format}
\abbreviation [ENCTEX]     {enc\TeX}    {enc\TeX\ extension to \TEX}
\abbreviation [EPSTOPDF]   {epstopdf}   {\EPS\ to \PDF\ conversion tool}
\abbreviation [EPS]        {EPS}        {Encapsulated PostScript}
\abbreviation [EPLAIN]     {Eplain}     {Expanded plain \TEX\ format}
\abbreviation [ETEX]       {\eTeX}      {a stable extension to \TEX}
\abbreviation [EXIF]       {EXIF}       {Exchangeable Image File format (JPEG file variant)}
\abbreviation [GHOSTSCRIPT] {Ghostscript} {\POSTSCRIPT\ and \PDF\ language interpreter}
\abbreviation [GNU]        {GNU}        {GNU's Not Unix}
\abbreviation [HZ]         {HZ}         {Hermann Zapf's paragraph-breaking optimizations}
\abbreviation [ISO]        {ISO}        {International Organization for Standardization}
\abbreviation [JBIGTWO]    {JBIG2}      {Joint Bi-level Image Experts Group image format, version 2}
\abbreviation [JBIG]       {JBIG}       {Joint Bi-level Image Experts Group image format}
\abbreviation [JFIF]       {JFIF}       {JPEG File Interchange Format}
\abbreviation [JPEG]       {JPEG}       {Joint Photographic Experts Group}
\abbreviation [LATEX]      {\LaTeX}     {general-purpose macro package}
\abbreviation [LMTX]       {LMTX}       {the LuaMeta\TeX\ engine}
\abbreviation [LUATEX]     {Lua\TeX}    {the Lua\TeX\ engine}
\abbreviation [MACTEX]     {Mac\-\TeX}  {\TEXLIVE\ on the Mac}
\abbreviation [METAFONT]   {\MF}        {graphic programming environment, bitmap output}
\abbreviation [METAPOST]   {MetaPost}   {graphic programming environment, vector output}
\abbreviation [MIKTEX]     {MiK\TeX}    {\TeX\ distribution for \WIN}
\abbreviation [MLTEX]      {ml\TeX}     {ML\TeX\ extension to \TEX}
\abbreviation [MPTOPDF]    {mptopdf}    {\METAPOST\ to \PDF\ conversion tool}
\abbreviation [PDFA]       {PDF/\kern-.05em A} {PDF A/* standards}
\abbreviation [PDFETEX]    {pdfe\TeX}   {\ETEX\ extension supporting \PDF\ output}
\abbreviation [PDFLATEX]   {pdf\LaTeX}  {\LATEX\ format using \PDFTEX, producing \PDF}
\abbreviation [PDFTEX]     {pdf\TeX}    {\TEX\ extension supporting \PDF\ output}
\abbreviation [PDF]        {PDF}        {Portable Document Format}
\abbreviation [PERL]       {Perl}       {Perl programming environment}
\abbreviation [PFA]        {PFA}        {Adobe PostScript Font format, ASCII}
\abbreviation [PFB]        {PFB}        {Adobe PostScript Font format, binary}
\abbreviation [PK]         {PK}         {Packed bitmap font}
\abbreviation [PNG]        {PNG}        {Portable Network Graphics}
\abbreviation [POSIX]      {POSIX}      {Portable Operating System Interface}
\abbreviation [POSTSCRIPT] {PostScript} {general graphics language}
\abbreviation [PSTOPDF]    {PStoPDF}    {PostScript to \PDF\ converter (on top of \GHOSTSCRIPT)}
\abbreviation [RGB]        {RGB}        {red--green--blue color specification}
\abbreviation [TCX]        {TCX}        {\TEX\ Character Translation}
\abbreviation [TDS]        {TDS}        {\TEX\ Directory Standard}
\abbreviation [TEXINFO]    {Texinfo}    {\GNU\ documentation format}
\abbreviation [TEXLIVE]    {\TeX\ Live} {\TeX\ Live distribution (cross-platform)}
\abbreviation [TEX]        {\TeX}       {typographic language and program}
\abbreviation [TFM]        {TFM}        {\TEX\ Font Metrics}
\abbreviation [TIF]        {TIFF}       {Tagged Interchange File format}
\abbreviation [TUG]        {TUG}        {\TEX\ Users Group, \texttt{tug.org}}
\abbreviation [UNIX]       {Unix}       {Unix platform}
\abbreviation [URL]        {url}        {Uniform Resource Locator}
\abbreviation [UTFEIGHT]   {\mbox{UTF-8}} {Uniform Resource Locator}
\abbreviation [WEBC]       {Web2C}      {Implementation framework for \TEX\ and friends}
\abbreviation [WEB]        {WEB}        {literate programming environment}
\abbreviation [WIN]        {Windows}    {Microsoft Windows platform}
\abbreviation [XETEX]      {Xe\TeX}     {the Xe\TeX\ engine}