PDCAdobe—Macros for using Adobe fonts

Version 1.3, last changed pdc 1995–03–30

P. Damian Cugley

1. Introduction

This document describes pdcadobe.tex, a collection of macros for using Adobe’s Standard Roman character set, via DVIPS’s variation on the TEX Text encoding.

Note You will need to use a different strategy if your PostScript fonts adhere strictly to the TEX Text conventions (the conventions of Computer Modern Roman, described in TEXbook Appendix F, and called OT1 by the LaTEX 3 team), such as the fonts generated with Fontinst.

1.1. New text symbols The new characters now available in text are:

\quotesingle1 typewriter-style apostrophe (')
\quotedouble1 typewriter-style double apostrophe (")
\asciicircum1 ASCII circumflex

    \asciitilde1 ASCII tilde

1.2. Use of the Symbol font The assumption is that one of the resons for using PostScript fonts is that, if you stick to the ‘Adobe 35’, the resulting PostScript files are much smaller because no font bitmaps need to be downloaded. On this assumption, Adobe’s Symbol font is used whenever possible, even when the Computer Modern symbol is arguably prettier.

The Symbol font will need to have its own maths family, which by convention this file expects to find defined as \asyfam.

1.3. Composite letters Composite letters are those made from some base letter and a mark, for example é, ü.* In the Adobe Standard Roman character set, and hence in afm2tfm’s encoding, the composite letters of ISO 8859–1 are included as separate glyphs. These glyphs are accessed using ligatures between mark glyphs and base letters (so that ^^13e in the manuscript file produces ‘é’). Unfortunately, exploiting this is tricky if we also want to allow for composite glyphs not included in the PostScript fonts.

The approach taken in these definitions is that TEX’s composite letter commands (\´ , \", and friends) are left unchanged, so that ‘\´ e’ works through TEX’s \ command. The magic glyphs are available as commands with names like \acuteglyph or via the Latin-1 special symbols, so that ‘\acuteglyph e’ or ‘^^b4e’ (which might liik like ‘´ e’ on the screen if your computer uses Latin-1) produces ‘é’ as a single glyph (which might mean tha mark is better aligned). Finally, the Latin-1 composite letters generate the single glyphs vial ligatures, so that ‘^^e9’ (which may well look like ‘é’ on the screen) expands to ‘\acuteglyph e’ and hence ‘é’.

* ‘Composite letters’ is a euphemism for what English speakers usually refer to as ‘ ed letters’, since the word ‘ ’ tends to provoke lectures to the effect that composite letters are not considered to be ‘ ed’ in many of the lanuages in which they are used.

1–46 PDCAdobe—Macros for using Adobe fonts 1.3 1995–03–30

1.4. About this document The definitions file and the printed documentation are both in pdcadobe.dtx, a ‘documented TEX macros’ file* which, when processed by plain TEX, generates a fresh copy of pdcadobe.tex in the current directory in addition to the dvi file. This ensures that the printed documentation and the code it describes are identical. The dtx file uses the mac-

ros in pdccode.tex.

2. File identification

Nowadays, macro files start with some comments identifying the file.

 1 % pdcadobe.tex 1.3 1995/03/30 -- macros for Adobe style fonts

2

 3 %%%@TeX-definition-file {
 4 %%% filename       = "$texmf/tex/plain/pdcmac/pdcadobe.tex",
 5 %%% version        = "1.3",
 6 %%% date           = "1995/03/30",
 7 %%% package        = "pdcmac 1.0",
 8 %%% author         = "P. Damian Cugley",
 9 %%% email          = "damian.cugley@comlab.ox.ac.uk",
10 %%% address        = "Oxford University Computing Laboratory,
11 %%%                   Parks Road, Oxford  OX1 3QD, UK",
12 %%% codetable      = "USASCII",
13 %%% keywords       = "TeX, plain TeX, macros",
14 %%% supported      = "Maybe",
15 %%% abstract       = "Formatting macros for Adobe-style fonts.
16 %%%                   This file was generated by running
17 %%%                   plain TeX on pdcadobe.dtx",
18 %%% copyright      = "Copyright (c) 1991-1995 P. Damian Cugley",
19 %%% copying        = "DO NOT DISTRIBUTE THIS FILE.
20 %%%                   Distribute pdcadobe.dtx only as part of the
21 %%%                   package it came in.",
22 %%% dependencies   = "",
23 %%% }

24

25 \message{1.3 <pdc 1995/03/30>}

26

3. Characters available in all styles

The following characters are in the fonts generated by afm2tfm, so are available in all styles.

27 \chardef\quotesingle="0D
28 \chardef\quotedouble="22
29 \chardef\_="5F
30 \chardef\asciicircum="80
31 \chardef\asciitilde="81
32 \chardef\cents="A2
33 \chardef\pounds="A3
34 \chardef\fractionslash="A4
35 \chardef\yen="A5
36 \chardef\florin="A6
37 \chardef\S="A7
38 \chardef\currency="A8
39 \chardef\lguillemet="AB
40 \chardef\dag="B2
41 \chardef\ddag="B3
42 \chardef\gbdecimal="B4
43 \chardef\P="B6
44 \chardef\bullet="B7
45 \chardef\quotesinglebase="B8
46 \chardef\quotedblbase="B9

* The LaTEX 2e distribution uses files with the ‘dtx’ suffix for similar purposes.

47 \chardef\rguillemet="BB
48 \chardef\ellipsis="BC \def\dots{\ellipsis\thinspace}
49 \chardef\permille="BD
50 \chardef\orda="E3
51 \chardef\ordo="EB

Some glyphs, like \fractionslash and \gbdecimal may well be used in maths mode, but are defined using \chardef to allow them to be used in text as well.

The definition of \dots adds the thin space that is included in plain TEX’s \dots, so that ‘\dots,’ will have a thin space between the third full stop and the comma.

3.1. Maths stuff These symbols are available in maths mode, coming from the \rm font (fam 0).

52 \mathchardef\backslash="205C
53 \edef\lbrace{\delimiter"407B308} \let\{=\lbrace \mathcode` \{="407B
54 \mathcode` \|="707C  \mathchardef\mid="307C
55 \edef\rbrace{\delimiter"507D309} \let\}=\rbrace \mathcode` \}="507D
56 \mathchardef\sim="3081
57 \mathchardef\cdot="20B4
58 \mathchardef\bullet="20B7
59 \mathchardef\ldots="60BC

There are extensible braces in the Adobe Symbol font, which I would have used for the \lbrace and \rbrace commands. Unfortunately, the TFM file generated with afm2tfm seems to lack the special information that makes extensible characters work, so the cmex10 glyphs must be used instead.

3.2. Marks for composite letters Some common accented letters can be got by printing the accent glyph before the letter glyph. However not all combinations will work, so I have left plain TEX’s definitions in place.

For later reference, the glyphs used for the accents are given names.

60 \chardef\graveglyph="12
61 \chardef\acuteglyph="13
62 \chardef\hookglyph="14
63 \chardef\breveglyph="15
64 \chardef\macronglyph="16
65 \chardef\ringglyph="17
66 \chardef\cedillaglyph="18
67 \chardef\circumglyph="5E
68 \chardef\tildeglyph="7E
69 \chardef\twodotsglyph="7F
70 \chardef\dotglyph="C7
71 \chardef\hungarianglyph="CD
72 \chardef\ogonekglyph="CE

Some special letters and marks have been moved to new slots.

73 \chardef\AA="C8 \chardef\aa="98
74 \chardef\L="E8 \chardef\l="F8
75 \def\.#1{\accent\dotglyph #1}
76 \def\H#1{\accent\hungarianglyph"CD #1}

4. Adobe Symbol font characters

Most of Adobe’s Symbol font’s glyphs exist already in one of the maths fonts. Nevertheless I think it makes sense to use them whenever possible, because if it so happens that none of the glyphs in the maths fonts are used, the bitmaps for the fonts may be omitted from the PostScript file, making it much smaller. For these definitions to work, there must be a family \asyfam and font nickname \asy.

77 \ifx\asyfam\UNDEFINED
78  \newfam\asyfam
79 \fi

4.1. Extracting the fam name

80 \edef\\{\ifcase\asyfam 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or
 81  8\or 9\or A\or B\or C\or D\or E\or F\fi

82 }

Where plain TEX’s definition uses glyphs from the roman font, I have let the definition stand.

 83 \mathchardef\forall="0\\22
 84 \mathchardef\exists="0\\24
 85 \mathchardef\suchthat="0\\27
 86 \mathcode` *="2\\2A
 87 \mathcode` ,="6\\2C
 88 \mathcode` -="2\\2D
 89 \mathcode` .="2\\2E
 90 \mathcode` /="2\\2F
 91 \mathcode` <="3\\3C
 92 \mathcode` >="3\\3E
 93 \mathchardef\cong="3\\40
 94 \mathchardef\Alpha="0\\41
 95 \mathchardef\Beta="0\\42
 96 \mathchardef\Chi="0\\43
 97 \mathchardef\Delta="0\\44
 98 \mathchardef\Epsilon="0\\45
 99 \mathchardef\Phi="0\\46
100 \mathchardef\Gamma="0\\47
101 \mathchardef\Eta="0\\48
102 \mathchardef\Iota="0\\49
103 \mathchardef\vartheta="0\\4A
104 \mathchardef\Kappa="0\\4B
105 \mathchardef\Lambda="0\\4C
106 \mathchardef\Mu="0\\4D
107 \mathchardef\Ni="0\\4E
108 \mathchardef\Omicron="0\\4F
109 \mathchardef\Pi="0\\50
110 \mathchardef\Theta="0\\51
111 \mathchardef\Rho="0\\52
112 \mathchardef\Sigma="0\\53
113 \mathchardef\Tau="0\\54
114 \mathchardef\varUpsilon="0\\55
115 \mathchardef\varsigma="0\\56
116 \mathchardef\Omega="0\\57
117 \mathchardef\Xi="0\\58
118 \mathchardef\Psi="0\\59
119 \mathchardef\Zeta="0\\5A
120 \mathchardef\therefore="3\\5C
121 \mathchardef\perp="3\\5E
122 \mathchardef\alpha="0\\61
123 \mathchardef\beta="0\\62
124 \mathchardef\chi="0\\63
125 \mathchardef\delta="0\\64
126 \mathchardef\epsilon="0\\65
127 \mathchardef\phi="0\\66
128 \mathchardef\gamma="0\\67
129 \mathchardef\eta="0\\68
130 \mathchardef\iota="0\\69
131 \mathchardef\varphi="0\\6A
132 \mathchardef\kappa="0\\6B
133 \mathchardef\lambda="0\\6C
134 \mathchardef\mu="0\\6D
135 \mathchardef\ni="0\\6E
136 \mathchardef\omicron="0\\6F

137 \mathchardef\pi="0\\70
138 \mathchardef\theta="0\\71
139 \mathchardef\rho="0\\72
140 \mathchardef\sigma="0\\73
141 \mathchardef\tau="0\\74
142 \mathchardef\upsilon="0\\75
143 \mathchardef\varpi="0\\76
144 \mathchardef\omega="0\\77
145 \mathchardef\xi="0\\78
146 \mathchardef\psi="0\\79
147 \mathchardef\zeta="0\\7A
148 \mathchardef\sim="3\\7E
149 \mathchardef\Upsilon="0\\A1
150 \mathcode` ´ ="0\\A2 \mathchardef\minutes="0\\A2
151 \mathchardef\leq="3\\A3 \let\le=\leq
152 \mathchardef\fractionslash="0\\A4
153 \mathchardef\infinity="0\\A5
154 \mathchardef\clubsuit="0\\A7
155 \mathchardef\diamondsuit="0\\A8
156 \mathchardef\heartsuit="0\\A9
157 \mathchardef\spadesuit="0\\AA
158 \mathchardef\leftrightarrow="3\\AB
159 \mathchardef\leftarrow="3\\AC \let\gets=\rightarrow
160 \mathchardef\uparrow="3\\AD
161 \mathchardef\rightarrow="3\\AE \let\to=\rightarrow
162 \mathchardef\downarrow="3\\AF
163 \mathchardef\degrees="0\\B0
164 \mathchardef\pm="2\\B1
165 \mathchardef\seconds="0\\B2
166 \mathchardef\geq="3\\B3 \let\ge=\geq
167 \mathchardef\times="2\\B4
168 \mathchardef\propto="3\\B5
169 \mathchardef\partial="0\\B6
170 \mathchardef\div="2\\B8
171 \mathchardef\neq="3\\B9 \let\ne=\neq
172 \mathchardef\equiv="3\\BA
173 \mathchardef\approx="3\\BB
174 \mathchardef\ldots="6\\BC
175 \edef\arrowvert{\delimiter"0\\BD33C }
176 \mathchardef\relbar"3\\BE
177 \edef\crlf{\noexpand\mathexbox\\BF}
178 \mathchardef\aleph="0\\C0
179 \mathchardef\Im="0\\C1
180 \mathchardef\Re="0\\C2
181 \mathchardef\wp="0\\C3
182 \mathchardef\otimes="2\\C4
183 \mathchardef\oplus="2\\C5
184 \mathchardef\emptyset="0\\C6
185 \mathchardef\cap="2\\C7
186 \mathchardef\cup="2\\C8
187 \mathchardef\supset="3\\C9
188 \mathchardef\supseteq="3\\CA
189 \mathchardef\nsubset="3\\CB
190 \mathchardef\subset="3\\CC
191 \mathchardef\subseteq="3\\CD
192 \mathchardef\in="3\\CE
193 \mathchardef\nin="3\\CF
194 \mathchardef\angle="0\\D0
195 \mathchardef\nabla="0\\D1
196 \edef\registered{\noexpand\mathhexbox\\D2}
197 \edef\copyright{\noexpand\mathhexbox\\D3}
198 \edef\trademark{\noexpand\mathhexbox\\D4}
199 \mathchardef\prod="1\\D5
200 \edef\sqrt{\radical"\\D6370 }
201 \mathchardef\cdot="2\\D7

202 \mathchardef\neg="0\\D8 \let\lnot=\neg
203 \mathchardef\wedge="3\\D9 \let\land=\wedge
204 \mathchardef\vee="3\\DA \let\lor=\vee
205 \mathchardef\Leftrightarrow="3\\DB
206 \mathchardef\Leftarrow="3\\DC
207 \mathchardef\Uparrow="3\\DD
208 \mathchardef\Rightarrow="3\\DE
209 \mathchardef\Downarrow="3\\DF
210 \mathchardef\diamond="3\\E0
211 \edef\langle{\delimiter"4\\E130A }
212 \mathchardef\sum="1\\E5
213 \edef\rangle{\delimiter"5\\F130B }

(I haven’t bothered redefining those delimiters based on parts of large delimiters.)

5. ISO 8859–1 input

ISO 8859–1 (Latin-1) is the de facto standard character encoding in a large numebr of countries, and so we shall try to make a reasonable number of Latin-1 characters available.

5.1. Symbols Those characters whose code is the same as the code of the corresponding glyph are left alone (with catcode 12). For example, ^^a3 (pounds sterling) is left alone.

Those that have an equivalent \chardef (or \mathchardef) name are defined with \let (for example, ^^a4 is \let to \currency). Those with an equivalent standard ligature use that ligature. These conventions hopefully insulate these definitions against changes in the encoding.

The characters that represent marks for composite letters* will form ligatures with the following letter—one may write ‘¨ u¸ c’ to get ‘üç’.

I don’t use \declareactivechar on these because they would not work properly in verbatim text with catcode 12. (Extending verbatim text to include Latin-1 will take a few definitions along the same lines as \ttlq etc.).

214 \catcode` ^^a0\active \let^^a0=~
215 \catcode` ^^a1\active \def^^a1{!` }
216 \catcode` ^^a4\active \let^^a4=\currency
217 \catcode` ^^a8\active \let^^a8=\twodotsglyph
218 \catcode` ^^a9\active \let^^a9=\copyright
219 \catcode` ^^aa\active \let^^aa=\orda
220 \catcode` ^^ac\active \let^^ac=\lnot
221 \catcode` ^^ad\active \let^^ad=\-
222 \catcode` ^^ae\active \let^^ae=\registered
223 \catcode` ^^af\active \let^^af=\macronglyph
224 \catcode` ^^b0\active \let^^b0=\degrees
225 \catcode` ^^b1\active \let^^b1=\pm
226 \catcode` ^^b2\active \def^^b2{^2}
227 \catcode` ^^b3\active \def^^b3{^3}
228 \catcode` ^^b4\active \let^^b4=\acuteglyph
229 \catcode` ^^b5\active \let^^b5=\mu
230 \catcode` ^^b7\active \let^^b7=\gbdecimal
231 \catcode` ^^b8\active \let^^b8=\cedillaglyph
232 \catcode` ^^b9\active \def^^b9{^1}
233 \catcode` ^^ba\active \let^^ba=\ordo
234 \catcode` ^^bc\active \def^^bc{\frac14}
235 \catcode` ^^bd\active \def^^bd{\frac12}
236 \catcode` ^^be\active \def^^be{\frac34}
237 \catcode` ^^bf\active \def^^bf{?` }
238 \catcode` ^^d7\active \let^^d7=\times
239 \catcode` ^^f7\active \let^^f7=\div

* This phrase is used on the grounds that the word accent tends to provoke lectures on ways in which many composite letters do not represent accents in the languages in which they are used.

5.2. Composite letters

The composite letters acer accessed via ligatures so that they are immune to some possible changes in encoding.

240 \catcode` ^^c0\active \def^^c0{\graveglyph A}
241 \catcode` ^^c1\active \def^^c1{\acuteglyph A}
242 \catcode` ^^c2\active \def^^c2{\circumglyph A}
243 \catcode` ^^c3\active \def^^c3{\tildeglyph A}
244 \catcode` ^^c4\active \def^^c4{\twodotsglyph A}
245 \catcode` ^^c5\active \def^^c5{\ringglyph A}
246 \catcode` ^^c6\active \let^^c6=\AE
247 \catcode` ^^c7\active \def^^c7{\cedillaglyph C}
248 \catcode` ^^c8\active \def^^c8{\graveglyph E}
249 \catcode` ^^c9\active \def^^c9{\acuteglyph E}
250 \catcode` ^^ca\active \def^^ca{\circumglyph E}
251 \catcode` ^^cb\active \def^^cb{\twodotsglyph E}
252 \catcode` ^^cc\active \def^^cc{\graveglyph I}
253 \catcode` ^^cd\active \def^^cd{\acuteglyph I}
254 \catcode` ^^ce\active \def^^ce{\circumglyph I}
255 \catcode` ^^cf\active \def^^cf{\twodotsglyph I}
256 \catcode` ^^d1\active \def^^d1{\tildeglyph N}
257 \catcode` ^^d2\active \def^^d2{\graveglyph O}
258 \catcode` ^^d3\active \def^^d3{\acuteglyph O}
259 \catcode` ^^d4\active \def^^d4{\circumglyph O}
260 \catcode` ^^d5\active \def^^d5{\tildeglyph O}
261 \catcode` ^^d6\active \def^^d6{\twodotsglyph O}
262 \catcode` ^^d8\active \let^^d8=\O
263 \catcode` ^^d9\active \def^^d9{\graveglyph U}
264 \catcode` ^^da\active \def^^da{\acuteglyph U}
265 \catcode` ^^db\active \def^^db{\circumglyph U}
266 \catcode` ^^dc\active \def^^dc{\twodotsglyph U}
267 \catcode` ^^dd\active \def^^dd{\acuteglyph Y}
268 \catcode` ^^df\active \let^^df=\ss
269 \catcode` ^^e0\active \def^^e0{\acuteglyph a}
270 \catcode` ^^e1\active \def^^e1{\graveglyph a}
271 \catcode` ^^e2\active \def^^e2{\circumglyph a}
272 \catcode` ^^e3\active \def^^e3{\tildeglyph a}
273 \catcode` ^^e4\active \def^^e4{\twodotsglyph a}
274 \catcode` ^^e5\active \def^^e5{\ringglyph a}
275 \catcode` ^^e6\active \let^^e6=\ae
276 \catcode` ^^e7\active \def^^e7{\cedillaglyph c}
277 \catcode` ^^e8\active \def^^e8{\graveglyph e}
278 \catcode` ^^e9\active \def^^e9{\acuteglyph e}
279 \catcode` ^^ea\active \def^^ea{\circumglyph e}
280 \catcode` ^^eb\active \def^^eb{\twodotsglyph e}
281 \catcode` ^^ec\active \def^^ec{\graveglyph i}
282 \catcode` ^^ed\active \def^^ed{\acuteglyph i}
283 \catcode` ^^ee\active \def^^ee{\circumglyph i}
284 \catcode` ^^ef\active \def^^ef{\twodotsglyph i}
285 \catcode` ^^f1\active \def^^f1{\tildeglyph n}
286 \catcode` ^^f2\active \def^^f2{\graveglyph o}
287 \catcode` ^^f3\active \def^^f3{\acuteglyph o}
288 \catcode` ^^f4\active \def^^f4{\circumglyph o}
289 \catcode` ^^f5\active \def^^f5{\tildeglyph o}
290 \catcode` ^^f6\active \def^^f6{\twodotsglyph o}
291 \catcode` ^^f8\active \let^^f8=\o
292 \catcode` ^^f9\active \def^^f9{\graveglyph u}
293 \catcode` ^^fa\active \def^^fa{\acuteglyph u}
294 \catcode` ^^fb\active \def^^fb{\circumglyph u}
295 \catcode` ^^fc\active \def^^fc{\twodotsglyph u}
296 \catcode` ^^fd\active \def^^fd{\acuteglyph y}
297 \catcode` ^^ff\active \def^^ff{\twodotsglyph y}

6. Modifications to other PDCMAC macros

For typewriter text, less drastic revision of the string is necessary.

 298 \def\ttminus{--{}}
 299 \let\ttcircum=\asciicircum
 300 \let\tttilde=\asciitilde

Note that ASCII quote and backquote characters are still got from accents because a ‘neutral’ quotation mark is not adequate for computer listings where both sorts of ‘quote mark’ might be appear, with different meanings.