TrueType Fonts in Debian mini-HOWTO
 Bear Giles, [email protected] <mailto:bgiles@coy
 otesong.com>
 v0.3, 10 January 2000

 This document describes how to configure a Debian system to use True
 Type fonts for display and printing.  The most recent version of this
 document can be obtained in HTML format at http://www.dimen
 sional.com/~bgiles/debian-tt.html <http://www.dimen
 sional.com/~bgiles/debian-tt.html>
 ______________________________________________________________________

 Table of Contents


 1. Introduction

    1.1 Disclaimer
    1.2 Credits
    1.3 Additional links
    1.4 Change log
    1.5 Feedback
    1.6 Related projects
    1.7 Distribution

 2. Display (what they never told you)

    2.1 A look ahead to XFree86 4.0
    2.2 Review: Preparation before changing

 3. Display (

    3.1 Setting up the
    3.2 Setting up the
    3.3 Using TrueType fonts
    3.4 Installing additional TrueType fonts
    3.5 Internationalization
    3.6 Security Issues

 4. Printing (

    4.1 Configuring
    4.2 Printing TrueType font specimens

 5. Content Generation

    5.1 Generating
    5.2 Generating
    5.3 Image manipulation:
    5.4 ASCII to PostScript conversion:
    5.5 Text Formatting and Typesetting:
    5.6 Text Formatting and Typesetting:

 6. Unanswered questions

 7. Obtaining TrueType Fonts

    7.1 A comment about using Microsoft's free TrueType fonts

 8. Legalities



 ______________________________________________________________________


 1.  Introduction

 A Linux installation typically contains several independent sets of
 fonts or font metrics.  A quick glance at my system shows fonts or
 font metrics spread across the following directories:


   XFree86 stores its fonts in /usr/X11R6/lib/X11/fonts/

   Ghostscript stores its fonts in /usr/lib/ghostscript/fonts/

   TeX stores its fonts in /usr/lib/texmf/fonts/

   The Debian kbd package stores its fonts in /usr/share/consolefonts/

   Groff stores its metrics in /usr/share/font/devps/

   Enscript (ASCII to PostScript converter) stores its metrics in
    /usr/share/enscript/*.afm

 Needless to say, these fonts are not coordinated.

 TrueType fonts are designed to eliminate this problem by allowing the
 same font files to be used for both display and printing.  This HOW-TO
 attempts to show how to use TrueType fonts for display, printing, and
 document preparation on Debian GNU/Linux systems.


 1.1.  Disclaimer

 The information in this document is, to the best of my knowledge,
 correct.  However this HOWTO is still in preliminary versions and what
 works for me may not work for you.  Even if it does work for you, I am
 not a professional technical writer and I have been known to gloss
 over critical details.

 So have fun, but play it safe and keep backups.


 1.2.  Credits

 Created by Bear Giles, <[email protected]>
 <mailto:[email protected]>

 Thanks go to:

   Brion Vibber, <[email protected]> <mailto:[email protected]>, who wrote
    the (preliminary) TrueType HOW-TO
    (http://pobox.com/~brion/linux/TrueType-HOWTO.html)
    <http://pobox.com/~brion/linux/TrueType-HOWTO.html>

   Doug Holland, <[email protected]> <mailto:[email protected]>, who
    wrote the XFree86 Font Deuglification HOW-TO
    (http://www.frii.com/~meldroc/Font-Deuglification.html)
    <http://www.frii.com/~meldroc/Font-Deuglification.html>


 1.3.  Additional links

 These links don't directly discuss Debian systems or packages, but
 they may still be interesting to readers of this mini-HOWTO.


   Using TrueType Fonts with RedHat Linux
    (http://www.kegel.com/linux/tt.html)
    <http://www.kegel.com/linux/tt.html>
   X Font Tools (http://www.hex.net/~cbbrowne/xfonts.html)
    <http://www.hex.net/~cbbrowne/xfonts.html>

   Getting fonts to look pretty under GNU/Linux for applications like
    StarOffice (http://king.ccrc.wustl.edu/~zubin/fonts.html)
    <http://king.ccrc.wustl.edu/~zubin/fonts.html>

   How to use True Type  fonts for StarOffice Under Linux
    (http://www.mindspring.net/~john_mcl/adding_fonts.html)
    <http://www.mindspring.net/~john_mcl/adding_fonts.html>


 1.4.  Change log


   0.1. Sept. 16, 1999: First release.

   0.2. Sept. 16, 1999: added "additional links" section.

   0.3. Jan. 10, 2000: reader feedback!  Added clarification of
    several details.


 1.5.  Feedback

 Comments, corrections, additions and critiques are always welcome.
 You can reach me at [email protected]
 <mailto:[email protected]>.


 1.6.  Related projects


   FreeType http://www.freetype.org/ <http://www.freetype.org/>

    The FreeType engine is a free and portable TrueType font rendering
    engine.  The code is a clean-room implementation that is totally
    independent of the Apple and Microsoft implementations.  (A
    question has recently been raised about a possible Apple patent,
    however.)  FreeType is a library, not a font server or a complete
    text rendering library.


 1.7.  Distribution

 This is the first draft and I expect it to change significantly after
 publication, I ask that you refer to the latest version at
 http://www.dimensional.com/~bgiles/debian-tt.html
 <http://www.dimensional.com/~bgiles/debian-tt.html>.  The permanent
 home for this document will eventually be at
 http://www.coyotesong.com/ <http://www.coyotesong.com/>


 2.  Display (what they never told you)

 Before we dive into setting up TrueType fonts under X, we should
 review the difference between points and pixels... and why we care.

 All displayed fonts are measured in points.  One inch is exactly 72
 points.  Why 72?  Partly because of the limitations of mechanical
 typesetting machines and partly because it's evenly divisible by 2, 3,
 4, 6, 8, 9, 12, 18 and 24.  It's also worth noting that the default
 unit in PostScript is one point.

 (Historical note: I lied.  Until the introduction of PostScript an
 inch was exactly 72.27 points, but that point size was set in the era
 of mechanical printers with metal stamps in a handful of standard
 sizes.  With computer displays and laser printers, it's easy to get
 fonts in any size and 72 makes much more sense for the reason
 mentioned above.)

 As a general rule, most text should be between 7 and 12 points.
 Anything smaller than 6 points is literally "the fine print." Line
 printers used 9 or 12 point type (for 8 or 6 lines/inch,
 respectively).

 In contrast, all video drivers must ultimately measure fonts in
 pixels.   To your video driver, your screen is 1024x800 pixels, not 10
 by 8 inches (or 720 by 576 points).

 To map from points (which we use to specify a font size) to pixels
 (which we use to blit the video memory) we must know our screen's
 resolution.  This is usually measured in "dots per inch (dpi),"
 although it's really pixels per inch.  These are the units used in the
 two sets of bitmap fonts included with XFree86: fonts-75 is intended
 for use on low-end displays with a resolution of approximately 75 dpi,
 fonts-100 is intended for use on mid-range displays with a resolution
 of approximately 100 dpi.  There are no bitmap fonts intended for use
 on high-end displays with a resolution of over 120 dpi.

 As a concrete example, a 13" diagonal screen (11.1" usable) displaying
 a 640x480 pixel image has a resolution of 72.0 dpi.  This Is Not A
 Coincidence.  In fact, most web pages (and Microsoft applications) are
 designed around a canonical display with a resolution of exactly 72
 dpi.  XFree86's default configuration assumes a display with a
 resolution of 75 dpi.

 Back in the real world, nobody runs 640x480 video anymore.  Nobody
 uses 13" diagonal screens anymore.  Since video cards have improved
 faster than video monitors it's not uncommon to have a configuration
 like mine:  19" diagonal screen, (17+" usable), 1600x1200 pixels, 117
 dpi resolution.

 If I run a stock X configuration, all of my fonts are approximately
 2/3 of the intended size.  It's not an exaggeration to say that all
 fonts are cut down by a full size: large fonts (12 pts) appear medium
 (9).  Medium fonts (9 pts) appear small (6).

 There are three things we can do to fix this.  First, We should tell
 the X server our actual screen resolution:


      /etc/X11/xdm/Xservers

      ______________________________________________________________________
      #:0 local /usr/X11R6/bin/X -bpp 16
      :0 local /usr/X11R6/bin/X -bpp 16 -dpi 120
      ______________________________________________________________________



 Second, we should ensure that we use the 100 dpi bitmapped fonts in
 preference to the 75 dpi fonts.


      /etc/X11/XF86Config



 ______________________________________________________________________
 Section "Files"
     RgbPath    "/usr/X11R6/lib/X11/rgb"
     FontPath   "/usr/X11R6/lib/X11/fonts/100dpi/"
     FontPath   "/usr/X11R6/lib/X11/fonts/75dpi/"
     FontPath   "/usr/X11R6/lib/X11/fonts/misc/"
     FontPath   "/usr/X11R6/lib/X11/fonts/Type1/"
     FontPath   "/usr/X11R6/lib/X11/fonts/Speedo/"
 EndSection
 ______________________________________________________________________



 Finally, if one of our bitmapped fonts isn't an exact match the X
 server will attempt to "scale" a similar font via pixel replication.
 The results are rarely pleasant to use.  Assuming we have a reasonably
 powerful system, we can tell the server to use scaled fonts by
 default, then bitmaps which are exact matches, and scaled bitmaps as a
 last resort.


      /etc/X11/XF86Config

      ______________________________________________________________________
      Section "Files"
          RgbPath    "/usr/X11R6/lib/X11/rgb"
          FontPath   "/usr/X11R6/lib/X11/fonts/Type1/"
          FontPath   "/usr/X11R6/lib/X11/fonts/Speedo/"
          FontPath   "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled"
          FontPath   "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled"
          FontPath   "/usr/X11R6/lib/X11/fonts/misc/"
          FontPath   "/usr/X11R6/lib/X11/fonts/100dpi/"
          FontPath   "/usr/X11R6/lib/X11/fonts/75dpi/"
      EndSection
      ______________________________________________________________________



 2.1.  A look ahead to XFree86 4.0

 I've just been informed that XFree86 will support DDC communications,
 if the video card and monitor both support it.  This will allow the X
 server to query the monitor for its physical dimensions and the server
 will automatically compute the correct DPI setting.

 You will still need to make the appropriate changes to your font path,
 since the server should not second guess your explicit configuration.


 2.2.  Review: Preparation before changing X  configuration files.

 Any time we make changes to the X11 configuration files, it's an
 excellent idea to disable XDM by putting exit 0 somewhere near the top
 of the file.  If you don't do this and X is unable to start for some
 reason, XDM will put your system into a nasty busy loop that is an
 unspeakable pain to correct.  You Have Been Warned.


 3.  Display ( X  and the font servers)

 Strictly speaking, it is not absolutely necessary to set up font
 servers to use TrueType fonts with X servers.  If you wish to use
 static files instead of a font server, please see the instructions for
 setting up TrueType fonts for ghostscript.


 3.1.  Setting up the xfs  Font Server

 At this point I assume you have a working /etc/X11/XF86Config file
 that loads explicitly specifies each directory in the FontPath.  We
 will convert it to use the xfs Font Server.


   Install XFS

    If you have not already done so, install
    main/binary-*/x11/xfs_*.deb.


   Configure XFS

    Edit /etc/X11/xfs/config and change the catalogue to contain the
    contents of your FontList.  You may also wish to change the
    default-resolutions value.


      /etc/X11/xfs/config

      ______________________________________________________________________
      # paths to search for fonts
      catalogue =
          /usr/X11R6/lib/X11/fonts/100dpi/:unscaled,
          /usr/X11R6/lib/X11/fonts/75dpi/:unscaled,
          /usr/X11R6/lib/X11/fonts/misc/,
          /usr/X11R6/lib/X11/fonts/Speedo/,
          /usr/X11R6/lib/X11/fonts/Type1/,
          /usr/X11R6/lib/X11/fonts/100dpi/,
          /usr/X11R6/lib/X11/fonts/75dpi/
      # x1,y1,x2,y2,...
      default-resolutions = 100,100,75,75
      ______________________________________________________________________



   Restart XFS

    Restart XFS in the usual Debian manner:


      root shell

      ______________________________________________________________________
      # /etc/init.d/xfs restart
      ______________________________________________________________________



   Verify that XFS is working

    Before we change our XF86Config file, we should verify that the xfs
    server is working by listing them through the font server:


      user shell

 ______________________________________________________________________
 $ fslsfonts -server unix/:7100
 -adobe-courier-bold-i-normal--0-0-0-0-m-0-iso8859-1
 -adobe-courier-bold-o-normal--0-0-100-100-m-0-iso8859-1
 -adobe-courier-bold-o-normal--0-0-75-75-m-0-iso8859-1
 ....
 ______________________________________________________________________



   Change /etc/X11/XF86Config to use xfs

    We're now ready to tell the X server to use the xfs font server.
    We keep one static font path as a fallback position in case of a
    problem with xfs.  (We keep "misc" since it contains fixed, the
    default font.)


      /etc/X11/XF86Config

      ______________________________________________________________________
      Section "Files"
          FontPath   "unix/:7100"
          FontPath   "/usr/X11R6/lib/X11/fonts/misc/"
      EndSection
      ______________________________________________________________________



   Restart X

    Restart X with startx, unless you like living life dangerously.  If
    that's the case, name me the beneficiary of your unusually large
    life insurance policy and restart xdm.


   Verify that the XFS fonts are visible

    Once we have an X session established, we can verify that our
    server sees all of the xfs fonts by listing them through the X
    server.


      user shell

      ______________________________________________________________________
      $ xlsfonts
      -adobe-courier-bold-i-normal--0-0-0-0-m-0-iso8859-1
      -adobe-courier-bold-o-normal--0-0-100-100-m-0-iso8859-1
      -adobe-courier-bold-o-normal--0-0-75-75-m-0-iso8859-1
      ....
      ______________________________________________________________________



 3.2.  Setting up the xfstt  Font Server and installing TrueType fonts

 At this point I assume you have a working xfs font server and wish to
 add TrueType support via xfstt.


   Install XFSTT

    If you have not already done so, install
    main/binary-*/x11/xfstt_*.deb.


   Installing the TrueType Fonts

    Copy your TrueType fonts into the /usr/share/fonts/truetype
    directory.  These files usually have a .ttf extension, and they
    should have 0444 permissions.


   Restart the XFSTT Font Server

    Restart the xfstt server with the force-reload flag


      root shell

      ______________________________________________________________________
      # /etc/init.d/xfstt force-reload
      ______________________________________________________________________



   Verify that XFSTT is working

    Before we change our XF86Config file, we should verify that the
    xfstt server is working.

    Important: the Debian xfstt server listens to port 7101, not 7100.
    Also, the default permissions will require you to run this query as
    root.


      user and root shells

      ______________________________________________________________________
      $ fslsfonts -server unix/:7101
      _FSTransSocketUNIXConnect: Can't connect: errno = 111
      fslsfonts:  unable to open server "unix/:7101"

      # fslsfonts -server unix/:7101
      -ttf-arial black-medium-r-normal-regular-0-0-0-0-p-0-iso8859-1
      -ttf-arial mt black-medium-r-normal-regular-0-0-0-0-p-0-iso8859-1
      -ttf-arial narrow-bold-i-normal-bold italic-0-0-0-0-p-0-iso8859-1
      ______________________________________________________________________



   Change /etc/X11/XF86Config to use xfstt

    We're now ready to tell the X server to use the xfstt font server.
    We want it to use TrueType fonts in preference to all others.

      /etc/X11/XF86Config

      ______________________________________________________________________
      Section "Files"
          FontPath   "unix/:7101"
          FontPath   "unix/:7100"
          FontPath   "/usr/X11R6/lib/X11/fonts/misc/"
      EndSection
      ______________________________________________________________________



   Verify that XFSTT fonts are visible

    Once we have an X session established, we can verify that our
    server sees all of the TrueType fonts by listing them.



      ______________________________________________________________________
      $ xlsfonts | grep ttf
      -ttf-arial black-medium-r-normal-regular-0-0-0-0-p-0-iso8859-1
      -ttf-arial mt black-medium-r-normal-regular-0-0-0-0-p-0-iso8859-1
      -ttf-arial narrow-bold-i-normal-bold italic-0-0-0-0-p-0-iso8859-1
      ....
      ______________________________________________________________________



 3.3.  Using TrueType fonts

 At this point it should be possible to use a TrueType font in
 applications like GIMP, Netscape or StarOffice.  Since most TrueType
 fonts aren't monospaced you probably don't want to use one of them
 with xterm - these programs use monospacing the size of the largest
 character cell.


 3.4.  Installing additional TrueType fonts

 If you are using the xfstt font server, it's trivial to install
 additional TrueType fonts.


   Copy the new font(s) into /usr/share/fonts/truetype/

   Restart xfs with /etc/init.d/xfs restart


 3.5.  Internationalization

 xfstt has the ability to generate multiple font encodings, provided
 that the TrueType font contains the necessary glyphs.  To enable fonts
 other than iso8859-1/unicode-1, you must manually edit the
 /etc/init.d/xfstt script:


      /etc/init.d/xfstt



 ______________________________________________________________________
 - start-stop-daemon --start --quiet --exec $XFSTT -- \
       --port $portno --daemon
 + start-stop-daemon --start --quiet --exec $XFSTT -- \
       --port $portno --encoding iso8859-1,koi8-r,windows-1252,symbol-0 \
       --daemon
 ______________________________________________________________________



 The recognized encodings in Debian 2.1 are:


   iso8859-1           (Latin 1 - Western Europe)

   iso8859-2     (Latin 2 - Central and Eastern Europe)

   iso8859-3     (Latin 3 - Esperanto and Maltese)

   iso8859-4     (Latin 4 - superceded by Latin 6)

   iso8859-5     (Cyrillic)

   iso8859-6     (Arabic)

   iso8859-7     (Greek)

   iso8859-8     (Hebrew)

   iso8859-9     (Latin 5 - Latin 1 with Turkish, not Icelandic)

   iso8859-10    (Latin 6 - Nordic languages, replaces Latin 4)

   koi8-r        (Cyrillic)

   windows-1250  (Central Europe)

   windows-1251  (Cyrillic)

   windows-1252

   windows-1253  (Greek)

   windows-1254

   windows-1255

   windows-1256

   windows-1257

   symbol-0

   wingding-0

   wingreek-0

   cp-437        (various IBM code pages)

   cp-737

   cp-850

   cp-851

   cp-852

   cp-853

   cp-855

   cp-857

   cp-860

   cp-861

   cp-862

   cp-863

   cp-864

   cp-865

   cp-866

   cp-869

   cp-895

   atari-st

   unicode-2

 The first 128 characters in the iso8859-x encodings is always ASCII.
 The windows- fonts embrace and extend iso8859-1 with additional
 characters such as "smart quotes."  (Since these extensions, such as
 "smart quotes" are undefined in iso8859-1, they are usually rendered
 as question marks.)

 Excellent source for additional information on character set encodings
 are at

   http://ppewww.ph.gla.ac.uk/%7Eflavell/iso8859/iso8859-pointers.html
    <http://ppewww.ph.gla.ac.uk/%7Eflavell/iso8859/iso8859-pointers.html>,

   http://anubis.dkuug.dk/i18n/ <http://anubis.dkuug.dk/i18n/> and

   http://czyborra.com/charsets/iso8859.html
    <http://czyborra.com/charsets/iso8859.html>.



 3.6.  Security Issues

 I used Unix sockets above, but the standard Debian packages also
 configure xfs and xfstt to listen to TCP/IP ports 7100 and 7101,
 respectively.  Access to these ports should be controlled by the
 trusted-clients field in /etc/X11/xfs/config, but this option is not
 implemented in XFree86 3.3.2.3a.

 This means that anyone, anywhere, can connect to your font server.
 Since xfs (and presumably xfsts) "clone" to support more users there's
 a trivial denial-of-service attack against these systems.  It's
 probably safe to use the font servers on dialup lines (since you're
 present to handle problems), but DSL and cable modem users should use
 a firewall.



 4.  Printing ( ghostscript )

 Starting with version 4, ghostscript has supported TrueType fonts as a
 compile-time option.  Two Debian packages provide ghostscript:

   main/binary-*/text/gs_*.deb is DFSG-compliant version 5.10,

   non-free/binary-*/gs-aladdin_*.deb is non-DFSG-compliant version
    5.50.

    Both versions support TrueType fonts.


 4.1.  Configuring Ghostscript  to use TrueType fonts

 If you have a working xfstt server, it is easy to configure
 ghostscript to use TrueType fonts.  We simply execute the following
 command:



      ______________________________________________________________________
      # xfstt --gslist --sync >> /etc/gs.Fontmap
      ______________________________________________________________________



 In practice, I've found it beneficial to make several small changes to
 the font definitions generated by xfstt.  First, if a font name does
 not contain any spaces, I change the name to the usual notation.  If a
 font name does contain spaces, I replace all spaces with dashes and
 the original name is added as an alias to the new name.

 Finally, I prepend TTF- (or MS-) to all font names to minimize
 problems caused by a TrueType font having an identical name to an
 preexisting font.

 Thus



      ______________________________________________________________________
      (Arial)               (/usr/share/fonts/truetype/arial.ttf)   ;
      (Arial Bold Italic)   (/usr/share/fonts/truetype/arialbi.ttf) ;
      ______________________________________________________________________



 becomes



      ______________________________________________________________________
      /MS-Arial             (/usr/share/fonts/truetype/arial.ttf)   ;
      /MS-Arial-Bold-Italic (/usr/share/fonts/truetype/arialbi.ttf) ;
      (Arial Bold Italic)   /MS-Arial-Bold-Italic                   ;
      /Arial                /MS-Arial                               ;
      ______________________________________________________________________



 The aliases ensure that ghostscript and xfstt can still specify the
 same font by a common name.
 Much more significantly, with the change in the font names it's
 possible to instruct ghostscript to use TrueType fonts instead of the
 standard fonts.  The documentation claims that this is also possible
 with parenthetical notation, but I could not get it to work.

 For instance, we can instruct ghostscript to replace Helvetica fonts
 with Microsoft's free Arial fonts by appending the following lines to
 the /etc/gs.Fontmap file:



      ______________________________________________________________________
      /Helvetica               /MS-Arial              ;
      /Helvetica-Oblique       /MS-Arial-Italic       ;
      /Helvetica-Bold          /MS-Arial-Bold         ;
      /Helvetica-BoldOblique   /MS-Arial-Bold-Italic  ;
      ______________________________________________________________________



 Similar aliases can be defined for the other standard fonts.  These
 aliases would be most useful on samba printers serving Windows
 clients.


 4.2.  Printing TrueType font specimens

 The best way to verify that ghostscript is properly configured to use
 TrueType fonts is to print font specimen pages.  Assuming that you're
 running ghostscript 5.50 and that it is your default print queue, you
 can print all TrueType fonts with the following command:



      ______________________________________________________________________
      # xfstt --gslist --sync | printfont
      ______________________________________________________________________



 where printfont is the following shell script



      ______________________________________________________________________
      #!/bin/sh

      set -e
      IFS= ')'

      while read fontname rest
      do
          cat << EOM | lpr
      %!PS
      (/usr/lib/ghostscript/5.50/prfont.ps) run
      $fontname) DoFont
      EOM
      done
      ______________________________________________________________________



 If you wish to print only a few fonts, the following script will be
 easier to use:



      ______________________________________________________________________
      #!/bin/sh

      set -e
      while read -p "Font name, or ^D to exit: " fontname
      do
          cat << EOM | lpr
      %!PS
      (/usr/lib/ghostscript/5.50/prfont.ps) run
      $fontname DoFont
      EOM
      done
      ______________________________________________________________________



 5.  Content Generation

 5.1.  Generating AFM  font metrics

 AFM font metrics files are not required for display existing files
 with TrueType fonts, but they are necessary to create new files.  The
 ghostscript program /usr/lib/ghostscript/5.50/printafm.ps could be
 used to generate these metric files, but I have found the ttf2afm
 program from the tetex-bin package to be easier to use.

 The following script will generate an afm file for all TrueType fonts
 in a directory:



      ______________________________________________________________________
      #!/bin/sh

      set -e

      for i in *.TTF
      do
          /usr/bin/ttf2afm $i > ${i%TTF}afm
      done

      for i in *.ttf
      do
          /usr/bin/ttf2afm $i > ${i%ttf}afm
      done
      ______________________________________________________________________



 One minor problem with ttf2afm is that some applications expect afm
 files to start with the StartFontMetrics tag, but files created by
 ttf2afm start with a comment.  This "problem" is easily fixed by
 hitting each file with a text editor.



 5.2.  Generating font.map  files

 Once we have our afm files, we need to tell the system how to find
 them.  This is often done via the font.map file.

 I have been unable to find documentation on this file format, unlike
 fonts.dir, fonts.scale, and fonts.alias, all created by the mkfontdir
 program.  However the minimum format appears to be quite simple:


   Font name, without whitespace

   AFM filename, without extension

 Aliases appear to be implemented via multiple entries, and the
 filename extension must be in lowercase.


 5.3.  Image manipulation: GIMP

 GIMP is the Gnu image manipulation and paint program.  I did not have
 to make any additional changes to use TrueType fonts in gimp.


 5.4.  ASCII to PostScript conversion: enscript

 Enscript is a program that converts ASCII to PostScript.  Other
 programs which serve a similiar purpose are a2ps and mpage.  Enscript
 allows two-up rotation, watermarks, headers, and keyword-based syntax
 coloring.  It does not reformat text and is commonly used to print
 source listing.

 To use TrueType fonts with enscript, you must do two things:


   Add /usr/share/fonts/truetype to your AFMPath.

   Specify a TrueType font, either explicitly or by aliasing a default
    font.

 For details, see the enscript documentation.

 Once I had made these changes, I had no problem using TrueType fonts.


 5.5.  Text Formatting and Typesetting: groff

 Groff is the Gnu front end of the groff/troff document formatting
 system.  The power of Groff is best seen with man pages.


      user shell

      ______________________________________________________________________
      $ zcat /usr/man/man1/groff.1.gz | groff -man | lpr
      ______________________________________________________________________



 Besides man pages, an incredible amount of Unix documentation uses
 troff formatting with ms (and occasionally me) macros.  The Debian
 xbooks package, for example, has 43 files using troff with ms macros.
 With groff, this material can be attractively printed.


 Groff is a very powerful system, but it's the grandchild (or great-
 grandchild) of a program used to typeset 1960's era printing presses.
 Font support in groff reflects that heritage.  Groff, in contrast to
 its predecessors, uses PostScript as the default output format so our
 earlier work with ghostscript takes care of half of the problem --
 groff does not have to deal with reading TrueType font files.  It does
 need to have accurate font metrics, and this section describes how to
 regenerate the necessary groff files:


      Groff PostScript description files

      ______________________________________________________________________
      /usr/share/groff/font/devps/DESC
          Device description file
      /usr/share/groff/font/devps/text.enc
          Encoding used for text fonts
      /usr/share/groff/font/devps/generate/textmap
          Standard mapping.
      /usr/share/groff/font/devps/generate/Makefile
          Standard makefile
      ______________________________________________________________________



 We must edit the Makefile,


      /usr/share/groff/font/devps/generate/Makefile

      ______________________________________________________________________
      - afmdir=/usr/local/afm
      + afmdir=/usr/share/fonts/truetype
      ______________________________________________________________________



 change the name of the fonts to their TrueType equivalent (e.g., if
 we're using Microsoft's free TrueType fonts we would replace Helvetica
 with Arial), and change TEXTFONTS and the like to only include those
 fonts we are redefining.

 We must also edit /usr/share/groff/font/devps/generate/afmname to use
 the TrueType font names and afm files, and to remove an "-e" flag from
 awk.

 After all of this, we can rebuild the groff tables with


      user shell

      ______________________________________________________________________
      $ cd /usr/share/groff/font/devps
      $ make -f generate/Makefile
      ______________________________________________________________________



 As usual, the best way to verify the changes is to use a visually
 distinctive font.  E.g., if you are using the Microsoft free TrueType
 fonts you can use Mistral for TR.


 (I expect royalties from everyone who reconfigures their system to
 print manual pages in Old English fonts next April First!)


 5.6.  Text Formatting and Typesetting: TeX

 TeX is the other common set of text formatting and typesetting
 programs on most GNU/Linux systems.

 TeX fonts can created with mktexmf, but I have little information on
 the exact process.  More details will be provided shortly.


 6.  Unanswered questions


   Applications

    The biggest unanswered question is why netscape communicator can
    use TrueType fonts, ghostscript can use the same TrueType fonts,
    yet pages printed by netscape look nothing like the screen.

    The short answer is that netscape generates PostScript output with
    standard fonts (Helvetica and Times-Roman) instead of the user-
    specified or HTML-specified fonts.  The long answer is that I have
    absolutely no idea why it forces this behavior, or if there is a
    way to override it.


 7.  Obtaining TrueType Fonts

 If you're looking for TrueType fonts, here are several places where
 you can start looking:


   c:\windows\fonts on the boat anchor in the corner

   Microsoft's Free TrueType Fonts
    http://www.microsoft.com/typography/fontpack/
    <http://www.microsoft.com/typography/fontpack/>

   Acid Fonts http://www.acidcool.com/ <http://www.acidcool.com/>

   The Font Ring http://www.webring.org/cgi-
    bin/webring?ring=fontring&list <http://www.webring.org/cgi-
    bin/webring?ring=fontring&list>


 7.1.  A comment about using Microsoft's free TrueType fonts

 No article on TrueType support under Linux would be complete without a
 comment about Microsoft's free TrueType fonts.  First the legality of
 using Microsoft's free core fonts:


      http://www.microsoft.com/typography/faq/faq8.htm
      <http://www.microsoft.com/typography/faq/faq8.htm>



 ____________________________________________________________
 Q. What can I do with these fonts?
     Anyone can download and install these fonts for
      their own use.
     [Web page] designers can specify the fonts within
      their own Web pages.
    ...
 ____________________________________________________________



 Clearly, it is legal and reasonable for Linux users to download and
 install these fonts, and I would like to thank Microsoft for making
 them available.

 Since another clause restricts their redistribution "in any form that
 adds value to commercial products" I don't expect to see these fonts
 packaged in main anytime soon.  (Could they be packaged in non-free,
 perhaps as an installer package...?)

 Now that that's out of the way, I redirect your attention to the
 second statement.  Microsoft actively encourages web page developers
 to specify their fonts on web pages, and many HTML editors explicitly
 name fonts.

 Many web sites, when viewed by standard Netscape/Linux, can best be
 described as... legible.  Some aren't even that.  Not coincidentally
 the sites which are, um, legible are also usually the sites that
 explicitly state all font information in their web pages.

 After I installed these fonts I noticed that most of these problematic
 sites became significantly more attractive.  Many were still highly
 Windows-centric, but at least I didn't flinch every time I loaded
 their pages.

 My recommendation is to install Microsoft's free TrueType fonts for
 your browser.  You are not required to create web pages that use these
 fonts, nor do you have to configure ghostscript to use them.



 8.  Legalities

 Copyright  1999 by Bear Giles.

 Unless otherwise stated, Linux HOWTO documents are copyrighted by
 their respective authors.  Linux HOWTO documents may be reproduced and
 distributed whole or in part, in any medium physical or electronic, as
 long as this copyright notice is retained in all copies.  Commercial
 redistribution is allowed and encouraged; however, the author would
 like to be notified of any such distributions.

 All translations, derivative works, or aggregate works incorporating
 any Linux HOWTO documents must be covered under this copyright notice.
 That is, you may produce a derivative work from a HOWTO and impose
 additional restrictions on distribution.  Exceptions to these rules
 may be granted under certain conditions; please contact the Linux
 HOWTO cordinator for more information.

 In short, we wish to promote dissemination of this information through
 as many channels as possible.  However, we do wish to retain copyright
 on the HOWTO documents, and would very much like to be notified of any
 plans to redistribute the HOWTOs, this one in particular!  Web page
 authors are free to link to this HOWTO without restriction, though the
 author would appreciate an email informing him of this, just so he can
 boost his ego by knowing who else reads and links to this document.

 Many of the terms mentioned in this document are trade names.  Unless
 otherwise stated, all trademarks are property of their respectve
 owners.