amanda@mermaid.intercon.com (Amanda Walker) (02/03/90)
This is a little messy as PostScript code goes, but I thought it would be useful to someone. I've been tinkering with TeX DVI->PS drivers in my copious spare time :-), and I decided to try re-encoding a PostScript font into the standard TeX encoding vector, so that I wouldn't have to have two separate copies of latex.tex sitting around, differing only in accents and math character definitions. Here's my first effort, which combines characters from Times-Roman and Symbol with some hand-written character descriptions (for dotless j and the ffi & ffl ligatures). The resulting font has an encoding vector identical to cmr10. Writing a TFM file is left as an exercise for the reader... Cut here and at the end (there is some code at the end which you can un-comment to get a font chart) -----------------------------CUT HERE------------------------------ %!PS /DVIEncoding [ % The conventional TeX text encoding vector /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega /ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash /space /exclam /quotedblright /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /exclamdown /equal /questiondown /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /quotedblleft /bracketright /circumflex /dotaccent /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /endash /emdash /hungarumlaut /tilde /dieresis % positions 128-255 are not currently used in standard TeX. /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef ] def /bdf { bind def } bind def 20 dict begin /FontType 3 def /FontMatrix [.001 0 0 .001 0 0] def /FontBBox [0 0 1000 1000] def /FontName /TeX-Times-Roman def /Encoding DVIEncoding def /BaseFonts [ /Times-Roman findfont 1000 scalefont /Symbol findfont 1000 scalefont ] def /String 1 string def /sf { % font character sf (prints character of specfied base font) String exch 0 exch put BaseFonts exch get setfont String stringwidth 0 0 moveto String false charpath flattenpath pathbbox 6 copy setcachedevice 0 0 moveto String show } bdf /CharProcs 256 dict def CharProcs begin /.notdef { } def /Gamma { 1 8#107 sf } bdf /Delta { 1 8#104 sf } bdf /Theta { 1 8#121 sf } bdf /Lambda { 1 8#114 sf } bdf /Xi { 1 8#130 sf } bdf /Pi { 1 8#120 sf } bdf /Sigma { 1 8#123 sf } bdf /Upsilon { 1 8#241 sf } bdf /Phi { 1 8#106 sf } bdf /Psi { 1 8#131 sf } bdf /Omega { 1 8#127 sf } bdf /ff { (ff) stringwidth exch 50 sub exch 0 0 moveto (ff) false charpath flattenpath pathbbox exch 50 sub exch 6 copy setcachedevice 0 0 moveto (f) show -50 0 rmoveto (f) show } def /fi { 0 8#256 sf } bdf /fl { 0 8#257 sf } bdf /ffi { (f\256) stringwidth exch 50 sub exch 0 0 moveto (f\256) false charpath flattenpath pathbbox exch 50 sub exch 6 copy setcachedevice 0 0 moveto (f) show -50 0 rmoveto (\256) show } def /ffl { (f\257) stringwidth exch 50 sub exch 0 0 moveto (f\257) false charpath flattenpath pathbbox exch 50 sub exch 6 copy setcachedevice 0 0 moveto (f) show -50 0 rmoveto (\257) show } def /dotlessi { 0 8#365 sf } bdf /dotlessj { (j) stringwidth 0 0 moveto (j) false charpath flattenpath pathbbox 6 copy setcachedevice newpath 0 0 moveto (\365) false charpath flattenpath pathbbox newpath -1000 -1000 moveto dup -1000 exch lineto 1000 exch lineto 1000 -1000 lineto closepath clip pop pop pop 0 0 moveto (j) show } def /grave { 0 8#301 sf } bdf /acute { 0 8#302 sf } bdf /caron { 0 8#317 sf } bdf /breve { 0 8#306 sf } bdf /macron { 0 8#305 sf } bdf /ring { 0 8#312 sf } bdf /cedilla { 0 8#313 sf } bdf /germandbls { 0 8#373 sf } bdf /ae { 0 8#361 sf } bdf /oe { 0 8#372 sf } bdf /oslash { 0 8#371 sf } bdf /AE { 0 8#341 sf } bdf /OE { 0 8#352 sf } bdf /Oslash { 0 8#351 sf } bdf /quotedblright { 0 8#272 sf } bdf /exclamdown { 0 8#241 sf } bdf /questiondown { 0 8#277 sf } bdf /quotedblleft { 0 8#252 sf } bdf /circumflex { 0 8#303 sf } bdf /dotaccent { 0 8#307 sf } bdf /endash { 0 8#261 sf } bdf /emdash { 0 8#320 sf } bdf /hungarumlaut { 0 8#315 sf } bdf /tilde { 0 8#304 sf } bdf /dieresis { 0 8#310 sf } bdf end /BuildChar { exch begin BaseFonts 0 get setfont dup Encoding exch get dup CharProcs exch known { CharProcs exch get exch pop exec } { pop String exch 0 exch put String stringwidth newpath 0 0 moveto String false charpath flattenpath pathbbox setcachedevice 0 0 moveto String show } ifelse end } def currentdict end dup /FontName get exch definefont pop %/Times-Roman findfont 12 scalefont setfont %72 720 moveto (TeX-Times-Roman at 12pt) show %/TeX-Times-Roman findfont 12 scalefont setfont %/s ( ) def %72 700 translate %0 1 7 { % /y exch def % 0 1 15 { % /x exch def % x 24 mul y -24 mul moveto s 0 y 16 mul x add put s show % } for %} for % %showpage --------------------------------CUT HERE--------------------------------- Enjoy, -- Amanda Walker InterCon Systems Corporation "Many of the truths we cling to depend greatly upon our own point of view." --Obi-Wan Kenobi in "Return of the Jedi"