Home | History | Annotate | Line # | Download | only in momdoc
      1  1.1  christos <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
      2  1.1  christos <html>
      3  1.1  christos <head>
      4  1.1  christos <meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
      5  1.1  christos <title>Mom -- Appendices</title>
      6  1.1  christos </head>
      7  1.1  christos <body bgcolor="#dfdfdf">
      8  1.1  christos 
      9  1.1  christos <!====================================================================>
     10  1.1  christos 
     11  1.1  christos <a href="reserved.html#TOP">Next</a>&nbsp;&nbsp;
     12  1.1  christos <a href="macrolist.html#TOP">Prev</a>&nbsp;&nbsp;
     13  1.1  christos <a href="toc.html">Back to Table of Contents</a>
     14  1.1  christos <p>
     15  1.1  christos 
     16  1.1  christos <a name="TOP"></a>
     17  1.1  christos <a name="APPENDICES">
     18  1.1  christos 	<h2 align="center"><u>APPENDICES</u></h2>
     19  1.1  christos </a>
     20  1.1  christos 
     21  1.1  christos <ul>
     22  1.1  christos 	<li><a href="#MOREDOC">Further notes on this documentation</a>
     23  1.1  christos 	<li><a href="#FONTS">Adding PostScript fonts to groff</a>
     24  1.1  christos 	<ul>
     25  1.1  christos 		<li><a href="#HOWTO">How to create a PostScript font for use with groff</a>
     26  1.1  christos 	</ul>
     27  1.1  christos 	<li><a href="#CODENOTES">Some reflections on mom, with an apology</a>
     28  1.1  christos 	<li><a href="#CONTACT">Contact the author</a>
     29  1.1  christos 	<li><a href="reserved.html">List of reserved words</a>
     30  1.1  christos </ul>
     31  1.1  christos 
     32  1.1  christos <a name="MOREDOC">
     33  1.1  christos     <h2><u>Further notes on this documentation</u></h2>
     34  1.1  christos </a>
     35  1.1  christos 
     36  1.1  christos Some <strong>mom</strong> users are sure to ask: &quot;Why is this
     37  1.1  christos documentation in html?  If <strong>mom</strong>'s so great, why not
     38  1.1  christos typeset the whole thing to show her off?  And if groff's so great,
     39  1.1  christos why not write a man page?&quot;
     40  1.1  christos <p>
     41  1.1  christos Valid questions, to be sure, and <strong>mom</strong> has
     42  1.1  christos answers.  (Okay -- I have answers, but I speak for
     43  1.1  christos <strong>mom</strong>.)
     44  1.1  christos <p>
     45  1.1  christos The documentation is in html because I still find it the best tool
     46  1.1  christos for navigating lengthy manuals.  Html, with its anchors and links,
     47  1.1  christos came into being precisely so people could do something they'd never
     48  1.1  christos been able to with the printed word: instantly track down internal
     49  1.1  christos and external references in a document.
     50  1.1  christos <p>
     51  1.1  christos To me, it's essential that people reading <strong>mom</strong>'s
     52  1.1  christos documentation never have difficulty finding precisely the macro
     53  1.1  christos they need for a particular task.  Equally, when reading up on
     54  1.1  christos a macro, they should never be presented with terms or other
     55  1.1  christos macro names for which they cannot instantly find accurate explanations.
     56  1.1  christos Short of having written the documentation in TeX for the info browser
     57  1.1  christos (and TeX bloat is one of the reasons I prefer to typeset with groff),
     58  1.1  christos I can think of no better way to achieve the kind of truly useful
     59  1.1  christos documentation I wanted than html.
     60  1.1  christos <p>
     61  1.1  christos Another reason for html is that working with <strong>mom</strong>
     62  1.1  christos necessarily involves creating files inside a text editor.  I use
     63  1.1  christos elvis, a truly fabulous vi clone that does a terrific job of rendering
     64  1.1  christos basic (text only) html.  I may have written <strong>mom</strong>,
     65  1.1  christos but I still regularly call on her documentation.  Elvis, with its
     66  1.1  christos html capabilities, lets me write and format <strong>mom</strong>
     67  1.1  christos documents AND peruse her documentation, clicking on links as
     68  1.1  christos necessary, without ever leaving the comfy confines of my
     69  1.1  christos text editor.
     70  1.1  christos <p>
     71  1.1  christos Not everyone, of course, uses an editor with html capabilities.
     72  1.1  christos For them, firing up a browser is obviously necessary for reading
     73  1.1  christos <strong>mom</strong>'s documentation.  Browsers being what they are,
     74  1.1  christos and not everyone on the globe having the cash for muscle machines
     75  1.1  christos to run Galeon, or Konqueror or Mozilla, their browser
     76  1.1  christos needs to be fast and light--and probably &quot;text-only&quot;.
     77  1.1  christos <p>
     78  1.1  christos Some <strong>mom</strong> users may notice the absence of graphics,
     79  1.1  christos frames, and (for the most part) tables in this documentation.  The
     80  1.1  christos reason is simple: text-only browsers.  People who, for whatever
     81  1.1  christos reason (choice or necessity), use lynx, or links or w3m to read
     82  1.1  christos the documentation must be able to make sense of it.  All of it.
     83  1.1  christos Graphical examples of <strong>mom</strong> in action might have made
     84  1.1  christos some parts of the documentation easier to write, but would have
     85  1.1  christos excluded text-only browser users.  And it goes without saying that
     86  1.1  christos the documentation looks fine if you're reading it in a graphical
     87  1.1  christos browser.
     88  1.1  christos <br>
     89  1.1  christos <hr>
     90  1.1  christos 
     91  1.1  christos <!=====================================================================>
     92  1.1  christos 
     93  1.1  christos <a name="FONTS">
     94  1.1  christos     <h2><u>Adding PostScript fonts to groff</u></h2>
     95  1.1  christos </a>
     96  1.1  christos 
     97  1.1  christos <a name="SMALL_NOTE"></a>
     98  1.1  christos <em><strong>Small note:</strong> the term &lt;prefix&gt; in this
     99  1.1  christos section refers to the directory in which groff is installed,
    100  1.1  christos typically something like /usr/share/groff/&lt;version#&gt;
    101  1.1  christos (for distro-specific, pre-compiled groff packages) or
    102  1.1  christos /usr/local/share/groff/&lt;version#&gt; (if you've built groff
    103  1.1  christos from source).</em>
    104  1.1  christos <p>
    105  1.1  christos Groff comes with a small library of PostScript
    106  1.1  christos <a href="definitions.html#TERMS_FAMILY">families</a>
    107  1.1  christos (see the
    108  1.1  christos <a href="typesetting.html#FAMILY">FAMILY</a>
    109  1.1  christos macro for a list).  The families have four
    110  1.1  christos <a href="definitions.html#TERMS_FONT">fonts</a>
    111  1.1  christos associated with them.  These fonts are a combination of
    112  1.1  christos <a href="definitions.html#TERMS_WEIGHT">weight</a>
    113  1.1  christos and
    114  1.1  christos <a href="definitions.html#TERMS_SHAPE">shape</a>:
    115  1.1  christos <br>
    116  1.1  christos <ul>
    117  1.1  christos 	<li><strong>R</strong> (Roman, usually Medium weight),
    118  1.1  christos 	<li><strong>I</strong> (Italic, usually Medium weight),
    119  1.1  christos 	<li><strong>B</strong> (Bold, usually Roman shape) and
    120  1.1  christos 	<li><strong>BI</strong> (Bold Italic).
    121  1.1  christos </ul>
    122  1.1  christos <p>
    123  1.1  christos If you do a lot of document processing or typesetting with
    124  1.1  christos <strong>mom</strong>, you'll find, sooner or later, that these
    125  1.1  christos families and their associated fonts aren't sufficient.  You'll want
    126  1.1  christos to supplement them, either with more fonts for the families already
    127  1.1  christos provided--"Damn!  I need Helvetica Bold Condensed Italic!"--or with
    128  1.1  christos entire new families.
    129  1.1  christos <p>
    130  1.1  christos Without going into the gory details (yet), while it's true that
    131  1.1  christos adding fonts to groff is a relatively straightforward
    132  1.1  christos process, extending existing families or adding new ones requires
    133  1.1  christos some planning.
    134  1.1  christos <p>
    135  1.1  christos The traditional approach to extending groff families has been
    136  1.1  christos to create new families for non-default weights and
    137  1.1  christos shapes (e.g.  Light, which is a weight; Condensed, which is a
    138  1.1  christos shape), then to associate them with groff's predefined <strong>R,
    139  1.1  christos I, B</strong> and <strong>BI</strong> font styles.  An example
    140  1.1  christos of this can be seen in the groff PostScript font library itself
    141  1.1  christos (&lt;prefix&gt;/font/devps/): there's one &quot;family&quot; for
    142  1.1  christos Helvetica (HR, HI, HB, HBI) and another for Helvetica Narrow (HNR,
    143  1.1  christos HNI, HNB, HNBI).
    144  1.1  christos <p>
    145  1.1  christos The difficulty with this approach is that typographers
    146  1.1  christos tend to think of &quot;families&quot; as referring to the
    147  1.1  christos entire set of font weights and shapes associated with a
    148  1.1  christos particular family name.  For example, when a typesetter says
    149  1.1  christos &quot;the Helvetica family&quot;, s/he is including the <a
    150  1.1  christos href="definitions.html#TERMS_WEIGHT">weights</a> Helvetica Thin,
    151  1.1  christos Helvetic Light, Helvetica Regular, Helvetica Bold, Helvetica Heavy,
    152  1.1  christos etc, and all their associated
    153  1.1  christos <a href="definitions.html#TERMS_SHAPE">shapes</a>
    154  1.1  christos (Roman,
    155  1.1  christos Italic, Condensed, Narrow, Extended, Outline, etc).
    156  1.1  christos <p>
    157  1.1  christos Thus, intuitively, when a typesetter gives <strong>mom</strong> a
    158  1.1  christos <kbd>.FAM(ILY)</kbd> directive, s/he reasonably expects that any
    159  1.1  christos subsequent <kbd>.FT</kbd> directive will access the desired font
    160  1.1  christos from the Helvetica family--without the need to state explicitly both
    161  1.1  christos family and font to <kbd>.FT</kbd>, as it is explained one can do in
    162  1.1  christos the
    163  1.1  christos <a href="typesetting.html#FAMILY">FAMILY</a>
    164  1.1  christos and
    165  1.1  christos <a href="typesetting.html#FONT">FT</a>
    166  1.1  christos sections of these documents.
    167  1.1  christos <p>
    168  1.1  christos If one had, say, the fonts, Helvetica Light Roman
    169  1.1  christos and Helvetica Light Italic as well as Helvetica Light Condensed
    170  1.1  christos Roman and Helvetica Light Condensed Italic, the traditional
    171  1.1  christos approach would require two &quot;partial&quot; families: HLR/HLI and
    172  1.1  christos HLCDR/HLCDI.  Accessing these family/font combos
    173  1.1  christos routinely throughout a document would then require
    174  1.1  christos changing family (with <kbd>.FAM(ILY)</kbd>) and selecting the
    175  1.1  christos desired font (with <kbd>.FT R</kbd> or <kbd>.FT I</kbd>), or
    176  1.1  christos passing <kbd>.FT</kbd> the lengthy family+fontname (.e.g. <kbd>.FT
    177  1.1  christos HLCDI</kbd>).
    178  1.1  christos <p>
    179  1.1  christos Fortunately, groff provides a mechanism whereby it's possible to
    180  1.1  christos extend the basic <strong>R, I, B</strong> and <strong>BI</strong>
    181  1.1  christos fonts (&quot;styles&quot; in groff-speak) so that one can, in
    182  1.1  christos fact, create extensive type families, and access all the fonts
    183  1.1  christos in them with <kbd>.ft</kbd> (groff) or <kbd>.FT</kbd> (mom).
    184  1.1  christos <p>
    185  1.1  christos <strong>mom</strong> uses this mechanism to offer, in addition to
    186  1.1  christos groff's default PostScript font styles, the following:
    187  1.1  christos <p>
    188  1.1  christos <a name="STYLE_EXTENSIONS"></a>
    189  1.1  christos <pre>
    190  1.1  christos Mom's extensions to groff's basic font styles
    191  1.1  christos =============================================
    192  1.1  christos 
    193  1.1  christos 	L      =  Light Roman
    194  1.1  christos 	LI     =  Light Italic
    195  1.1  christos 	LCD    =  Light Condensed Roman
    196  1.1  christos 	LCDI   =  Light Condensed Italic
    197  1.1  christos 	LEX    =  Light Extended Roman
    198  1.1  christos 	LEXI   =  Light Extended Italic
    199  1.1  christos 	CD     =  Medium/Book Condensed Roman
    200  1.1  christos 	CDI    =  Medium/Book Condensed Italic
    201  1.1  christos 	EX     =  Medium/Book Extended Roman
    202  1.1  christos 	EXI    =  Medium/Book Extended Italic
    203  1.1  christos 	DB     =  DemiBold Roman
    204  1.1  christos 	DBI    =  DemiBold Italic
    205  1.1  christos 	BCD    =  Bold Condensed Roman
    206  1.1  christos 	BCDI   =  Bold Condensed Italic
    207  1.1  christos 	BEX    =  Bold Extended Roman
    208  1.1  christos 	BEXI   =  Bold Extended Italic
    209  1.1  christos 	HV     =  Heavy Roman
    210  1.1  christos 	HVI    =  Heavy Italic
    211  1.1  christos 	HVCD   =  Heavy Condensed Roman
    212  1.1  christos 	HVCDI  =  Heavy Condensed Italic
    213  1.1  christos 	HVEX   =  Heavy Extended Roman
    214  1.1  christos 	HVEXI  =  Heavy Extended Italic
    215  1.1  christos 	BL     =  Black Roman
    216  1.1  christos 	BLI    =  Black Italic
    217  1.1  christos 	BLCD   =  Black Condensed Roman
    218  1.1  christos 	BLCDI  =  Black Condensed Italic
    219  1.1  christos 	BLEX   =  Black Extended Roman
    220  1.1  christos 	BLEXI  =  Black Extended Italic
    221  1.1  christos 	UBL    =  Ultra-Black Roman
    222  1.1  christos 	UBLI   =  Ultra-Black Italic
    223  1.1  christos </pre>
    224  1.1  christos 
    225  1.1  christos Thus, with <strong>mom</strong>, if you've installed, say, some
    226  1.1  christos extra Helvetica fonts and named them according to the convention FS
    227  1.1  christos (where &quot;F&quot; means family and &quot;S&quot; means font
    228  1.1  christos style), once having entered
    229  1.1  christos <p>
    230  1.1  christos <pre>
    231  1.1  christos 	.FAMILY H
    232  1.1  christos 	  or
    233  1.1  christos 	.FAM H
    234  1.1  christos </pre>
    235  1.1  christos 
    236  1.1  christos you can access any of those Helvetica fonts simply by
    237  1.1  christos passing the correct argument from the list above to
    238  1.1  christos <a href="typesetting.html#FONT">FT</a>.
    239  1.1  christos <p>
    240  1.1  christos For example, if you were working in Medium Roman (<kbd>.FT R</kbd>)
    241  1.1  christos and you needed Medium Condensed Italic for a while (assuming it's
    242  1.1  christos installed), you'd just type
    243  1.1  christos <p>
    244  1.1  christos <pre>
    245  1.1  christos 	.FT CDI
    246  1.1  christos </pre>
    247  1.1  christos 
    248  1.1  christos to access the Medium Condensed Italic font from the Helvetica
    249  1.1  christos family.
    250  1.1  christos <p>
    251  1.1  christos <strong>Mom</strong>'s list of font styles doesn't pretend to
    252  1.1  christos be exhaustive, but rather tries to cover the basic weight/shape
    253  1.1  christos combinations likely to be found in any reasonably complete type
    254  1.1  christos family.
    255  1.1  christos <p>
    256  1.1  christos The actual extension names are arbitrary and can be used in a
    257  1.1  christos flexible manner.  For example, if you create a family that has a
    258  1.1  christos DemiBold font (DB) but no Bold font (B), you might find it more
    259  1.1  christos convenient to give the DemiBold font the extension &quot;B&quot;.
    260  1.1  christos Equally, if the family has an ExtraBold font, you might find it more
    261  1.1  christos convenient to use the extension &quot;HV&quot; (Heavy).
    262  1.1  christos <a name="REGISTER_STYLE"></a>
    263  1.1  christos <p>
    264  1.1  christos However, you may, at needs, want to add to <strong>mom</strong>'s
    265  1.1  christos list of font styles.  You can do this by editing the file, om.tmac.
    266  1.1  christos Near the top, you'll see lines of the form
    267  1.1  christos <p>
    268  1.1  christos <pre>
    269  1.1  christos 	.sty \n[.fp] L       \" Light Roman
    270  1.1  christos 	.sty \n[.fp] LI      \" Light Italic
    271  1.1  christos 	.sty \n[.fp] LCD     \" Light Condensed Roman
    272  1.1  christos </pre>
    273  1.1  christos 
    274  1.1  christos Simply add your new font style by imitating what you see and
    275  1.1  christos plugging in your new font style (having, of course, first created the
    276  1.1  christos font, correctly named, in groff's PostScript font directory; see
    277  1.1  christos <a href="#HOWTO">How to create a PostScript font for use with groff</a>).
    278  1.1  christos <p>
    279  1.1  christos For example, if you already have some fonts from the Univers
    280  1.1  christos family installed and have called the family UN, you might decide at
    281  1.1  christos some point to add the Bold Outline font (UNBO).  In which case,
    282  1.1  christos you'd add
    283  1.1  christos <p>
    284  1.1  christos <pre>
    285  1.1  christos 	.sty \n[.fp] BO      \" Bold Outline
    286  1.1  christos </pre>
    287  1.1  christos 
    288  1.1  christos to the <kbd>.sty \n[.fp] &lt;font style&gt;</kbd> list in om.tmac.
    289  1.1  christos <p>
    290  1.1  christos Be careful, though, that any styles you add do not conflict
    291  1.1  christos with <strong><u>family</u></strong> names that already exist.
    292  1.1  christos &quot;C&quot;, for example, conflicts with the Courier family
    293  1.1  christos (CR, CI, CB, CI).  Were you to create a font style &quot;C&quot;,
    294  1.1  christos thinking that <kbd>.FT C</kbd> would give you access to font style
    295  1.1  christos once you'd given a <kbd>.FAM(ILY)</kbd> directive, you'd get a nasty
    296  1.1  christos surprise: your type would come out in Courier Roman!
    297  1.1  christos <p>
    298  1.1  christos <strong>VERY IMPORTANT NOTE: mom</strong>'s font extensions are
    299  1.1  christos not &quot;user-space&quot; controllable via a macro.  If you've
    300  1.1  christos been using groff for a long time, and have already rolled your own
    301  1.1  christos solution to adding PostScript families, fonts, weights, shapes, etc. to
    302  1.1  christos groff, you may find that <strong>mom</strong>'s font extensions
    303  1.1  christos conflict with your own scheme.  Should that be the case, comment out
    304  1.1  christos the <kbd>.sty \n[.fp] &lt;font style&gt;</kbd> lines found near the
    305  1.1  christos top of the om.tmac file.
    306  1.1  christos 
    307  1.1  christos <a name="HOWTO"><h3><u>How to create a PostScript font for use with groff</u></h3></a>
    308  1.1  christos These instructions aren't meant to cover all possibilities, merely
    309  1.1  christos to present one way of making PostScript families/fonts available to
    310  1.1  christos groff and <strong>mom</strong>.
    311  1.1  christos <p>
    312  1.1  christos GNU/Linux distributions being what they are, directory locations may
    313  1.1  christos differ and the presence of some executables can't be guaranteed.
    314  1.1  christos I run a Debian system.  The instructions reflect that.  Users of
    315  1.1  christos other distros will have to interpret them according to the way their
    316  1.1  christos distro operates.
    317  1.1  christos <p>
    318  1.1  christos What you need before you start:
    319  1.1  christos <br>
    320  1.1  christos <ul>
    321  1.1  christos 	<li>groff, version 1.18 or higher
    322  1.1  christos 		<br>
    323  1.1  christos 		(Debian package: groff)
    324  1.1  christos 	<li>a full installation of gs and associated tools
    325  1.1  christos 		<br>
    326  1.1  christos 		(Debian package: gs or gs-gpl)
    327  1.1  christos 	<li>a library of gs fonts
    328  1.1  christos 		<br>
    329  1.1  christos 		(Debian package: gsfonts)
    330  1.1  christos 	<li>a utility for converting TrueType fonts to Type1 fonts
    331  1.1  christos 		<br>
    332  1.1  christos 		(Debian package: ttf2pt1)
    333  1.1  christos 	<li>a font manager
    334  1.1  christos 		<br>
    335  1.1  christos 		(Debian packages: defoma, psfontmgr, dfontmgr)
    336  1.1  christos 	<li>perl
    337  1.1  christos 		<br>
    338  1.1  christos 		(Debian package: perl)
    339  1.1  christos </ul>
    340  1.1  christos <br>
    341  1.1  christos A reasonably complete installation of any major GNU/Linux distro
    342  1.1  christos should already have these on your system, except perhaps for the
    343  1.1  christos utility to convert TrueType fonts to Type1 fonts.
    344  1.1  christos <p>
    345  1.1  christos Initial preparation (you only have to do this once):
    346  1.1  christos <br>
    347  1.1  christos <ol>
    348  1.1  christos 	<li>If you don't already have one, create a directory in your
    349  1.1  christos 		home directory to hold new fonts.  Any directory name will do.
    350  1.1  christos 		I use ~/Fonts, with subdirectories for Type1, TrueType and Groff
    351  1.1  christos 		fonts.
    352  1.1  christos <a name="SITE-FONT"></a>
    353  1.1  christos 	<li>Locate the groff directory, site-font.  The exact location is
    354  1.1  christos 		difficult to predict, owing to differences between distros
    355  1.1  christos 		and whether you're using a pre-packaged groff or have built
    356  1.1  christos 		it from source.  Some typical locations are
    357  1.1  christos 		<br>
    358  1.1  christos 		<ul>
    359  1.1  christos 			<li>/usr/share/groff,
    360  1.1  christos 			<li>/usr/local/share/groff
    361  1.1  christos 			<li>/etc/groff
    362  1.1  christos 		</ul>
    363  1.1  christos 		<p>
    364  1.1  christos 		If you can't find the site-font directory, locate
    365  1.1  christos 		groff's site-tmac directory, and, as root, create site-font
    366  1.1  christos 		in the same directory as the one that holds site-tmac.
    367  1.1  christos 		E.g., if you find site-tmac in /usr/share/groff, create
    368  1.1  christos 		site-font in /usr/share/groff.
    369  1.1  christos 	<li>Locate the file <kbd>&lt;prefix&gt;/font/devps/generate/textmap</kbd>
    370  1.1  christos         and symlink it to <kbd>textmap</kbd> in the directory that
    371  1.1  christos         contains your personal collection of PostScript fonts.  (See the
    372  1.1  christos 		<a href="#SMALL_NOTE">Small Note</a>,
    373  1.1  christos 		above, for the meaning of &lt;prefix&gt;).  On my system,
    374  1.1  christos 		at the time of writing, &lt;prefix&gt; is
    375  1.1  christos 		/usr/local/share/groff/1.19.2/, therefore, I symlink it in
    376  1.1  christos 		~/Fonts/Type1 with
    377  1.1  christos 		<br>
    378  1.1  christos 		<pre>
    379  1.1  christos ln -s /usr/local/share/groff/1.19.2/font/devps/generate/textmap textmap
    380  1.1  christos 		</pre>
    381  1.1  christos 	<li>Locate the file &lt;prefix&gt;/font/devps/text.enc and
    382  1.1  christos 		symlink it to <kbd>text.enc</kbd> in your personal font
    383  1.1  christos 		directory.  On my system, in ~/Fonts/Type1
    384  1.1  christos 		<pre>
    385  1.1  christos ln -s /usr/local/share/groff/1.19.2/font/devps/text.enc text.enc
    386  1.1  christos 		</pre>
    387  1.1  christos 	<li>Make sure you know which directory/ies holds your gs fonts.
    388  1.1  christos 		You'll need the information later.  On a Debian box, some
    389  1.1  christos 		typical locations are
    390  1.1  christos 		<br>
    391  1.1  christos 		<ul>
    392  1.1  christos 			<li>/usr/lib/ghostscript/fonts
    393  1.1  christos 			<li>/usr/share/ghostscript/fonts
    394  1.1  christos 			<li>/usr/share/fonts/type1/gsfonts
    395  1.1  christos 		</ul>
    396  1.1  christos </ol>
    397  1.1  christos <br>
    398  1.1  christos Font creation/installation:
    399  1.1  christos <br>
    400  1.1  christos <ol>
    401  1.1  christos 	<li>Acquire the font in either Type1 (.pfb) or TrueType
    402  1.1  christos 		(.ttf) format.
    403  1.1  christos 	<li>Place the font in your personal font directory; for me,
    404  1.1  christos 		that's ~/Fonts/Type1 or ~/Fonts/TrueType.
    405  1.1  christos 	<li>In your personal font directory, run one of the following:
    406  1.1  christos 		<br>
    407  1.1  christos 		<ul>
    408  1.1  christos 			<li>For Type1 fonts
    409  1.1  christos 			<br>
    410  1.1  christos 			<ul>
    411  1.1  christos 				<li><kbd>getafm fontfilename.pfb | gsnd - > fontfilename.afm</kbd>
    412  1.1  christos 					<br>
    413  1.1  christos 					For Type1 fonts, this will generate something called
    414  1.1  christos 					an .afm (Adobe Font Metrics) file, which is
    415  1.1  christos 					required to create PostScript fonts for groff.
    416  1.1  christos 			</ul>
    417  1.1  christos 			<li>For TrueType fonts
    418  1.1  christos 			<br>
    419  1.1  christos 			<ul>
    420  1.1  christos 				<li><kbd>ttf2pt1 \-b fontfilename.ttf</kbd>
    421  1.1  christos 				<br>
    422  1.1  christos 				For TrueType fonts, this will generate a PostScript
    423  1.1  christos 				.pfb file as well as an .afm file.
    424  1.1  christos 			</ul>
    425  1.1  christos 		</ul>
    426  1.1  christos 	<li>Still in your personal font directory, run
    427  1.1  christos 		<br>
    428  1.1  christos 		<ul>
    429  1.1  christos 			<li><kbd>afmtodit -e text.enc fontfilename.afm textmap GROFF_FONTNAME</kbd>
    430  1.1  christos 		</ul>
    431  1.1  christos 		<p>
    432  1.1  christos 		Q: <em>How do I choose a GROFF_FONTNAME?</em>
    433  1.1  christos 		<p>
    434  1.1  christos 		A: Start by considering the
    435  1.1  christos 		<a href="definitions.html#TERMS_FAMILY">family</a>
    436  1.1  christos 		to which the font belongs.  If you're adding to a family that
    437  1.1  christos 		already exists in groff's &lt;prefix&gt;/font/devps
    438  1.1  christos 		directory, that will be the first part of the font name.
    439  1.1  christos 		(See
    440  1.1  christos 		<a href="typesetting.html#FAMILY">here</a>
    441  1.1  christos 		for a list of families already installed, along with their groff
    442  1.1  christos 		names.)  Add to that name the appropriate weight/style extension,
    443  1.1  christos 		listed
    444  1.1  christos 		<a href="#STYLE_EXTENSIONS">here</a>.
    445  1.1  christos 		<p>
    446  1.1  christos 		For example, if you're adding Helvetica Light Roman, your
    447  1.1  christos 		GROFF_FONTNAME would be <strong>HL</strong>.  If you're
    448  1.1  christos 		adding Helvetica Light Italic, your GROFF_FONTNAME would be
    449  1.1  christos 		<strong>HLI</strong>.
    450  1.1  christos 		<p>
    451  1.1  christos 		If you're adding a font not already in groff's PostScript
    452  1.1  christos 		families, first choose a meaningful name for the
    453  1.1  christos 		<a name="definitions.html#TERMS_FAMILY">family</a>
    454  1.1  christos 		to which the font belongs.  The name can be anything you like.  If,
    455  1.1  christos 		for example, the family is Garamond, you could choose GARAMOND,
    456  1.1  christos 		GARA, GD, or even just plain G as the family name.  Then tack on the
    457  1.1  christos 		appropriate style/weight extension.  Thus, if you were installing
    458  1.1  christos 		Garamond Bold Condensed Italic and had chosen <strong>GD</strong>
    459  1.1  christos 		as the family name for Garamond, your GROFF_FONTNAME would be
    460  1.1  christos 		<strong>GDBCDI</strong>.
    461  1.1  christos 		<p>
    462  1.1  christos 		In <strong>mom</strong>, you can then access the Garamond
    463  1.1  christos 		family with <kbd>.FAM GD</kbd>, and the Bold Condensed
    464  1.1  christos 		Italic font wth <kbd>.FT BCDI</kbd>.
    465  1.1  christos 		<p>
    466  1.1  christos 		<strong>Note:</strong> The family name need not be in upper
    467  1.1  christos 		case, and there's no limit to the length of the name.
    468  1.1  christos 		&quot;Garamond&quot;, for example, could be the name you
    469  1.1  christos 		give the Garamond family.  In fact, you might find it
    470  1.1  christos 		preferable, since a) you wouldn't have to remember how
    471  1.1  christos 		you'd named the family, and b) should you be scanning
    472  1.1  christos 		your
    473  1.1  christos 		<a href="#SITE-FONT">site-font directory</a>,
    474  1.1  christos 		something like GaramondBCDI will be more meaningful than,
    475  1.1  christos 		say, GDBCDI. 
    476  1.1  christos 	<li>Copy or move GROFF_FONTNAME to your
    477  1.1  christos 		<a href="#SITE-FONT">site-font directory</a>,
    478  1.1  christos 		or change to the site-font directory and make a symlink to
    479  1.1  christos 		GROFF_FONTNAME in your personal directory.
    480  1.1  christos 	<li>Copy or move the .pfb file to the directory that
    481  1.1  christos 		holds your gs fonts, or change to that directory and make a
    482  1.1  christos 		symlink to the .pfb file in your personal directory.
    483  1.1  christos 	<li>Do whatever your system or distro requires in order to
    484  1.1  christos 		register the new PostScript font (the .pfb file).  On a
    485  1.1  christos 		Debian system, as root, you can run dfontmgr for a
    486  1.1  christos 		graphical interface that will take care of registering the
    487  1.1  christos 		font.
    488  1.1  christos </ol>
    489  1.1  christos <p>
    490  1.1  christos Written out in full, adding fonts looks like a lot of work.  It
    491  1.1  christos isn't.  Basically, it's just:
    492  1.1  christos <br>
    493  1.1  christos <ul>
    494  1.1  christos 	<li>acquire the font
    495  1.1  christos 	<li>generate an .afm file for the font
    496  1.1  christos 	<li>create the groff font
    497  1.1  christos 	<li>put the groff font in &lt;prefix&gt;/font/devps
    498  1.1  christos 	<li>make sure gs knows about the font
    499  1.1  christos </ul>
    500  1.1  christos <br>
    501  1.1  christos After you've done it a couple of times, it all makes sense, and is
    502  1.1  christos really quite easy.  Not to mention that once you understand the
    503  1.1  christos process, you can write a bash script to automate the process.
    504  1.1  christos Here's an example, which you can adapt to your own needs.  The
    505  1.1  christos script requires an argument (the .pfb filename), then prompts for
    506  1.1  christos the GROFF_FONTNAME.
    507  1.1  christos <p>
    508  1.1  christos <pre>
    509  1.1  christos #! /bin/bash
    510  1.1  christos 
    511  1.1  christos # A script for installing Type1 fonts.
    512  1.1  christos #
    513  1.1  christos # Builds .afm files from .pfb files, generates a groff font from the
    514  1.1  christos # .afm file, makes a symlink in /usr/lib/ghostscript/font/ to the
    515  1.1  christos # .pfb file, and a symlink in site-font to the groff font
    516  1.1  christos 
    517  1.1  christos # .pfb filename, stripped of .pfb extension
    518  1.1  christos FONT=`basename $1 .pfb`
    519  1.1  christos 
    520  1.1  christos # Directory holding my personal collection of type1 fonts
    521  1.1  christos FONTDIR="$HOME/Fonts/Type1"
    522  1.1  christos 
    523  1.1  christos # Directory holding system ghostscript fonts
    524  1.1  christos GS_FONTDIR="/usr/lib/ghostscript/fonts"
    525  1.1  christos 
    526  1.1  christos # Location of site-font/devps
    527  1.1  christos GROFF_SITE_FONTDIR="/usr/local/share/groff/site-font/devps"
    528  1.1  christos 
    529  1.1  christos # Personal groff fonts directory
    530  1.1  christos GROFF_FONTS="$HOME/Fonts/Groff"
    531  1.1  christos 
    532  1.1  christos # Symlinks to textmap and text.enc
    533  1.1  christos TEXTMAP="$FONTDIR/textmap"
    534  1.1  christos TEXTENC="$FONTDIR/text.enc"
    535  1.1  christos 
    536  1.1  christos if [ ! `pwd` = "$FONTDIR" ] ; then
    537  1.1  christos     echo "Changing into $FONTDIR directory.."
    538  1.1  christos     cd $FONTDIR
    539  1.1  christos     sleep 1
    540  1.1  christos else
    541  1.1  christos 	sleep 1
    542  1.1  christos fi
    543  1.1  christos 
    544  1.1  christos echo -n "Groff name for this font: "
    545  1.1  christos read FONTNAME
    546  1.1  christos sleep 1
    547  1.1  christos 
    548  1.1  christos echo "Getting .afm.."
    549  1.1  christos getafm $FONT.pfb | gsnd - > $FONT.afm
    550  1.1  christos sleep 1
    551  1.1  christos 
    552  1.1  christos echo "Creating $FONTNAME.."
    553  1.1  christos afmtodit -e $TEXTENC $FONTDIR/$FONT.afm $TEXTMAP $FONTNAME
    554  1.1  christos mv -i $FONTNAME $GROFF_FONTS
    555  1.1  christos sudo ln -s $GROFF_FONTS/$FONTNAME $GROFF_SITE_FONTDIR/$FONTNAME
    556  1.1  christos sleep 1
    557  1.1  christos 
    558  1.1  christos echo "Linking $FONT in $GS_FONTDIR.."
    559  1.1  christos cd $GS_FONTDIR
    560  1.1  christos sudo ln -s $FONTDIR/$FONT.afm $FONT.afm
    561  1.1  christos sudo ln -s $FONTDIR/$FONT.pfb $FONT.pfb
    562  1.1  christos sleep 1
    563  1.1  christos 
    564  1.1  christos # This next bit is Debian specific.  If you're not running a
    565  1.1  christos # Debian system, replace it with whatever your distro requires
    566  1.1  christos # in order to register Type1 fonts.
    567  1.1  christos 
    568  1.1  christos if [ !`pidof -x /usr/bin/dfontmgr` ] ; then
    569  1.1  christos     echo "I will now run dfontmgr so you can register the font."
    570  1.1  christos     exec sudo dfontmgr &
    571  1.1  christos else
    572  1.1  christos     echo "You may now register the font with dfontmgr."
    573  1.1  christos fi
    574  1.1  christos </pre>
    575  1.1  christos <hr>
    576  1.1  christos 
    577  1.1  christos <!=====================================================================>
    578  1.1  christos 
    579  1.1  christos <a name="CODENOTES">
    580  1.1  christos 	<h2><u>Some reflections on mom</u></h2>
    581  1.1  christos </a>
    582  1.1  christos 
    583  1.1  christos <p>
    584  1.1  christos <strong>Mom</strong>, as a complete macro set, had her origins
    585  1.1  christos in a &quot;library&quot; of groff routines I wrote over the
    586  1.1  christos years to handle various aspects of typesetting and document
    587  1.1  christos processing that weren't adequately covered by ms, me, mm, and so
    588  1.1  christos on.  Typically, I'd use the library to cobble together macro
    589  1.1  christos sets for new challenges as they came my way.
    590  1.1  christos <p>
    591  1.1  christos If, as Eric Raymond asserts, open source begins with a programmer
    592  1.1  christos scratching a personal itch, then <strong>mom</strong> can truly be
    593  1.1  christos called open source, even if, a mere humble set of macros standing on
    594  1.1  christos the shoulders of a giant named troff, she isn't programming at all.
    595  1.1  christos <p>
    596  1.1  christos As a writer living in a perpetual state of penury, all the computers
    597  1.1  christos I've ever owned have been hand-me-downs -- several generations
    598  1.1  christos out-of-date and &quot;resource challenged&quot;.  Disk space has
    599  1.1  christos always been an issue, as has processor speed and available RAM.
    600  1.1  christos One of the reasons I run GNU/Linux is that it has helped enormously
    601  1.1  christos to get the most out of my poor little boxes.  (It has been pointed
    602  1.1  christos out to me that NetBSD might be an even better choice of operating
    603  1.1  christos systems for computers with limited resources.)
    604  1.1  christos <p>
    605  1.1  christos In Linux-land, the choice of typesetting systems basically comes down
    606  1.1  christos to groff or TeX.  Both are wonderful -- monumental achievements if you
    607  1.1  christos ask me -- and both have their own particular strengths.  However, for
    608  1.1  christos people in my financial position (and there are millions of us around
    609  1.1  christos the globe, in both developed and developing countries), TeX and groff
    610  1.1  christos have one big difference: size.  TeX is huge.  Even its most ardent
    611  1.1  christos supporters agree it suffers from bloat, on top of being complex and
    612  1.1  christos unwieldy to manage.  Groff is tiny by comparison, occupying minimal
    613  1.1  christos disk space and having only a small memory footprint while at the same
    614  1.1  christos time being flexible and powerful, typographically speaking.  I've run
    615  1.1  christos it successfully on a 386 with 8 megs of RAM and a 250 meg hard disk.
    616  1.1  christos <p>
    617  1.1  christos However, groff has always had a liability: it's incredibly geeky.
    618  1.1  christos Owing to its very long history, it -- and its &quot;power users&quot;
    619  1.1  christos -- have remained stuck in a time warp.  Most common macro packages
    620  1.1  christos still look as they did in those decades when memory was exorbitantly
    621  1.1  christos expensive and every byte mattered.  Documentation -- not always
    622  1.1  christos easy to find -- is written as if all readers are computer whizzes,
    623  1.1  christos or at least have a university degree in one of the higher sciences.
    624  1.1  christos <p>
    625  1.1  christos By no means a stupid man, nor unfamiliar with the precepts of
    626  1.1  christos programming, I've more than once torn my hair out over the terseness and
    627  1.1  christos ambiguity of groff's documentation.  Making sense of certain primitives
    628  1.1  christos has often involved days of testing, interpreting the documentation
    629  1.1  christos instead of just using the primitive.
    630  1.1  christos <p>
    631  1.1  christos (ADDENDUM to the previous two paragraphs:  A tremendous amount of
    632  1.1  christos effort has gone into creating a groff manual that can be read with
    633  1.1  christos "info," as well as creating truly useful man pages.  The info
    634  1.1  christos manual is clear and well-written, so my comments are actually out
    635  1.1  christos of date.  I leave them in for the benefit of groff newbies, who may
    636  1.1  christos still find the documents a bit intimidating.)
    637  1.1  christos <p>
    638  1.1  christos For some time now, groff users and macro writers have had the
    639  1.1  christos option to use &quot;long&quot; names, yet have mostly chosen not to.
    640  1.1  christos With long names, it's possible to create macro sets that are humanly
    641  1.1  christos readable and easy to interpret, encouraging development and evolution.
    642  1.1  christos What's more, the macros themselves need not be terse, intimidating,
    643  1.1  christos and easily forgotten 1- or 2-letter commands inserted in the body
    644  1.1  christos of a document.  They can be sensible and helpful to everyone, groff
    645  1.1  christos newbies and old hands alike.
    646  1.1  christos <p>
    647  1.1  christos <strong>Mom</strong>'s macro file, om.tmac, uses long names, aliases,
    648  1.1  christos and a host of other groff goodies that have become part of the
    649  1.1  christos whole groff picture under the unflagging guidance of groff's current
    650  1.1  christos maintainer, Werner Lemberg.  Nearly every macro, number register and
    651  1.1  christos string is &quot;recognizable&quot; simply by its name.  The file is
    652  1.1  christos heavily commented.  A consistent, if idiosyncratic, indenting style
    653  1.1  christos is used as well, significantly improving readability.  Anyone
    654  1.1  christos wanting to futz around with <strong>mom</strong>'s macros should be
    655  1.1  christos able to do so with a minimum of head scratching.
    656  1.1  christos <br>
    657  1.1  christos <hr>
    658  1.1  christos 
    659  1.1  christos <!=====================================================================>
    660  1.1  christos 
    661  1.1  christos <a name="CONTACT">
    662  1.1  christos 	<h2><u>Contact the author</u></h2>
    663  1.1  christos </a>
    664  1.1  christos 
    665  1.1  christos <p>
    666  1.1  christos If you have any questions or comments about <strong>mom</strong>,
    667  1.1  christos suggestions to make, criticisms to offer, or bugs to report, use the
    668  1.1  christos groff mailing list at
    669  1.1  christos <a href="mailto:groff (a] ffii.org">groff (a] ffii.org</a>
    670  1.1  christos (subscription information available
    671  1.1  christos <a href="http://ffii.org/mailman/listinfo/groff/">here</a>)
    672  1.1  christos or contact me, Peter Schaffter,  directly at
    673  1.1  christos <i>&#112;&#101;&#116;&#101;&#114;&#64;&#102;&#97;&#117;&#115;&#116;&#117;&#115;&#46;&#100;&#121;&#110;&#46;&#99;&#97;</i>
    674  1.1  christos or
    675  1.1  christos <i>&#112;&#116;&#112;&#105;&#64;&#103;&#111;&#108;&#100;&#101;&#110;&#46;&#110;&#101;&#116;</i>.
    676  1.1  christos 
    677  1.1  christos <p>
    678  1.1  christos Please include the word &quot;mom&quot; or &quot;groff&quot; in the
    679  1.1  christos Subject: line of any message sent to my personal address, or you
    680  1.1  christos risk the wrath of my implacable spam filters. :)
    681  1.1  christos <p>
    682  1.1  christos If you want to visit <strong>mom</strong>'s homepage, you'll find
    683  1.1  christos it
    684  1.1  christos <a href="http://faustus.dyn.ca/mom/mom.html">here</a>.
    685  1.1  christos <p>
    686  1.1  christos <hr>
    687  1.1  christos <a href="reserved.html#TOP">Next</a>&nbsp;&nbsp;
    688  1.1  christos <a href="macrolist.html#TOP">Prev</a>&nbsp;&nbsp;
    689  1.1  christos <a href="#TOP">Top</a>&nbsp;&nbsp;
    690  1.1  christos <a href="toc.html">Back to Table of Contents</a>
    691  1.1  christos </body>
    692  1.1  christos </html>
    693