tmpfont.tex (13249B)
1 % This is mostly copied from defs.tex, with some minor tweaks to work with 2 % r3tex. This is to be replaced with a better font system using what I learned 3 % from writing and using the following. 4 5 6 7 % Font selection system 8 9 % Most of the complexity in this font loading system is to make loading fonts 10 % at a given size easy. I.e., the system automatically picks the right font 11 % to scale, if necessary. A *font set* is a list of the same font at different 12 % design sizes in the form of a macro. E.g., 13 % \def\FSmyfs{myfs=\\17:myfont17;\\14:myfont14;;} 14 % (By convention, font set macros start with "FS".) 15 % Whenever we load a font from a font set, the font with the maximum design 16 % size that is no larger than the desired size is scaled appropriately. 17 % In the above example, "myfs" at 17pt will choose "myfont17 at17pt", while 18 % "myfs" at 16pt will choose "myfont14 at 16pt". As a special case, the 19 % smallest font will be chosen for sizes smaller than it. 20 % \FSnull is a special font set that means "always use \nullfont". 21 % 22 % Fonts in font sets may have a non-default skewchar or hyphenchar by using 23 % \Fskew and \Fhyph. See FScm.tex for examples of how to use these macros. 24 % Fonts in font sets can also be scaled using \Fscale<numerator>/<denominator>. 25 % (Don't make <numerator> too big, or else you'll overflow TeX's max dimen!) 26 % 27 % Math families are reassigned by redefining the 16 corresponding \FfamsetX 28 % macros. Text fonts are changed by letting \rmset, \bfset, etc. be equal to 29 % the desired font set. When adding new font styles (e.g., a bold slanted text 30 % font), it may also be necessary to redefine \Fupdfonts so that the associated 31 % style switch macros are updated appropriately. In any case, see FScm.tex for 32 % examples. 33 34 \let\newfam=\@undefined 35 \def\newfam{\errmessage{Don't use \noexpand\newfam}} 36 37 \newdimen\Fsize \newdimen\Ftsize \newdimen\Fssize \newdimen\Fsssize 38 \newdimen\Fbight \newdimen\FBight \newdimen\Fbigght \newdimen\FBigght 39 \newcount\@Fskewchar \newcount\@Fhyphenchar 40 \newcount\@Fscalenum \newcount\@Fscaleden 41 42 \def\FSnull{(null)=;;} 43 \def\Fskew{\global\@Fskewchar=} 44 \def\Fhyph{\global\@Fhyphenchar=} 45 \def\Fscale#1/{\global\@Fscalenum=#1\relax \global\@Fscaleden=} 46 47 \def\@Fbasename#1=#2;;{#1} 48 \def\@Fentries#1=#2;;{#2;} 49 \def\@Fgobble#1;{} 50 \def\@Fsearch#1:#2;{% 51 \gdef\@Fname{#2}% 52 \ifdim#1pt>\dimenA \else \let\\=\@Fgobble \fi 53 } 54 55 % \@Fload loads a font with size \dimenA from font set #1 according to the 56 % rules described above. 57 \def\@Fload#1{% 58 \@Fskewchar=\defaultskewchar \@Fhyphenchar=\defaulthyphenchar 59 \@Fscalenum=1 \@Fscaleden=1 60 {\let\\=\@Fsearch \ea\@Fentries#1}% 61 \font\Ffont={\@Fname}at\dimexpr\dimenA*\@Fscalenum/\@Fscaleden\relax 62 \skewchar\Ffont=\@Fskewchar \hyphenchar\Ffont=\@Fhyphenchar 63 } 64 65 % \Ffind finds a font with size \dimenA from font set #1. If it doesn't 66 % exist, load it. In either case, the resulting font is \Ffont. 67 \def\Ffind#1{% 68 \ifx#1\FSnull 69 \let\Ffont=\nullfont 70 \else 71 \letcs\Ffont{\ea\@Fbasename#1\the\dimenA}% 72 \ifx\Ffont\relax 73 \@Fload{#1}% 74 \cslet{\ea\@Fbasename#1\the\dimenA}\Ffont 75 \fi 76 \fi 77 } 78 79 % \Fdef is a friendly wrapper of \Ffind. E.g., \Fdef\myfont\FScmr15pt loads 80 % cmr at 15pt into \myfont. 81 \def\Fdef#1#2{\def\@{\Ffind#2\let#1=\Ffont}\afterassignment\@\dimenA=} 82 83 \def\@Fdecompose#1#2#3{\let\@Ftset=#1\let\@Fsset=#2\let\@Fssset=#3} 84 \def\@Fupdfam"#1#2#3{% 85 \ea\@Fdecompose#3% 86 \dimenA=\Ftsize \Ffind\@Ftset\textfont"#1#2=\Ffont 87 \dimenA=\Fssize \Ffind\@Fsset\scriptfont"#1#2=\Ffont 88 \dimenA=\Fsssize \Ffind\@Fssset\scriptscriptfont"#1#2=\Ffont 89 } 90 \def\Fupdfams{% 91 \@Fupdfam"00\Ffamseta \@Fupdfam"01\Ffamsetb 92 \@Fupdfam"02\Ffamsetc \@Fupdfam"03\Ffamsetd 93 \@Fupdfam"04\Ffamsete \@Fupdfam"05\Ffamsetf 94 \@Fupdfam"06\Ffamsetg \@Fupdfam"07\Ffamseth 95 \@Fupdfam"08\Ffamseti \@Fupdfam"09\Ffamsetj 96 \@Fupdfam"0A\FfamsetA \@Fupdfam"0B\FfamsetB 97 \@Fupdfam"0C\FfamsetC \@Fupdfam"0D\FfamsetD 98 \@Fupdfam"0E\FfamsetE \@Fupdfam"0F\FfamsetF 99 \@Fupdfam"10\FfamsetG \@Fupdfam"11\FfamsetH 100 \@Fupdfam"12\FfamsetI \@Fupdfam"13\FfamsetJ 101 \@Fupdfam"14\FfamsetK \@Fupdfam"15\FfamsetL 102 \@Fupdfam"16\FfamsetM \@Fupdfam"17\FfamsetN 103 \@Fupdfam"18\FfamsetO \@Fupdfam"19\FfamsetP 104 } 105 \def\Fupdfonts{\dimenA=\Fsize \Fupduser} 106 \def\@Fupddelim#1#2{% 107 \setbox\boxA=\vbox{\hbox{$\m@th#2$}\kern0pt}% 108 #1=\dimexpr\ht\boxA/2 + \fontdimen22\textfont2\relax 109 } 110 \def\Fupddelims{% 111 \@Fupddelim\Fbight\Fbigchar 112 \@Fupddelim\FBight\FBigchar 113 \@Fupddelim\Fbigght\Fbiggchar 114 \@Fupddelim\FBigght\FBiggchar 115 } 116 \def\Fupdlines{\lineht=.7\normalbaselineskip \linedp=.3\normalbaselineskip} 117 118 % \Fmch and \Fch are for changing font sizes. Note that these only change font 119 % sizes and the \normalbaselineskip. To make the change look good, other 120 % document changes are probably necessary (e.g., the display skips). 121 \def\@Fmch{\Fupdfams \Fupdfonts \Fupddelims \Fupdlines \normalbaselines\rm} 122 \def\Fmch#1/#2/#3/#4/{% 123 \Fsize=#1\relax \Ftsize=#2\relax \Fssize=#3\relax \Fsssize=#4\relax 124 \afterassignment\@Fmch \normalbaselineskip=% 125 } 126 \def\Fch#1/{% 127 \Fsize=#1\relax 128 \afterassignment\@Fmch \normalbaselineskip=% 129 } 130 131 132 133 % Font initialization 134 135 \def\tenpt{% 136 % Looser baselines and tighter display skips 137 \Fmch10pt/10pt/7pt/5pt/12.5pt 138 \abovedisplayskip=8pt plus3pt minus5pt 139 \belowdisplayskip=8pt plus3pt minus5pt 140 \abovedisplayshortskip=0pt plus3pt 141 \belowdisplayshortskip=5pt plus3pt minus2pt 142 } 143 \def\ninept{% 144 \Fmch9pt/9pt/6pt/5pt/11pt 145 \abovedisplayskip=7pt plus3pt minus5pt 146 \belowdisplayskip=7pt plus3pt minus5pt 147 \abovedisplayshortskip=0pt plus3pt 148 \belowdisplayshortskip=4pt plus3pt minus1pt 149 } 150 151 % Palatino 152 \def\FSpalr{palr=\\10:zpl-Regular-tlf-t1;;} 153 \def\FSpali{pali=\\10:zpl-Italic-tlf-t1;;} 154 \def\FSpalb{palb=\\10:zpl-Bold-tlf-t1;;} 155 \def\FSpalbi{palbi=\\10:zpl-BoldItalic-tlf-t1;;} 156 157 % Palatino small caps 158 \def\FSpalrsc{palrsc=\\10:zpl-Regular-tlf-scl-t1;;} 159 \def\FSpalisc{palisc=\\10:zpl-Italic-tlf-scl-t1;;} 160 \def\FSpalbsc{palbsc=\\10:zpl-Bold-tlf-scl-t1;;} 161 \def\FSpalbisc{palbisc=\\10:zpl-BoldItalic-tlf-scl-t1;;} 162 163 % Palatino math 164 \def\FSmpalmi {mpali=\Fskew127\\10:zplmi;;} 165 \def\FSmpalmia{mpalia=\Fskew127\\10:zplmia;;} 166 \def\FSmpalsy {mpalsy=\Fskew120\\10:zplsy;;} 167 \def\FSmpalsym{mpalsym=\\10:zplsym;;} 168 \def\FSmpalsyc{mpalsyc=\\10:zplsyc;;} 169 \def\FSmpalexx{mpalexx=\\10:zplexx;;} 170 \def\FSmpalexa{mpalexa=\\10:zplexa;;} 171 172 % Palatino bold math 173 \def\FSmpalbmi {mpalbi=\Fskew127\\10:zplbmi;;} 174 \def\FSmpalbmia{mpalbia=\Fskew127\\10:zplbmia;;} 175 \def\FSmpalbsy {mpalbsy=\Fskew120\\10:zplbsy;;} 176 \def\FSmpalbsym{mpalbsym=\\10:zplbsym;;} 177 \def\FSmpalbsyc{mpalbsyc=\\10:zplbsyc;;} 178 \def\FSmpalbexx{mpalbexx=\\10:zplbexx;;} 179 \def\FSmpalbexa{mpalbexa=\\10:zplbexa;;} 180 181 \def\FSrrrmpalwidecheck{r3mpalwidecheck=\\10:r3-widecheck;;} 182 183 % Palatino sans 184 \def\FSpalsansl{r3palsansl=\\10:r3-palatino_sans-light-tlf;;} 185 \def\FSpalsansr{r3palsansr=\\10:r3-palatino_sans-regular-tlf;;} 186 \def\FSpalsansm{r3palsansm=\\10:r3-palatino_sans-medium-tlf;;} 187 \def\FSpalsansb{r3palsansb=\\10:r3-palatino_sans-bold-tlf;;} 188 189 % Optima 190 \def\FSoptr{optr=\\10:URWClassico-Regular-lf-t1;;} 191 \def\FSopti{opti=\\10:URWClassico-Italic-lf-t1;;} 192 \def\FSoptb{optb=\\10:URWClassico-Bold-lf-t1;;} 193 \def\FSoptbi{optbi=\\10:URWClassico-BoldItalic-lf-t1;;} 194 195 % Inconsolata (not narrow and without variant 0, l, or quotes) 196 \def\FSincr{incr=\Fscale11/10\\10:t1-zi4r-0;;} 197 \def\FSincb{incb=\Fscale11/10\\10:t1-zi4b-0;;} 198 199 % Euler 200 \def\FSeurm{eurm=\Fskew'177\\10:eurm10;\\9:eurm9;\\8:eurm8;\\7:eurm7;\\6:eurm6;\\5:eurm5;;} 201 \def\FSeurb{eurb=\Fskew'177\\10:eurb10;\\9:eurb9;\\8:eurb8;\\7:eurb7;\\6:eurb6;\\5:eurb5;;} 202 \def\FSeusm{eusm=\Fskew'60\\10:eusm10;\\9:eusm9;\\8:eusm8;\\7:eusm7;\\6:eusm6;\\5:eusm5;;} 203 \def\FSeusb{eusb=\Fskew'60\\10:eusb10;\\9:eusb9;\\8:eusb8;\\7:eusb7;\\6:eusb6;\\5:eusb5;;} 204 \def\FSeufm{eufm=\\10:eufm10;\\9:eufm9;\\8:eufm8;\\7:eufm7;\\6:eufm6;\\5:eufm5;;} 205 \def\FSeufb{eufb=\\10:eufb10;\\9:eufb9;\\8:eufb8;\\7:eufb7;\\6:eufb6;\\5:eufb5;;} 206 \def\FSeuex{euex=\\10:euex10;\\9:euex9;\\8:euex8;\\7:euex7;;} 207 208 % Boondox double struck 209 \def\FSboondsr{boondsr=\\10:BOONDOX-r-ds;;} 210 \def\FSboondsb{boondsb=\\10:BOONDOX-b-ds;;} 211 212 % Pagella double struct 213 \def\FSrrrpalmathds{r3palmathds=\\10:r3-palatino_math-ds;;} 214 215 \def\Ffamseta{\FSpalr\FSpalr\FSpalr} % palatino rm 216 \def\Ffamsetb{\FSeurm\FSeurm\FSeurm} % euler rm 217 \def\Ffamsetc{\FSmpalsy\FSmpalsy\FSmpalsy} % newpx symbols 218 \def\Ffamsetd{\FSmpalexx\FSmpalexx\FSmpalexx} % newpx ext 219 \def\Ffamsete{\FSeuex\FSeuex\FSeuex} % euler ext 220 \def\Ffamsetf{\FSeurb\FSeurb\FSeurb} % euler rb 221 \def\Ffamsetg{\FSeusm\FSeusm\FSeusm} % euler sm 222 \def\Ffamseth{\FSeusb\FSeusb\FSeusb} % euler sb 223 \def\Ffamseti{\FSeufm\FSeufm\FSeufm} % euler fm 224 \def\Ffamsetj{\FSeufb\FSeufb\FSeufb} % euler fb 225 \def\FfamsetA{\FSrrrpalmathds\FSrrrpalmathds\FSrrrpalmathds} % pagella ds 226 \def\FfamsetB{\FSpali\FSnull\FSnull} % palatino it 227 \def\FfamsetC{\FSpalb\FSnull\FSnull} % palatino rm b 228 \def\FfamsetD{\FSpalbi\FSnull\FSnull} % palatino it b 229 \def\FfamsetE{\FSmpalmia\FSmpalmia\FSmpalmia} % newpx 230 \def\FfamsetF{\FSmpalsym\FSmpalsym\FSmpalsym} % newpx 231 \def\FfamsetG{\FSmpalmi\FSmpalmi\FSmpalmi} % newpx 232 \def\FfamsetH{\FSmpalexa\FSmpalexa\FSmpalexa} % newpx 233 \def\FfamsetI{\FSmpalsyc\FSmpalsyc\FSmpalsyc} % newpx 234 \def\FfamsetJ{\FSincr\FSincr\FSincr} % inconsolata r 235 \def\FfamsetK{\FSincb\FSincb\FSincb} % inconsolata b 236 \def\FfamsetL{\FSpalsansl\FSpalsansl\FSpalsansl} % palatino sans l 237 \def\FfamsetM{\FSpalsansr\FSpalsansr\FSpalsansr} % palatino sans r 238 \def\FfamsetN{\FSpalsansm\FSpalsansm\FSpalsansm} % palatino sans m 239 \def\FfamsetO{\FSpalsansb\FSpalsansb\FSpalsansb} % palatino sans b 240 \def\FfamsetP{\FSrrrmpalwidecheck\FSrrrmpalwidecheck\FSrrrmpalwidecheck} 241 242 \mathchardef\Fbigchar="0300 243 \mathchardef\FBigchar="0310 244 \mathchardef\Fbiggchar="0312 245 \mathchardef\FBiggchar="0320 246 247 \def\Fupduser{% 248 \Ffind\FSpalr \let\rmfont=\Ffont 249 \Ffind\FSeufm \let\fmfont=\Ffont 250 \Ffind\FSpali \let\itfont=\Ffont 251 \Ffind\FSpalb \let\bffont=\Ffont 252 \Ffind\FSpalbi \let\bifont=\Ffont 253 \Ffind\FSincr \let\trfont=\Ffont 254 \Ffind\FSincb \let\tbfont=\Ffont 255 \Ffind\FSpalsansl \let\slfont=\Ffont 256 \Ffind\FSpalsansr \let\srfont=\Ffont 257 \Ffind\FSpalsansm \let\smfont=\Ffont 258 \Ffind\FSpalsansb \let\sbfont=\Ffont 259 \Ffind\FSpalrsc \let\scfont=\Ffont 260 } 261 \def\rm{\fam=0 \rmfont} 262 \def\mi{\fam=1 } 263 \def\sy{\fam=2 } 264 \def\bm{\fam=5 } 265 \def\hr{\fam=6 } 266 \def\hb{\fam=7 } 267 \def\fr{\fam=8 } \def\oldstyle{\fam=8 \fmfont} 268 \def\fb{\fam=9 } 269 \def\bb{\fam=10 } 270 \def\it{\fam=11 \itfont} 271 \def\bf{\fam=12 \bffont} 272 \def\bi{\fam=13 \bifont} 273 \def\tr{\fam=19 \trfont} 274 \def\tb{\fam=20 \tbfont} 275 \def\sl{\fam=21 \slfont} 276 \def\sr{\fam=22 \srfont} 277 \def\sm{\fam=23 \smfont} 278 \def\sb{\fam=24 \sbfont} 279 \def\sc{\scfont} 280 281 282 283 % Encoding stuff necessary for euler (see gkpmac.tex) 284 % Actually, we take most non-letter symbols from newpx instead. This keeps 285 % things consistent (since euler is somewhat incomplete) and easy (since 286 % we needn't change many of the conventions from plain). 287 288 % Take numerals from euler rm (default is fam 0) 289 \mathcode`\0="7130 290 \mathcode`\1="7131 291 \mathcode`\2="7132 292 \mathcode`\3="7133 293 \mathcode`\4="7134 294 \mathcode`\5="7135 295 \mathcode`\6="7136 296 \mathcode`\7="7137 297 \mathcode`\8="7138 298 \mathcode`\9="7139 299 300 % Take certain symbols from euler sm/fm (default is cmsy) 301 % \mathcode`\!="0821 302 % \mathcode`\(="4828 \delcode`(="828300 303 % \mathcode`\)="5829 \delcode`)="829301 304 % \mathcode`\+="282B 305 % \mathcode`\-="282D 306 % \mathcode`\:="383A 307 % \mathcode`\;="683B 308 % \mathcode`\=="383D 309 % \mathcode`\?="583F 310 % \mathcode`\[="485B \delcode`[="85B302 311 % \mathcode`\]="585D \delcode`]="85D303 312 % \mathcode`\{="4666 313 % \mathcode`\}="5667 314 315 % Euler doesn't have these 316 \let\varsigma=\sigma 317 \let\varrho=\rho 318 319 % Take uppercase Greek from euler rm (default is fam 0) 320 \mathchardef\Alpha="0141 321 \mathchardef\Beta="0142 322 \mathchardef\Gamma="0100 323 \mathchardef\Delta="0101 324 \mathchardef\Epsilon="0145 325 \mathchardef\Zeta="015A 326 \mathchardef\Eta="0148 327 \mathchardef\Theta="0102 328 \mathchardef\Iota="0149 329 \mathchardef\Kappa="014B 330 \mathchardef\Lambda="0103 331 \mathchardef\Mu="014D 332 \mathchardef\Nu="014E 333 \mathchardef\Xi="0104 334 \mathchardef\Omicron="014F 335 \mathchardef\Pi="0105 336 \mathchardef\Rho="0150 337 \mathchardef\Sigma="0106 338 \mathchardef\Tau="0154 339 \mathchardef\Upsilon="0107 340 \mathchardef\Phi="0108 341 \mathchardef\Chi="0158 342 \mathchardef\Psi="0109 343 \mathchardef\Omega="010A 344 345 % TODO: arrows? 346 \mathchardef\intop="1452 347 \mathchardef\ointop="1448 348 % \mathchardef\coprod="1460 349 % \mathchardef\prod="1451 350 \mathchardef\sum="1450 351 % \mathchardef\braceld="047A \mathchardef\bracerd="047B 352 % \mathchardef\bracelu="047C \mathchardef\braceru="047D 353 % \mathchardef\infty="0431 354 % \def\rbrace{\delimiter"5667409 } 355 % \def\lbrace{\delimiter"4666408 } 356 % \def\vert{\delimiter"066A30C } 357 % \def\backslash{\delimiter"066E30F } 358 359 \mathcode`\,="602C 360 \mathcode`\.="002E 361 \Umathcode`\/="0"10"3D 362 \Umathcode`\<="3"10"3C 363 \Umathcode`\>="3"10"3E 364 \Umathchardef\star="2"10"3F 365 \Umathchardef\ldotp="6"10"3A 366 367 \tenpt\rm 368 369 \endinput