|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T t
Length: 3486 (0xd9e) Types: TextFile Names: »texps.lpro«
└─⟦52210d11f⟧ Bits:30007239 EUUGD2: TeX 3 1992-12 └─⟦8d3183c2b⟧ »utils/dvips541.tar.Z« └─⟦008d6ff64⟧ └─⟦this⟧ »./dvips/texps.lpro«
% PostScript prolog for using resident fonts. % No change is made to the encoding scheme, since `virtual fonts' do that % better. All we do is change the widths so that PostScript positioning % matches the assumptions of dvips. % The calling sequence defining font foo to be resident font Bar is % /foo [wd0 wd1 ... wd255] /Bar mag atsize rf % where each character width wdi is in pixels, % mag is the magnification per thousand, % and atsize is the desired font size in TeX scaled points (sp). % TeXDict begin % /rf { 655360 div mul Resolution mul 7227 div /PixPerEm X % compute pixels/em % We copy everything but the FID entry of the resident font % (just as in section 5.7 of the Red Book) findfont dup length 1 add dict /nn X {1 index /FID ne {nn 3 1 roll put} {pop pop} ifelse } forall % Now the top entry on the stack is the array of pixel widths. % We convert them to PostScript's milli-em units, and put them % in a Metrics dictionary. 256 dict begin nn /Encoding get 0 1 255 { 2 copy get 3 index 2 index get 1000 mul PixPerEm div N pop } for pop pop nn /Metrics currentdict put end % Finally we associate the new font with a name like ZZfoo@, % using conventions identical to those of downloaded bitmap fonts. /fontname X % dmystr 2 fontname cvx (@@@@) cvs putinterval % put name in template /nn dup nn definefont [PixPerEm 0 0 PixPerEm neg 0 0] makefont N fontname { /foo setfont } % dummy macro to be filled in 2 array copy cvx N % have to allocate a new one fontname load % now we change it % 0 dmystr 6 string copy % get a copy of the font name 0 nn put % get the actual dictionary % cvn cvx put % and stick it in the dummy macro } B % % Now here's some oblique hackery... an example of making % variants of a resident font look like it is resident. % Say, e.g., /Times-Slanted /Times-Roman .167 SlantFont % to make /Times-Slanted a font with slant of 1/6; % or /Times-Extended /Times-Roman 1.05 ExtendFont % to make a font that's 5% wider. % Optionally replace the `slant' by `angle ObliqueSlant'; % note that the ObliqueSlant of Times-Italic is -15.5 (negative). % /ObliqueSlant { % angle ObliqueSlant slant dup sin S cos div neg } B /SlantFont { % fontname basefontname slant SlantFont pseudoresfontname /foo X [1 0 foo 1 0 0] TransFont } B /ExtendFont { % widtharray fontname basefontname factor ExtendFont % widtharray' pseudoresfontname /foo X 3 2 roll [ S {foo div} forall ] % divide each width entry by the factor 3 1 roll [foo 0 0 1 0 0] TransFont } B % Note: After Times-Slanted is declared once as a SlantFont, you can % use it again without redeclaring its relation to Times-Roman. % But this doesn't work with Times-Extended, because you have to % recompute the widths for each incarnation of Times-Extended. % In fact, strictly speaking, it doesn't work even with Times-Slanted, % because the widths are rounded differently at different sizes. % Therefore dvips repeats the special instructions each time. /TransFont { % fontname basefontname matrix TransFont pseudoresfontname S findfont S makefont dup length dict /nn X {1 index /FID ne {nn 3 1 roll put} {pop pop} ifelse } forall dup nn definefont pop } B % end