976 lines
		
	
	
	
		
			34 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			976 lines
		
	
	
	
		
			34 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| <!-- $FreeBSD$ -->
 | |
| <!-- The FreeBSD Documentation Project -->
 | |
| <!DOCTYPE ARTICLE PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
 | |
| <!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN">
 | |
| %man;
 | |
| ]>
 | |
| 
 | |
| <!-- Recently, I wanted to figure out how to use some additional fonts that
 | |
|      I had accumulated.  I finally figured out *how to do it* from the various
 | |
|      manual pages and documentation.  Since it might be of use to other users,
 | |
|      and I didn't see any reference to this topic in the FAQ or handbook, I
 | |
|      thought I'd try my hand at a simple cookbook tutorial addressing the
 | |
|      use of fonts.  I have included my unanswered questions at the end of
 | |
|      the document.
 | |
| 
 | |
|      Anyway, here's what I put together.  This is my present understanding of
 | |
|      fonts and how to use them with FreeBSD.  I am sure that there are errors or
 | |
|      misunderstandings, but it contains enough valid information to allow the
 | |
|      use of additional fonts with Ghostscript, X11 and Groff.  This is my first
 | |
|      attempt to write anything along the lines of a tutorial/FAQ, so I am sure
 | |
|      it is pretty raw.  There are probably better ways to do some of this stuff,
 | |
|      and I would welcome being corrected.
 | |
|  -->
 | |
| 
 | |
| <!-- The section "Setting a virtual console to 80x60 line mode" was
 | |
|      updated to reflect changes in FreeBSD system configuration
 | |
|      files by Mark Ovens <mark@ukug.uk.FreeBSD.org> 27/5/00
 | |
|  -->
 | |
| 
 | |
| <article>
 | |
|   <articleinfo>
 | |
|     <title>Fonts and FreeBSD</title>
 | |
| 
 | |
|     <subtitle>A Tutorial</subtitle>
 | |
| 
 | |
|     <authorgroup>
 | |
|       <author>
 | |
| 	<firstname>Dave</firstname>
 | |
| 
 | |
| 	<surname>Bodenstab</surname>
 | |
| 
 | |
| 	<affiliation>
 | |
| 	  <address>
 | |
| 	    <email>imdave@synet.net</email>
 | |
| 	  </address>
 | |
| 	</affiliation>
 | |
|       </author>
 | |
|     </authorgroup>
 | |
| 
 | |
|     <pubdate>Wed Aug  7, 1996</pubdate>
 | |
| 
 | |
|     <abstract>
 | |
|       <para>This document contains a description of the various font
 | |
| 	files that may be used with FreeBSD and the syscons driver,
 | |
| 	X11, Ghostscript and Groff.  Cookbook examples are provided
 | |
| 	for switching the syscons display to 80x60 mode, and for using
 | |
| 	type 1 fonts with the above application programs.</para>
 | |
|     </abstract>
 | |
|   </articleinfo>
 | |
| 
 | |
|   <sect1>
 | |
|     <title>Introduction</title>
 | |
| 
 | |
|     <para>There are many sources of fonts available, and one might ask
 | |
|       how they might be used with FreeBSD.  The answer can be found by
 | |
|       carefully searching the documentation for the component that one
 | |
|       would like to use.  This is very time consuming, so this
 | |
|       tutorial is an attempt to provide a shortcut for others who
 | |
|       might be interested.</para>
 | |
|   </sect1>
 | |
| 
 | |
|   <sect1>
 | |
|     <title>Basic terminology</title>
 | |
| 
 | |
|     <para>There are many different font formats and associated font
 | |
|       file suffixes.  A few that will be addressed here are:</para>
 | |
| 
 | |
|     <variablelist>
 | |
|       <varlistentry>
 | |
| 	<term><filename>.pfa</filename>, <filename>.pfb</filename></term>
 | |
| 
 | |
| 	<listitem>
 | |
| 	  <para>Postscript type 1 fonts.  The
 | |
| 	    <filename>.pfa</filename> is the
 | |
| 	    <emphasis>A</emphasis>scii form and
 | |
| 	    <filename>.pfb</filename> the <emphasis>B</emphasis>inary
 | |
| 	    form.</para>
 | |
| 	</listitem>
 | |
|       </varlistentry>
 | |
| 
 | |
|       <varlistentry>
 | |
| 	<term><filename>.afm</filename></term>
 | |
| 
 | |
| 	<listitem>
 | |
| 	  <para>The font metrics associated with a type 1 font.</para>
 | |
| 	</listitem>
 | |
|       </varlistentry>
 | |
| 
 | |
|       <varlistentry>
 | |
| 	<term><filename>.pfm</filename></term>
 | |
| 
 | |
| 	<listitem>
 | |
| 	  <para>The printer font metrics associated with a type 1
 | |
| 	    font.</para>
 | |
| 	</listitem>
 | |
|       </varlistentry>
 | |
| 
 | |
|       <varlistentry>
 | |
| 	<term><filename>.ttf</filename></term>
 | |
| 
 | |
| 	<listitem>
 | |
| 	  <para>A TrueType font</para>
 | |
| 	</listitem>
 | |
|       </varlistentry>
 | |
| 
 | |
|       <varlistentry>
 | |
| 	<term><filename>.fot</filename></term>
 | |
| 
 | |
| 	<listitem>
 | |
| 	  <para>An indirect reference to a TrueType font (not an
 | |
| 	    actual font)</para>
 | |
| 	</listitem>
 | |
|       </varlistentry>
 | |
| 
 | |
|       <varlistentry>
 | |
| 	<term><filename>.fon</filename>, <filename>.fnt</filename></term>
 | |
| 
 | |
| 	<listitem>
 | |
| 	  <para>Bitmapped screen fonts</para>
 | |
| 	</listitem>
 | |
|       </varlistentry>
 | |
|     </variablelist>
 | |
| 
 | |
|     <para>The <filename>.fot</filename> file is used by Windows as
 | |
|       sort of a symbolic link to the actual TrueType font
 | |
|       (<filename>.ttf</filename>) file.  The <filename>.fon</filename>
 | |
|       font files are also used by Windows.  I know of no way to use
 | |
|       this font format with FreeBSD.</para>
 | |
|   </sect1>
 | |
| 
 | |
|   <sect1>
 | |
|     <title>What font formats can I use?</title>
 | |
| 
 | |
|     <para>Which font file format is useful depends on the application
 | |
|       being used.  FreeBSD by itself uses no fonts.  Application
 | |
|       programs and/or drivers may make use of the font files.  Here is
 | |
|       a small cross reference of application/driver to the font type
 | |
|       suffixes:</para>
 | |
| 
 | |
|     <variablelist>
 | |
|       <varlistentry>
 | |
| 	<term>Driver</term>
 | |
| 
 | |
| 	<listitem>
 | |
| 	  <variablelist>
 | |
| 	    <varlistentry>
 | |
| 	      <term>syscons</term>
 | |
| 
 | |
| 	      <listitem>
 | |
| 		<para><filename>.fnt</filename></para>
 | |
| 	      </listitem>
 | |
| 	    </varlistentry>
 | |
| 	  </variablelist>
 | |
| 	</listitem>
 | |
|       </varlistentry>
 | |
| 
 | |
|       <varlistentry>
 | |
| 	<term>Application</term>
 | |
| 
 | |
| 	<listitem>
 | |
| 	  <variablelist>
 | |
| 	    <varlistentry>
 | |
| 	      <term>Ghostscript</term>
 | |
| 
 | |
| 	      <listitem>
 | |
| 		<para><filename>.pfa</filename>,
 | |
| 		  <filename>.pfb</filename>,
 | |
| 		  <filename>.ttf</filename></para>
 | |
| 	      </listitem>
 | |
| 	    </varlistentry>
 | |
| 
 | |
| 	    <varlistentry>
 | |
| 	      <term>X11</term>
 | |
| 
 | |
| 	      <listitem>
 | |
| 		<para><filename>.pfa</filename>,
 | |
| 		  <filename>.pfb</filename></para>
 | |
| 	      </listitem>
 | |
| 	    </varlistentry>
 | |
| 
 | |
| 	    <varlistentry>
 | |
| 	      <term>Groff</term>
 | |
| 
 | |
| 	      <listitem>
 | |
| 		<para><filename>.pfa</filename>,
 | |
| 		  <filename>.afm</filename></para>
 | |
| 	      </listitem>
 | |
| 	    </varlistentry>
 | |
| 
 | |
| 	    <varlistentry>
 | |
| 	      <term>Povray</term>
 | |
| 
 | |
| 	      <listitem>
 | |
| 		<para><filename>.ttf</filename></para>
 | |
| 	      </listitem>
 | |
| 	    </varlistentry>
 | |
| 	  </variablelist>
 | |
| 	</listitem>
 | |
|       </varlistentry>
 | |
|     </variablelist>
 | |
| 
 | |
|     <para>The <filename>.fnt</filename> suffix is used quite
 | |
|       frequently.  I suspect that whenever someone wanted to create a
 | |
|       specialized font file for their application, more often than not
 | |
|       they chose this suffix.  Therefore, it is likely that files with
 | |
|       this suffix are not all the same format; specifically, the
 | |
|       <filename>.fnt</filename> files used by syscons under FreeBSD
 | |
|       may not be the same format as a <filename>.fnt</filename> file
 | |
|       one encounters in the MSDOS/Windows environment.  I have not
 | |
|       made any attempt at using other <filename>.fnt</filename> files
 | |
|       other than those provided with FreeBSD.</para>
 | |
|   </sect1>
 | |
| 
 | |
|   <sect1>
 | |
|     <title>Setting a virtual console to 80x60 line mode</title>
 | |
| 
 | |
|     <para>First, an 8x8 font must be loaded. To do this,
 | |
|       <filename>/etc/rc.conf</filename> should contain the
 | |
|       line (change the font name to an appropriate one for
 | |
|       your locale):</para>
 | |
| 
 | |
|     <informalexample>
 | |
|       <programlisting>font8x8="iso-8x8"		# font 8x8 from /usr/share/syscons/fonts/* (or NO).</programlisting>
 | |
|     </informalexample>
 | |
| 
 | |
|     <para>The command to actually switch the mode is
 | |
|       &man.vidcontrol.1;:</para>
 | |
| 
 | |
|     <informalexample>
 | |
|       <screen>&prompt.user; <userinput>vidcontrol VGA_80x60</userinput></screen>
 | |
|     </informalexample>
 | |
| 
 | |
|     <para>Various screen-oriented programs, such as &man.vi.1;, must
 | |
|       be able to determine the current screen dimensions.  As this is
 | |
|       achieved this through <command>ioctl</command> calls to the console
 | |
|       driver (such as &man.syscons.4;) they will correctly determine the new
 | |
|       screen dimensions.</para>
 | |
| 
 | |
|     <para>To make this more seamless, one can embed these commands in
 | |
|       the startup scripts so it takes place when the system boots.
 | |
|       To do this is add this line to <filename>/etc/rc.conf</filename>
 | |
|     </para>
 | |
| 
 | |
| 	<informalexample>
 | |
| 	  <programlisting>allscreens_flags="VGA_80x60"	# Set this vidcontrol mode for all virtual screens
 | |
| 	  </programlisting>
 | |
| 	</informalexample>
 | |
| 
 | |
|     <para>References: &man.rc.conf.5;, &man.vidcontrol.1;.</para>
 | |
|   </sect1>
 | |
| 
 | |
|   <sect1>
 | |
|     <title>Using type 1 fonts with X11</title>
 | |
| 
 | |
|     <para>X11 can use either the <filename>.pfa</filename> or the
 | |
|       <filename>.pfb</filename> format fonts.  The X11 fonts are
 | |
|       located in various subdirectories under
 | |
|       <filename>/usr/X11R6/lib/X11/fonts</filename>.  Each font file
 | |
|       is cross referenced to its X11 name by the contents of the
 | |
|       <filename>fonts.dir</filename> file in each directory.</para>
 | |
| 
 | |
|     <para>There is already a directory named <filename>Type1</filename>.  The
 | |
|       most straight forward way to add a new font is to put it into
 | |
|       this directory.  A better way is to keep all new fonts in a
 | |
|       separate directory and use a symbolic link to the additional
 | |
|       font.  This allows one to more easily keep track of ones fonts
 | |
|       without confusing them with the fonts that were originally
 | |
|       provided.  For example:</para>
 | |
| 
 | |
|     <informalexample>
 | |
|       <screen><lineannotation>Create a directory to contain the font files</lineannotation>
 | |
| &prompt.user; <userinput>mkdir -p /usr/local/share/fonts/type1</userinput>
 | |
| &prompt.user; <userinput>cd /usr/local/share/fonts/type1</userinput>
 | |
| 
 | |
| <lineannotation>Place the .pfa, .pfb and .afm files here</lineannotation>
 | |
| <lineannotation>One might want to keep readme files, and other documentation</lineannotation>
 | |
| <lineannotation>for the fonts here also</lineannotation>
 | |
| &prompt.user; <userinput>cp /cdrom/fonts/atm/showboat/showboat.pfb .</userinput>
 | |
| &prompt.user; <userinput>cp /cdrom/fonts/atm/showboat/showboat.afm .</userinput>
 | |
| 
 | |
| <lineannotation>Maintain an index to cross reference the fonts</lineannotation>
 | |
| &prompt.user; <userinput>echo showboat - InfoMagic CICA, Dec 1994, /fonts/atm/showboat >>INDEX</userinput></screen>
 | |
|     </informalexample>
 | |
| 
 | |
|     <para>Now, to use a new font with X11, one must make the font file
 | |
|       available and update the font name files.  The X11 font names
 | |
|       look like:</para>
 | |
| 
 | |
|     <informalexample>
 | |
|       <screen>-bitstream-charter-medium-r-normal-xxx-0-0-0-0-p-0-iso8859-1
 | |
|      |        |      |    |   |     |  | | | | | |    \    \
 | |
|      |        |      |    |   |     \  \ \ \ \ \ \     +----+- character set
 | |
|      |        |      |    |   \      \  \ \ \ \ \ +- average width
 | |
|      |        |      |    |    \      \  \ \ \ \ +- spacing
 | |
|      |        |      |    \	\      \  \ \ \ +- vertical res.
 | |
|      |        |      |     \	 \	\  \ \ +- horizontal res.
 | |
|      |        |      |      \	  \	 \  \ +- points
 | |
|      |        |      |       \     \	  \  +- pixels
 | |
|      |        |      |        \     \	   \
 | |
|   foundry  family  weight   slant  width  additional style</screen>
 | |
|     </informalexample>
 | |
| 
 | |
|     <para>A new name needs to be created for each new font.  If you
 | |
|       have some information from the documentation that accompanied
 | |
|       the font, then it could serve as the basis for creating the
 | |
|       name.  If there is no information, then you can get some idea by
 | |
|       using &man.strings.1; on the font file.  For example:</para>
 | |
| 
 | |
|     <informalexample>
 | |
|       <screen>&prompt.user; <userinput>strings showboat.pfb | more</userinput>
 | |
| %!FontType1-1.0: Showboat 001.001
 | |
| %%CreationDate: 1/15/91 5:16:03 PM
 | |
| %%VMusage: 1024 45747
 | |
| % Generated by Fontographer 3.1
 | |
| % Showboat
 | |
|  1991 by David Rakowski.  Alle Rechte Vorbehalten.
 | |
| FontDirectory/Showboat known{/Showboat findfont dup/UniqueID known{dup
 | |
| /UniqueID get 4962377 eq exch/FontType get 1 eq and}{pop false}ifelse
 | |
| {save true}{false}ifelse}{false}ifelse
 | |
| 12 dict begin
 | |
| /FontInfo 9 dict dup begin
 | |
|  /version (001.001) readonly def
 | |
|  /FullName (Showboat) readonly def
 | |
|  /FamilyName (Showboat) readonly def
 | |
|  /Weight (Medium) readonly def
 | |
|  /ItalicAngle 0 def
 | |
|  /isFixedPitch false def
 | |
|  /UnderlinePosition -106 def
 | |
|  /UnderlineThickness 16 def
 | |
|  /Notice (Showboat
 | |
|  1991 by David Rakowski.  Alle Rechte Vorbehalten.) readonly def
 | |
| end readonly def
 | |
| /FontName /Showboat def
 | |
| --stdin--</screen>
 | |
|     </informalexample>
 | |
| 
 | |
|     <para>Using this information, a possible name might be:</para>
 | |
| 
 | |
|     <informalexample>
 | |
|       <screen>-type1-Showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-1</screen>
 | |
|     </informalexample>
 | |
| 
 | |
|     <para>The components of our name are:</para>
 | |
| 
 | |
|     <variablelist>
 | |
|       <varlistentry>
 | |
| 	<term>Foundry</term>
 | |
| 
 | |
| 	<listitem>
 | |
| 	  <para>Lets just name all the new fonts
 | |
| 	    <literal>type1</literal>.</para>
 | |
| 	</listitem>
 | |
|       </varlistentry>
 | |
| 
 | |
|       <varlistentry>
 | |
| 	<term>Family</term>
 | |
| 
 | |
| 	<listitem>
 | |
| 	  <para>The name of the font.</para>
 | |
| 	</listitem>
 | |
|       </varlistentry>
 | |
| 
 | |
|       <varlistentry>
 | |
| 	<term>Weight</term>
 | |
| 
 | |
| 	<listitem>
 | |
| 	  <para>Normal, bold, medium, semibold, etc.  From the
 | |
| 	    &man.strings.1;
 | |
| 	    output above, it appears that this font has a weight of
 | |
| 	    <emphasis>medium</emphasis>.</para>
 | |
| 	</listitem>
 | |
|       </varlistentry>
 | |
| 
 | |
|       <varlistentry>
 | |
| 	<term>Slant</term>
 | |
| 
 | |
| 	<listitem>
 | |
| 	  <para><emphasis remap=bf>r</emphasis>oman, <emphasis
 | |
| 	      remap=bf>i</emphasis>talic, <emphasis
 | |
| 	      remap=bf>o</emphasis>blique, etc.  Since the
 | |
| 	    <emphasis>ItalicAngle</emphasis> is zero,
 | |
| 	    <emphasis>roman</emphasis> will be used.</para>
 | |
| 	</listitem>
 | |
|       </varlistentry>
 | |
| 
 | |
|       <varlistentry>
 | |
| 	<term>Width</term>
 | |
| 
 | |
| 	<listitem>
 | |
| 	  <para>Normal, wide, condensed, extended, etc.  Until it can
 | |
| 	    be examined, the assumption will be
 | |
| 	    <emphasis>normal</emphasis>.</para>
 | |
| 	</listitem>
 | |
|       </varlistentry>
 | |
| 
 | |
|       <varlistentry>
 | |
| 	<term>Additional style</term>
 | |
| 
 | |
| 	<listitem>
 | |
| 	  <para>Usually omitted, but this will indicate that the font
 | |
| 	    contains decorative capital letters.</para>
 | |
| 	</listitem>
 | |
|       </varlistentry>
 | |
| 
 | |
|       <varlistentry>
 | |
| 	<term>Spacing</term>
 | |
| 
 | |
| 	<listitem>
 | |
| 	  <para>proportional or monospaced.
 | |
| 	    <emphasis>Proportional</emphasis> is used since
 | |
| 	    <emphasis>isFixedPitch</emphasis> is false.</para>
 | |
| 	</listitem>
 | |
|       </varlistentry>
 | |
|     </variablelist>
 | |
| 
 | |
|     <para>All of these names are arbitrary, but one should strive to
 | |
|       be compatible with the existing conventions.  A font is
 | |
|       referenced by name with possible wild cards by an X11 program,
 | |
|       so the name chosen should make some sense.  One might begin by
 | |
|       simply using
 | |
| 
 | |
|       <informalexample>
 | |
| 	<screen>…-normal-r-normal-…-p-…
 | |
| 	</screen>
 | |
|       </informalexample>
 | |
| 
 | |
|       as the name, and then use
 | |
|       &man.xfontsel.1;
 | |
|       to examine it and adjust the name based on the appearance of the
 | |
|       font.</para>
 | |
| 
 | |
|     <para>So, to complete our example:</para>
 | |
| 
 | |
|     <informalexample>
 | |
|       <screen><lineannotation>Make the font accessible to X11</lineannotation>
 | |
| &prompt.user; <userinput>cd /usr/X11R6/lib/X11/fonts/Type1</userinput>
 | |
| &prompt.user; <userinput>ln -s /usr/local/share/fonts/type1/showboat.pfb .</userinput>
 | |
| 
 | |
| <lineannotation>Edit fonts.dir and fonts.scale, adding the line describing the font
 | |
| and incrementing the number of fonts which is found on the first line.</lineannotation>
 | |
| &prompt.user; <userinput>ex fonts.dir
 | |
| :1p
 | |
| 25
 | |
| :1c
 | |
| 26
 | |
| .
 | |
| :$a
 | |
| showboat.pfb -type1-showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-1
 | |
| .
 | |
| :wq</userinput>
 | |
| 
 | |
| <lineannotation><filename>fonts.scale</filename> seems to be identical to <filename>fonts.dir</filename>…</lineannotation>
 | |
| &prompt.user; <userinput>cp fonts.dir fonts.scale</userinput>
 | |
| 
 | |
| <lineannotation>Tell X11 that things have changed</lineannotation>
 | |
| &prompt.user; <userinput>xset fp rehash</userinput>
 | |
| 
 | |
| <lineannotation>Examine the new font</lineannotation>
 | |
| &prompt.user; <userinput>xfontsel -pattern -type1-*</userinput></screen>
 | |
|     </informalexample>
 | |
| 
 | |
|     <para>References: &man.xfontsel.1;, &man.xset.1;, <citetitle>The X
 | |
| 	Windows System in a Nutshell</citetitle>, <ulink
 | |
| 	URL="http://www.ora.com/">O'Reilly &
 | |
| 	Associates</ulink>.</para>
 | |
|   </sect1>
 | |
| 
 | |
|   <sect1>
 | |
|     <title>Using type 1 fonts with Ghostscript</title>
 | |
| 
 | |
|     <para>Ghostscript references a font via its <filename>Fontmap</filename>
 | |
|       file.  This must be modified in a similar way to the X11
 | |
|       <filename>fonts.dir</filename> file.  Ghostscript can use either
 | |
|       the <filename>.pfa</filename> or the <filename>.pfb</filename>
 | |
|       format fonts.  Using the font from the previous example, here is
 | |
|       how to use it with Ghostscript:</para>
 | |
| 
 | |
|     <informalexample>
 | |
|       <screen><lineannotation>Put the font in Ghostscript's font directory</lineannotation>
 | |
| &prompt.user; <userinput>cd /usr/local/share/ghostscript/fonts</userinput>
 | |
| &prompt.user; <userinput>ln -s /usr/local/share/fonts/type1/showboat.pfb .</userinput>
 | |
| 
 | |
| <lineannotation>Edit Fontmap so Ghostscript knows about the font</lineannotation>
 | |
| &prompt.user; <userinput>cd /usr/local/share/ghostscript/4.01</userinput>
 | |
| &prompt.user; <userinput>ex Fontmap
 | |
| :$a
 | |
| /Showboat        (showboat.pfb) ; % From CICA /fonts/atm/showboat
 | |
| .
 | |
| :wq</userinput>
 | |
| 
 | |
| <lineannotation>Use Ghostscript to examine the font</lineannotation>
 | |
| &prompt.user; <userinput>gs prfont.ps</userinput>
 | |
| Aladdin Ghostscript 4.01 (1996-7-10)
 | |
| Copyright (C) 1996 Aladdin Enterprises, Menlo Park, CA.  All rights
 | |
| reserved.
 | |
| This software comes with NO WARRANTY: see the file PUBLIC for details.
 | |
| Loading Times-Roman font from /usr/local/share/ghostscript/fonts/tir_____.pfb...
 | |
|  /1899520 581354 1300084 13826 0 done.
 | |
| GS><userinput>Showboat DoFont</userinput>
 | |
| Loading Showboat font from /usr/local/share/ghostscript/fonts/showboat.pfb...
 | |
|  1939688 565415 1300084 16901 0 done.
 | |
| >>showpage, press <return> to continue<<
 | |
| >>showpage, press <return> to continue<<
 | |
| >>showpage, press <return> to continue<<
 | |
| GS><userinput>quit</userinput></screen>
 | |
|     </informalexample>
 | |
| 
 | |
|     <para>References: <filename>fonts.txt</filename> in the
 | |
|       Ghostscript 4.01 distribution</para>
 | |
|   </sect1>
 | |
| 
 | |
|   <sect1>
 | |
|     <title>Using type 1 fonts with Groff</title>
 | |
| 
 | |
|     <para>Now that the new font can be used by both X11 and
 | |
|       Ghostscript, how can one use the new font with groff?  First of
 | |
|       all, since we are dealing with type 1 postscript fonts, the
 | |
|       groff device that is applicable is the <emphasis>ps</emphasis>
 | |
|       device.  A font file must be created for each font that groff
 | |
|       can use.  A groff font name is just a file in
 | |
|       <filename>/usr/share/groff_font/devps</filename>.  With our
 | |
|       example, the font file could be
 | |
|       <filename>/usr/share/groff_font/devps/SHOWBOAT</filename>.  The
 | |
|       file must be created using tools provided by groff.</para>
 | |
| 
 | |
|     <para>The first tool is <command>afmtodit</command>.  This is not
 | |
|       normally installed, so it must be retrieved from the source
 | |
|       distribution.  I found I had to change the first line of the
 | |
|       file, so I did:</para>
 | |
| 
 | |
|     <informalexample>
 | |
|       <screen>&prompt.user; <userinput>cp /usr/src/gnu/usr.bin/groff/afmtodit/afmtodit.pl /tmp</userinput>
 | |
| &prompt.user; <userinput>ex /tmp/afmtodit.pl
 | |
| :1c
 | |
| #!/usr/bin/perl -P-
 | |
| .
 | |
| :wq</userinput></screen>
 | |
|     </informalexample>
 | |
| 
 | |
|     <para>This tool will create the groff font file from the metrics
 | |
|       file (<filename>.afm</filename> suffix.) Continuing with our
 | |
|       example:</para>
 | |
| 
 | |
|     <informalexample>
 | |
|       <screen><lineannotation>Many <filename>.afm</filename> files are in Mac format… ^M delimited lines
 | |
| We need to convert them to unix style ^J delimited lines</lineannotation>
 | |
| &prompt.user; <userinput>cd /tmp</userinput>
 | |
| &prompt.user; <userinput>cat /usr/local/share/fonts/type1/showboat.afm |
 | |
| 	tr '\015' '\012' >showboat.afm</userinput>
 | |
| 
 | |
| <lineannotation>Now create the groff font file</lineannotation>
 | |
| &prompt.user; <userinput>cd /usr/share/groff_font/devps</userinput>
 | |
| &prompt.user; <userinput>/tmp/afmtodit.pl -d DESC -e text.enc /tmp/showboat.afm generate/textmap SHOWBOAT</userinput></screen>
 | |
|     </informalexample>
 | |
| 
 | |
|     <para>The font can now be referenced with the name
 | |
|       SHOWBOAT.</para>
 | |
| 
 | |
|     <para>If ghostscript is used to drive the printers on the system,
 | |
|       then nothing more needs to be done.  However, if true postscript
 | |
|       printers are used, then the font must be down loaded to the
 | |
|       printer in order for the font to be used (unless the printer
 | |
|       happens to have the showboat font built in or on an accessible
 | |
|       font disk.) The final step is to create a down loadable font.
 | |
|       The <command>pfbtops</command> tool is used to create the
 | |
|       <filename>.pfa</filename> format of the font, and the
 | |
|       <filename>download</filename> file is modified to reference the new
 | |
|       font.  The <filename>download</filename> file must reference the
 | |
|       internal name of the font.  This can easily be determined from
 | |
|       the groff font file as illustrated:</para>
 | |
| 
 | |
|     <informalexample>
 | |
|       <screen><lineannotation>Create the <filename>.pfa</filename> font file</lineannotation>
 | |
| &prompt.user; <userinput>pfbtops /usr/local/share/fonts/type1/showboat.pfb >showboat.pfa</userinput></screen>
 | |
|     </informalexample>
 | |
| 
 | |
|     <para>Of course, if the <filename>.pfa</filename> file is already
 | |
|       available, just use a symbolic link to reference it.</para>
 | |
| 
 | |
|     <informalexample>
 | |
|       <screen><lineannotation>Get the internal font name</lineannotation>
 | |
| &prompt.user; <userinput>fgrep internalname SHOWBOAT</userinput>
 | |
| internalname Showboat
 | |
| 
 | |
| <lineannotation>Tell groff that the font must be down loaded</lineannotation>
 | |
| &prompt.user; <userinput>ex download
 | |
| :$a
 | |
| Showboat      showboat.pfa
 | |
| .
 | |
| :wq</userinput></screen>
 | |
|     </informalexample>
 | |
| 
 | |
|     <para>To test the font:</para>
 | |
| 
 | |
|     <informalexample>
 | |
|       <screen>&prompt.user; <userinput>cd /tmp</userinput>
 | |
| &prompt.user; <userinput>cat >example.t <<EOF
 | |
| .sp 5
 | |
| .ps 16
 | |
| This is an example of the Showboat font:
 | |
| .br
 | |
| .ps 48
 | |
| .vs (\n(.s+2)p
 | |
| .sp
 | |
| .ft SHOWBOAT
 | |
| ABCDEFGHI
 | |
| .br
 | |
| JKLMNOPQR
 | |
| .br
 | |
| STUVWXYZ
 | |
| .sp
 | |
| .ps 16
 | |
| .vs (\n(.s+2)p
 | |
| .fp 5 SHOWBOAT
 | |
| .ft R
 | |
| To use it for the first letter of a paragraph, it will look like:
 | |
| .sp 50p
 | |
| \s(48\f5H\s0\fRere is the first sentence of a paragraph that uses the
 | |
| showboat font as its first letter.
 | |
| Additional vertical space must be used to allow room for the larger
 | |
| letter.
 | |
| EOF</userinput>
 | |
| &prompt.user; <userinput>groff -Tps example.t >example.ps</userinput>
 | |
| 
 | |
| <lineannotation>To use ghostscript/ghostview</lineannotation>
 | |
| &prompt.user; <userinput>ghostview example.ps</userinput>
 | |
| 
 | |
| <lineannotation>To print it</lineannotation>
 | |
| &prompt.user; <userinput>lpr -Ppostscript example.ps</userinput></screen>
 | |
|     </informalexample>
 | |
| 
 | |
|     <para>References:
 | |
|       <filename>/usr/src/gnu/usr.bin/groff/afmtodit/afmtodit.man</filename>,
 | |
|       &man.groff.font.5;, &man.groff.char.7;, &man.pfbtops.1;.</para>
 | |
|   </sect1>
 | |
| 
 | |
|   <sect1>
 | |
|     <title>Converting TrueType fonts to a groff/postscript format for
 | |
|       groff</title>
 | |
| 
 | |
|     <para>This potentially requires a bit of work, simply because it
 | |
|       depends on some utilities that are not installed as part of the
 | |
|       base system.  They are:</para>
 | |
| 
 | |
|     <variablelist>
 | |
|       <varlistentry>
 | |
| 	<term><command>ttf2pf</command></term>
 | |
| 
 | |
| 	<listitem>
 | |
| 	  <para>TrueType to postscript conversion utilities.  This
 | |
| 	    allows conversion of a TrueType font to an ascii font
 | |
| 	    metric (<filename>.afm</filename>) file.</para>
 | |
| 
 | |
| 	  <para>Currently available at <ulink
 | |
| 	      url="http://sunsite.icm.edu.pl/pub/GUST/contrib/BachoTeX98/ttf2pf/">http://sunsite.icm.edu.pl/pub/GUST/contrib/BachoTeX98/ttf2pf/</ulink>.
 | |
| 	    Note: These files are postscript programs and must be
 | |
| 	    downloaded to disk by holding down the
 | |
| 	    <keycap>Shift</keycap> key when clicking on the link.
 | |
| 	    Otherwise, your browser may try to launch
 | |
| 	    <application>ghostview</application> to view them.</para>
 | |
| 
 | |
| 	  <para>The files of interest are:</para>
 | |
| 
 | |
| 	  <itemizedlist>
 | |
| 	    <listitem>
 | |
| 	      <para><filename>GS_TTF.PS</filename></para>
 | |
| 	    </listitem>
 | |
| 
 | |
| 	    <listitem>
 | |
| 	      <para><filename>PF2AFM.PS</filename></para>
 | |
| 	    </listitem>
 | |
| 
 | |
| 	    <listitem>
 | |
| 	      <para><filename>ttf2pf.ps</filename></para>
 | |
| 	    </listitem>
 | |
| 	  </itemizedlist>
 | |
| 
 | |
| 	  <para>The funny upper/lower case is due to their being
 | |
| 	    intended also for DOS shells.
 | |
| 	    <filename>ttf2pf.ps</filename> makes use of the others as
 | |
| 	    upper case, so any renaming must be consistent with this.
 | |
| 	    (Actually, <filename>GS_TTF.PS</filename> and
 | |
| 	    <filename>PFS2AFM.PS</filename> are supposedly part of the
 | |
| 	    ghostscript distribution, but it is just as easy to use
 | |
| 	    these as an isolated utility.  FreeBSD does not seem to
 | |
| 	    include the latter.) You also may want to have these
 | |
| 	    installed to
 | |
| 	    <filename>/usr/local/share/groff_font/devps</filename>(?).</para>
 | |
| 	</listitem>
 | |
|       </varlistentry>
 | |
| 
 | |
|       <varlistentry>
 | |
| 	<term><command>afmtodit</command></term>
 | |
| 
 | |
| 	<listitem>
 | |
| 	  <para>Creates font files for use with groff from ascii font
 | |
| 	    metrics file.  This usually resides in the directory,
 | |
| 	    <filename>/usr/src/contrib/groff/afmtodit</filename>, and
 | |
| 	    requires some work to get going.</para>
 | |
| 
 | |
| 	  <note>
 | |
| 	    <para> If you are paranoid about working in the
 | |
| 	      <filename>/usr/src</filename> tree, simply copy the
 | |
| 	      contents of the above directory to a work
 | |
| 	      location.</para>
 | |
| 	  </note>
 | |
| 
 | |
| 	  <para>In the work area, you will need to make the utility.
 | |
| 	    Just type:</para>
 | |
| 
 | |
| 	  <screen><prompt>#</prompt> <userinput>make -f Makefile.sub afmtodit</userinput>
 | |
| 	  </screen>
 | |
| 
 | |
| 	  <para>You may also need to copy
 | |
| 	    <filename>/usr/contrib/groff/devps/generate/textmap</filename>
 | |
| 	    to
 | |
| 	    <filename>/usr/share/groff_font/devps/generate</filename>
 | |
| 	    if it does not already exist.</para>
 | |
| 	</listitem>
 | |
|       </varlistentry>
 | |
|     </variablelist>
 | |
| 
 | |
|     <para>Once all these utilities are in place, you are ready to
 | |
|       commence:</para>
 | |
| 
 | |
|     <orderedlist>
 | |
|       <listitem>
 | |
| 	<para>Create the <filename>.afm</filename> file by
 | |
| 	  typing:</para>
 | |
| 
 | |
| 	<screen><prompt>%</prompt> <userinput>gs <optional>-dNODISPLAY</optional> <optional>-q</optional> -- ttf2pf.ps <replaceable>TTF_name</replaceable> <optional><replaceable>PS_font_name</replaceable> <optional><replaceable>AFM_name</replaceable></optional></optional></userinput>
 | |
| 	</screen>
 | |
| 
 | |
| 	<para>Where, <replaceable>TTF_name</replaceable> is your
 | |
| 	  TrueType font file, <replaceable>PS_font_name</replaceable>
 | |
| 	  is the file name for the <filename>.pfa</filename> file,
 | |
| 	  <replaceable>AFM_name</replaceable> is the name you wish for
 | |
| 	  the <filename>.afm</filename> file.  If you do not specify
 | |
| 	  output file names for the <filename>.pfa</filename> or
 | |
| 	  <filename>.afm</filename> files, then default names will be
 | |
| 	  generated from the TrueType font file name.</para>
 | |
| 
 | |
| 	<para>This also produces a <filename>.pfa</filename> file, the
 | |
| 	  ascii postscript font metrics file
 | |
| 	  (<filename>.pfb</filename> is for the binary form).  This
 | |
| 	  will not be needed, but could (I think) be useful for a
 | |
| 	  fontserver.</para>
 | |
| 
 | |
| 	<para>For example, to convert the 30f9 Barcode font using the
 | |
| 	  default file names, use the following command:</para>
 | |
| 
 | |
| 	<screen><prompt>%</prompt> <userinput>gs -dNODISPLAY -- ttf2pf.ps 3of9.ttf</userinput>
 | |
| Aladdin Ghostscript 5.10 (1997-11-23)
 | |
| Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
 | |
| This software comes with NO WARRANTY: see the file PUBLIC for details.
 | |
| Converting 3of9.ttf to 3of9.pfa and 3of9.afm.
 | |
| 	</screen>
 | |
| 
 | |
| 	<para>If you want the converted fonts to be stored in
 | |
| 	  <filename>A.pfa</filename> and <filename>B.afm</filename>,
 | |
| 	  then use this command:</para>
 | |
| 
 | |
| 	<screen><prompt>%</prompt> <userinput>gs -dNODISPLAY -- ttf2pf.ps 3of9.ttf A B</userinput>
 | |
| Aladdin Ghostscript 5.10 (1997-11-23)
 | |
| Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
 | |
| This software comes with NO WARRANTY: see the file PUBLIC for details.
 | |
| Converting 3of9.ttf to A.pfa and B.afm.
 | |
| 	</screen>
 | |
|       </listitem>
 | |
| 
 | |
|       <listitem>
 | |
| 	<para>Create the groff postscript file:</para>
 | |
| 
 | |
| 	<para>Change directories to
 | |
| 	  <filename>/usr/share/groff_font/devps</filename> so as to
 | |
| 	  make the following command easier to execute.  You will
 | |
| 	  probably need root privileges for this.  (Or, if you are
 | |
| 	  paranoid about working there, make sure you reference the
 | |
| 	  files <filename>DESC</filename>,
 | |
| 	  <filename>text.enc</filename> and
 | |
| 	  <filename>generate/textmap</filename> as being in this
 | |
| 	  directory.)</para>
 | |
| 
 | |
| 	<screen><prompt>%</prompt> <userinput>afmtodit -d DESC -e text.enc file.afm \
 | |
| 	    generate/textmap <replaceable>PS_font_name</replaceable></userinput>
 | |
| 	</screen>
 | |
| 
 | |
| 	<para>Where, <filename>file.afm</filename> is the
 | |
| 	  <replaceable>AFM_name</replaceable> created by
 | |
| 	  <command>ttf2pf.ps</command> above, and
 | |
| 	  <replaceable>PS_font_name</replaceable> is the font name
 | |
| 	  used from that command, as well as the name that
 | |
| 	  &man.groff.1; will use for references to this font.  For
 | |
| 	  example, assuming you used the first
 | |
| 	  <command>tiff2pf.ps</command> command above, then the 3of9
 | |
| 	  Barcode font can be created using the command:</para>
 | |
| 
 | |
| 	<screen><prompt>%</prompt> <userinput>afmtodit -d DESC -e text.enc 3of9.afm \
 | |
|                  generate/textmap 3of9</userinput>
 | |
| 	</screen>
 | |
| 
 | |
| 	<para>Ensure that the resulting
 | |
| 	  <replaceable>PS_font_name</replaceable> file (e.g.,
 | |
| 	  <filename>3of9</filename> in the example above) is located
 | |
| 	  in the directory
 | |
| 	  <filename>/usr/share/groff_font/devps</filename> by copying
 | |
| 	  or moving it there.</para>
 | |
| 
 | |
| 	<para>Note that if <filename>ttf2pf.ps</filename> assigns a
 | |
| 	  font name using the one it finds in the TrueType font file
 | |
| 	  and you want to use a different name, you must edit the
 | |
| 	  <filename>.afm</filename> file prior to running
 | |
| 	  <command>afmtodit</command>.  This name must also match the
 | |
| 	  one used in the Fontmap file if you wish to pipe
 | |
| 	  &man.groff.1; into &man.gs.1;.</para>
 | |
|       </listitem>
 | |
|     </orderedlist>
 | |
|   </sect1>
 | |
| 
 | |
|   <sect1>
 | |
|     <title>Can TrueType fonts be used with other programs?</title>
 | |
| 
 | |
|     <para>The TrueType font format is used by Windows, Windows 95, and
 | |
|       Mac's.  It is quite popular and there are a great number of
 | |
|       fonts available in this format.</para>
 | |
| 
 | |
|     <para>Unfortunately, there are few applications that I am aware of
 | |
|       that can use this format: Ghostscript and Povray come to mind.
 | |
|       Ghostscript's support, according to the documentation, is
 | |
|       rudimentary and the results are likely to be inferior to type 1
 | |
|       fonts.  Povray version 3 also has the ability to use TrueType
 | |
|       fonts, but I rather doubt many people will be creating documents
 | |
|       as a series of raytraced pages :-).</para>
 | |
| 
 | |
|     <para>This rather dismal situation may soon change.  The <ulink
 | |
| 	url="http://www.freetype.org/">FreeType Project</ulink> is
 | |
|       currently developing a useful set of FreeType tools:</para>
 | |
| 
 | |
|     <itemizedlist>
 | |
|       <listitem>
 | |
|         <para>The freetype module is included with XFree86 4.x.  For
 | |
|         more information please see the <ulink
 | |
|         url="../../books/handbook/x-fonts.html">FreeBSD
 | |
|         Handbook</ulink> or the <ulink
 | |
|         url="http://www.xfree86.org/4.0.2/fonts.html">XFree86 4.0.2
 | |
|         Fonts</ulink> page.</para>
 | |
|       </listitem>
 | |
| 
 | |
|       <listitem>
 | |
| 	<para>The <command>xfsft</command> font server for X11 can
 | |
| 	  serve TrueType fonts in addition to regular fonts.  Though
 | |
| 	  currently in beta, it is said to be quite usable.  See
 | |
| 	  <ulink
 | |
| 	    url="http://www.dcs.ed.ac.uk/home/jec/programs/xfsft/">Juliusz
 | |
| 	    Chroboczek's page</ulink> for further information.
 | |
| 	  Porting instructions for FreeBSD can be found at <ulink
 | |
| 	    url="http://math.missouri.edu/~stephen/software/">Stephen
 | |
| 	    Montgomery's software page</ulink>.</para>
 | |
|       </listitem>
 | |
| 
 | |
|       <listitem>
 | |
| 	<para><command>xfstt</command> is another font server for X11,
 | |
| 	  available under <ulink url="
 | |
| 	    ftp://sunsite.unc.edu/pub/Linux/X11/fonts/">
 | |
| 	    ftp://sunsite.unc.edu/pub/Linux/X11/fonts/</ulink>.</para>
 | |
|       </listitem>
 | |
| 
 | |
|       <listitem>
 | |
| 	<para>A program called <command>ttf2bdf</command> can produce
 | |
| 	  BDF files suitable for use in an X environment from TrueType
 | |
| 	  files.  Linux binaries are said to be available from <ulink
 | |
| 	    url="ftp://crl.nmsu.edu/CLR/multiling/General/">ftp://crl.nmsu.edu/CLR/multiling/General/</ulink>.</para>
 | |
|       </listitem>
 | |
| 
 | |
|       <listitem>
 | |
| 	<para>For people requiring the use of Asian TrueType fonts,
 | |
| 	  the <command>XTT</command> font server may be worth a look.
 | |
| 	  Information about <command>XTT</command> can be found at
 | |
| 	  URL: <ulink
 | |
| 	    url="http://hawk.ise.chuo-u.ac.jp/student/person/tshiozak/study/freebsd-at-random/x-tt/index-en.html">http://hawk.ise.chuo-u.ac.jp/student/person/tshiozak/study/freebsd-at-random/x-tt/index-en.html</ulink>.</para>
 | |
|       </listitem>
 | |
| 
 | |
|       <listitem>
 | |
| 	<para>and others …</para>
 | |
|       </listitem>
 | |
|     </itemizedlist>
 | |
| 
 | |
|     <para>The <ulink
 | |
| 	url="http://freetype.sourceforge.net/projects.html">FreeType Projects
 | |
| 	page </ulink> is a good starting point for information on
 | |
|       these and other free TrueType projects.</para>
 | |
|   </sect1>
 | |
| 
 | |
|   <sect1>
 | |
|     <title>Where can additional fonts be obtained?</title>
 | |
| 
 | |
|     <para>Many fonts are available on the Internet.  They are either
 | |
|       entirely free, or are share-ware.  In addition, there are many
 | |
|       inexpensive CDROMs available that contain many fonts.  Some
 | |
|       Internet locations (as of August 1996) are:</para>
 | |
| 
 | |
|     <itemizedlist>
 | |
|       <listitem>
 | |
| 	<para><ulink
 | |
| 	    url="ftp://ftp.winsite.com/">ftp://ftp.winsite.com/</ulink>
 | |
| 	  (Formerly CICA)</para>
 | |
|       </listitem>
 | |
| 
 | |
|       <listitem>
 | |
| 	<para><ulink
 | |
| 	    url="http://www.simtel.net/">http://www.simtel.net/</ulink></para>
 | |
|       </listitem>
 | |
| 
 | |
|       <listitem>
 | |
| 	<para><ulink
 | |
| 	    url="ftp://ftp.coast.net/">ftp://ftp.coast.net/</ulink></para>
 | |
|       </listitem>
 | |
| 
 | |
|       <listitem>
 | |
| 	<para><ulink
 | |
| 	    url="http://af-pc-plloyd.ecel.uwa.edu.au/fonts/">http://af-pc-plloyd.ecel.uwa.edu.au/fonts/</ulink></para>
 | |
|       </listitem>
 | |
| 
 | |
|       <listitem>
 | |
| 	<para><ulink
 | |
| 	    url="http://www.esselte.com/letraset/">http://www.esselte.com/letraset/</ulink></para>
 | |
|       </listitem>
 | |
| 
 | |
|       <listitem>
 | |
| 	<para><ulink
 | |
| 	    url="http://www.inil.com/users/elfring/esf.htm">http://www.inil.com/users/elfring/esf.htm</ulink></para>
 | |
|       </listitem>
 | |
|     </itemizedlist>
 | |
|   </sect1>
 | |
| 
 | |
|   <sect1>
 | |
|     <title>Additional questions</title>
 | |
| 
 | |
|     <itemizedlist>
 | |
|       <listitem>
 | |
| 	<para>What use are the <filename>.pfm</filename> files?</para>
 | |
|       </listitem>
 | |
| 
 | |
|       <listitem>
 | |
| 	<para>Can one generate the <filename>.afm</filename> file from
 | |
| 	  a <filename>.pfa</filename> or
 | |
| 	  <filename>.pfb</filename>?</para>
 | |
|       </listitem>
 | |
| 
 | |
|       <listitem>
 | |
| 	<para>How to generate the groff character mapping files for
 | |
| 	  postscript fonts with non-standard character names?</para>
 | |
|       </listitem>
 | |
| 
 | |
|       <listitem>
 | |
| 	<para>Can xditview and devX?? devices be setup to access all
 | |
| 	  the new fonts?</para>
 | |
|       </listitem>
 | |
| 
 | |
|       <listitem>
 | |
| 	<para>It would be good to have examples of using TrueType
 | |
| 	  fonts with povray and ghostscript.</para>
 | |
|       </listitem>
 | |
|     </itemizedlist>
 | |
|   </sect1>
 | |
| </article>
 |