  TrueType Fonts in Debian mini-HOWTO
  Bear Giles, bgiles@coyotesong.com <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, <bgiles@coyotesong.com>
  <mailto:bgiles@coyotesong.com>

  Thanks go to:

    Brion Vibber, <brion@pobox.com> <mailto:brion@pobox.com>, 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, <meldroc@frii.com> <mailto:meldroc@frii.com>, 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 bgiles@coyotesong.com
  <mailto:bgiles@coyotesong.com>.


  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.



