r3tex

custom LuaTeX format
git clone git://git.rr3.xyz/r3tex
Log | Files | Refs | README | LICENSE

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