home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 February / CHIP_2_98.iso / doc / HOWTO / mini / Man-Page < prev    next >
Text File  |  1997-08-18  |  33KB  |  815 lines

  1.  
  2.    
  3.    
  4.    _THE LINUX MAN-PAGE-HOWTO_
  5.    
  6.    Copyright 1995,96,97 by Jens Schweikhardt, email:
  7.    <schweikh@noc.dfn.de>
  8.    
  9.    http://www.uni-stuttgart.de/People/schweikhardt/home.html
  10.    
  11.    See further information on copying conditions below.
  12.    
  13.    Last update: August 1997. Click here to browse the author's latest
  14.    version of this document. (URL is likely to change around the end of
  15.    1997 A.D. If this happens try sending an email to the address above
  16.    which will remain valid and ask for the new URL). Corrections and
  17.    suggestions welcome!
  18.    
  19.    This HOWTO explains what you should bear in mind when you are going to
  20.    write on-line documentation -- a so called man page -- that you want
  21.    to make accessible via the man(1) command. Throughout this HOWTO, a
  22.    manual entry is simply referred to as a man page, regardless of actual
  23.    length and without sexist intention.
  24.    
  25.    _Table of contents_
  26.      * 0) A few thoughts on documentation
  27.      * 1) How are man pages accessed? 
  28.      * 2) How should a formatted man page look like?
  29.      * 3) How do I document several programs/functions in a single man
  30.        page?
  31.      * 4) Which macro package should I use?
  32.      * 5) What preprocessors may I use?
  33.      * 6) Should I distribute source and/or already formatted
  34.        documentation?
  35.      * 7) What are the font conventions?
  36.      * 8) How do I polish my man page?
  37.      * 9) How do I get a plain text man page without all that ^H^_ stuff?
  38.      * 10) How do I get a high quality PostScript man page? 
  39.      * 11) How do I get apropos and whatis to work?
  40.      * A) Copying conditions
  41.        
  42.    
  43.    
  44.    _0) A few thoughts on documentation_
  45.    
  46.    Why do we write documentation? Silly question. Because we want others
  47.    to be able to use our program, library function or whatever we have
  48.    written and made available. But writing documentation is not all there
  49.    is to it:
  50.      * Documentation must be accessible. If it's hidden in some
  51.        non-standard place where the documentation related tools won't
  52.        find it -- how can it serve its purpose?
  53.      * documentation must be reliable and accurate. There's nothing more
  54.        annoying than having program behaviour and documentation disagree.
  55.        Users will curse you, send you hate mail and throw your work into
  56.        the bit bucket, with the firm intent to never install anything
  57.        written by that jerk again.
  58.        
  59.    
  60.    
  61.    The historical and well known way documentation is accessed on UNIX is
  62.    via the man(1) command. This HOWTO describes what you have to do to
  63.    write a man page that will be correctly processed by the documentation
  64.    related tools. The most important of these tools are man(1), xman(1x),
  65.    apropos(1), makewhatis(8) and catman(8). Reliability and accuracy of
  66.    the information are, of course, up to you. But even in this respect
  67.    you will find some ideas below that help you avoid some common
  68.    glitches.
  69.    
  70.    _1) How are man pages accessed? _
  71.    
  72.    You need to know the precise mechanism how man pages are accessed in
  73.    order to give your man page the right name and install it in the right
  74.    place. Any man page belongs to a specific section, which is denoted by
  75.    a single character. The most common sections under Linux and their
  76.    human readable names are
  77. Section The human readable name
  78.    1    User commands that may be started by everyone.
  79.    2    System calls, that is, functions provided by the kernel.
  80.    3    Subroutines, that is, library functions.
  81.    4    Devices, that is, special files in the /dev directory.
  82.    5    File format descriptions, e.g. /etc/passwd.
  83.    6    Games, self-explanatory.
  84.    7    Miscellaneous, e.g. macro packages, conventions.
  85.    8    System administration tools that only root can execute.
  86.    9    Another (Linux specific) place for kernel routine documentation.
  87.    n    New documentation, that may be moved to a more appropriate section.
  88.    o    Old documentation, that may be kept for a grace period.
  89.    l    Local documentation referring to this particular system.
  90.  
  91.    
  92.    
  93.    The name of the source file for a man page (the input to the
  94.    formatting system) is the name of the command, function or file name,
  95.    followed by a dot, followed by the section. If you write the
  96.    documentation on the format of the `passwd' file you have to name the
  97.    source file `passwd.5'. Here we also have an example of a file name
  98.    that is the same as a command name. There might be even a library
  99.    subroutine named passwd. Sectioning is the usual way to resolve these
  100.    ambiguities: The command description is found in the file `passwd.1'
  101.    and the hypothetical library subroutine in `passwd.3'.
  102.    
  103.        
  104.        Sometimes additional characters are appended and the file name
  105.        looks for example like `xterm.1x' or `wish.1tk'. The intent is to
  106.        indicate that this is documentation for an X Window program or a
  107.        Tk application, respectively. Some manual browsers can make use of
  108.        this additional information. For example xman will use `xterm(x)'
  109.        and `wish(tk)' in the list of available documentation.
  110.        
  111.    
  112.    
  113.    Please don't use the n, o and l sections; according to the File System
  114.    Standard these sections are deprecated. Stick to the numeric sections.
  115.    Beware of name clashes with existing programs, functions or file
  116.    names. It is certainly a bad idea to write yet another editor and call
  117.    it ed, sed (for smart ed) or red (for Rocky's ed). By making sure your
  118.    program's name is unique you avoid that someone executes your program
  119.    and reads someone else's man page or vice versa. Checking out the lsm
  120.    database on a program name is a place to start doing so.
  121.    
  122.    Now we know the name to give our file. The next decision is which
  123.    directory it will finally get installed (say, when the user runs `make
  124.    install' for your package.) On Linux, all man pages are below
  125.    directories mentioned in the environment variable MANPATH. The doc
  126.    related tools use it quite similar like the shell uses PATH to locate
  127.    executables. In fact, MANPATH has the same format as PATH. Both hold a
  128.    colon separated list of directories (with the exception that MANPATH
  129.    does not allow empty fields and relative pathnames but has absolute
  130.    names only.) If MANPATH is not set or not exported, a default will be
  131.    used that contains at least the /usr/man directory. To speed up the
  132.    search and to keep directories small, the directories specified by
  133.    MANPATH (the so called base directories) contain a bunch of
  134.    subdirectories named `man<s>' where <s> stands for the one character
  135.    section introduced in the table above. Not all of the sections may be
  136.    represented by a subdirectory because there simply is no reason to
  137.    keep an empty `mano' subdirectory. However, there may be directories
  138.    named `cat<s>', `dvi<s>' and `ps<s>' which hold documentation that is
  139.    ready to display or print. More on this later. The only other file in
  140.    any base directory should be a file named `whatis'. The purpose and
  141.    creation of this file will also be described under paragraph 11). The
  142.    safest way to have a man page for section <s> installed in the right
  143.    place is to put it in the directory /usr/man/man<s>. A good Makefile,
  144.    however, will allow the user to chose a base directory, by means of a
  145.    make variable, MANDIR, say. Most of the GNU packages can be configured
  146.    with the --prefix=/what/ever option. The manuals will then be
  147.    installed under the base directory /what/ever/man. I suggest you also
  148.    provide a way to do something similar.
  149.    
  150.    With the advent of the Linux File System Standard (FS-Stnd), things
  151.    became more complicated. The FS-Stnd 1.2 states that
  152.    
  153.        
  154.        "Provisions must be made in the structure of /usr/man to support
  155.        manual pages which are written in different (or multiple)
  156.        languages."
  157.        
  158.    
  159.    
  160.    This is achieved by introducing another directory level that
  161.    distinguishes between different languages. Quoting again from FS-Stnd
  162.    1.2:
  163.    
  164.        
  165.        "This naming of language subdirectories of /usr/man is based on
  166.        Appendix E of the POSIX 1003.1 standard which describes the locale
  167.        identification string -- the most well accepted method to describe
  168.        a cultural environment. The <locale> string is:
  169.        <language>[_<territory>][.<character-set>][,<version>]"
  170.        
  171.    
  172.    
  173.    (See the FS-Stnd for a few common <locale> strings.) According to
  174.    these guidelines, we have our man pages in
  175.    /usr/man/<locale>/man[1-9lno]. The formatted versions should then be
  176.    in /usr/man/<locale>/cat[1-9lno] of course, otherwise we could only
  177.    provide them for a single locale. HOWEVER, I can not recommend
  178.    switching to that structure at this time. The FS-Stnd 1.2 also allows
  179.    that
  180.    
  181.        
  182.        "Systems which use a unique language and code set for all manual
  183.        pages may omit the <locale> substring and store all manual pages
  184.        in <mandir>. For example, systems which only have English manual
  185.        pages coded with ASCII, may store manual pages (the man[1-9]
  186.        directories) directly in /usr/man. (That is the traditional
  187.        circumstance and arrangement in fact.)"
  188.        
  189.    
  190.    
  191.    I would not switch until all tools (like xman, tkman, info and many
  192.    others that read man pages) can cope with the new structure.
  193.    
  194.    _2) How should a formatted man page look like?_
  195.    
  196.    Let me present you an example. Below I will explain it in detail. If
  197.    you read this as plain text it won't show the different typefaces
  198.    (_bold _and _italics_). Please refer to the paragraph "What are the
  199.    font conventions?" for further explanations. Here comes the man page
  200.    for the (hypothetical) foo program.
  201. FOO(1)                     User Manuals                    FOO(1)
  202.  
  203.  
  204.  
  205. _NAME
  206. _     foo - frobnicate the bar library
  207.  
  208. _SYNOPSIS
  209. _     _foo [-bar] [-c_ _config-file_ _]_ _file_ _...
  210.  
  211. DESCRIPTION
  212. _     _foo_  frobnicates the bar library by tweaking internal symbol
  213.      tables. By default it parses all baz segments and rearranges
  214.      them  in  reverse  order  by time for the _xyzzy_(1) linker to
  215.      find them. The symdef entry is then compressed using the WBG
  216.      (Whiz-Bang-Gizmo) algorithm.  All files are processed in the
  217.      order specified.
  218.  
  219. _OPTIONS
  220. _     -b   Do not write `busy' to stdout while processing.
  221.  
  222.      -c config-file
  223.           Use the alternate system wide  _config-file_  instead  of
  224.           _/etc/foo.conf_.   This overrides any _FOOCONF_ environment
  225.           variable.
  226.  
  227.      -a   In addition to the baz segments, also parse the  blurfl
  228.           headers.
  229.  
  230.      -r   Recursive  mode.  Operates  as fast as lightning at the
  231.           expense of a megabyte of virtual memory.
  232.  
  233. _FILES
  234. _     _/etc/foo.conf
  235. _          The system wide configuration file. See _foo_(5) for fur-
  236.           ther details.
  237.      _~/.foorc
  238. _          Per  user  configuration  file.  See _foo_(5) for further
  239.           details.
  240.  
  241. _ENVIRONMENT
  242. _     FOOCONF
  243.           If non-null the full pathname for an  alternate  system
  244.           wide _foo.conf_.  Overridden by the -c option.
  245.  
  246. _DIAGNOSTICS
  247. _     The following diagnostics may be issued on stderr:
  248.  
  249.      Bad magic number.
  250.           The input file does not look like an archive file.
  251.      Old style baz segments.
  252.           foo  can  only  handle  new  style  baz segments. COBOL
  253.           object libraries are not supported in this version.
  254.  
  255. _BUGS
  256. _     The command name should have been chosen more  carefully  to
  257.      reflect its purpose.
  258.  
  259. _AUTHOR
  260. _     Jens Schweikhardt <schweikh@noc.dfn.de>
  261.  
  262. _SEE ALSO
  263. _     _bar_(1), _foo_(5), _xyzzy_(1)
  264.  
  265. Linux                Last change: MARCH 1995                    2
  266.  
  267.  
  268.  
  269.    
  270.    
  271.    Here's the explanation as I promised.
  272.    
  273.    _The NAME section_
  274.    
  275.    ...is the only required section. Man pages without a name section are
  276.    as useful as refrigerators at the north pole. This section also has a
  277.    standardized format consisting of a comma separated list of program or
  278.    function names followed by a dash followed by a short (usually one
  279.    line) description what functionality the program (function, file) is
  280.    supposed to provide. By means of makewhatis(8) the name sections make
  281.    it into the whatis database files. Makewhatis is the reason why the
  282.    name section must exist and why it must adhere to the format I
  283.    described. In the groff source it must look like
  284.    
  285.    .SH NAME foo \- frobnicate the bar library
  286.    
  287.    The \- is of importance here. The backslash is needed to make the dash
  288.    distinct from a hyphenation dash that may appear in either the command
  289.    name or the one line description.
  290.    
  291.    _The SYNOPSIS section_
  292.    
  293.    ...is intended to give a short overview on available program options.
  294.    For functions this sections lists corresponding include files and the
  295.    prototype so the programmer knows the type and number of arguments as
  296.    well as the return type.
  297.    
  298.    _The DESCRIPTION section _
  299.    
  300.    ...gives an eloquent explanation why your sequence of 0s and 1s is
  301.    worth anything at all. Here's where you write down all your knowledge.
  302.    This is the Hall Of Fame. Win other programmer's and user's admiration
  303.    by making this section the source of reliable and detailed
  304.    information. Explain what the arguments are for, the file format, what
  305.    algorithms do the dirty jobs.
  306.    
  307.    _The OPTIONS section_
  308.    
  309.    ...gives a description for any option how it affects program
  310.    behaviour. You knew that, didn't you?
  311.    
  312.    _The FILES section_
  313.    
  314.    ...lists files the program or function uses. For example,
  315.    configuration files, startup files, files the program directly
  316.    operates on. It is a good idea to give the full pathname of these
  317.    files and to make the install process modify the directory part to
  318.    match user preferences: the groff manuals have a default prefix of
  319.    /usr/local, so they reference /usr/local/lib/groff/* by default.
  320.    However, if you install using 'make prefix=/opt/gnu' the references in
  321.    the man page change to /opt/gnu/lib/groff/*
  322.    
  323.    _The ENVIRONMENT section _
  324.    
  325.    ...lists all environment variables that affect your program or
  326.    function and tells how, of course. Most commonly the variables will
  327.    hold pathnames, filenames or default options.
  328.    
  329.    _The DIAGNOSTICS section_
  330.    
  331.    ...should give an overview of the most common error messages from your
  332.    program and how to cope with them. There's no need to explain system
  333.    error error messages (from perror(3)) or fatal signals (from
  334.    psignal(3)) as they can appear during execution of any program.
  335.    
  336.    _The BUGS section _
  337.    
  338.    ...should ideally be non-existent. If you're brave, you can describe
  339.    here limitations, known inconveniences, features that others may
  340.    regard as misfeatures. If you're not so brave, rename it the TO DO
  341.    section ;-)
  342.    
  343.    _The AUTHOR section_
  344.    
  345.    ...is nice to have in case there are gross errors in the documentation
  346.    or program behaviour (Bzzt!) and you want to mail a bug report.
  347.    
  348.    _The SEE ALSO section_
  349.    
  350.    ...is a list of related man pages in alphabetical order.
  351.    Conventionally, it is the last section. You are free to invent other
  352.    sections if they really don't fit in one of those described so far. So
  353.    how exactly did you generate that man page? I expected that question,
  354.    here's the source, Luke:
  355. .\" Process this file with
  356. .\" groff -man -Tascii foo.1
  357. .\"
  358. .TH FOO 1 "MARCH 1995" Linux "User Manuals"
  359. .SH NAME
  360. foo \- frobnicate the bar library
  361. .SH SYNOPSIS
  362. .B foo [-bar] [-c
  363. .I config-file
  364. .B ]
  365. .I file
  366. .B ...
  367. .SH DESCRIPTION
  368. .B foo
  369. frobnicates the bar library by tweaking internal
  370. symbol tables. By default it parses all baz segments
  371. and rearranges them in reverse order by time for the
  372. .BR xyzzy (1)
  373. linker to find them. The symdef entry is then compressed
  374. using the WBG (Whiz-Bang-Gizmo) algorithm.
  375. All files are processed in the order specified.
  376. .SH OPTIONS
  377. .IP -b
  378. Do not write `busy' to stdout while processing.
  379. .IP "-c config-file"
  380. Use the alternate system wide
  381. .I config-file
  382. instead of
  383. .IR /etc/foo.conf .
  384. This overrides any
  385. .B FOOCONF
  386. environment variable.
  387. .IP -a
  388. In addition to the baz segments, also parse the
  389. blurfl headers.
  390. .IP -r
  391. Recursive mode. Operates as fast as lightning
  392. at the expense of a megabyte of virtual memory.
  393. .SH FILES
  394. .I /etc/foo.conf
  395. .RS
  396. The system wide configuration file. See
  397. .BR foo (5)
  398. for further details.
  399. .RE
  400. .I ~/.foorc
  401. .RS
  402. Per user configuration file. See
  403. .BR foo (5)
  404. for further details.
  405. .SH ENVIRONMENT
  406. .IP FOOCONF
  407. If non-null the full pathname for an alternate system wide
  408. .IR foo.conf .
  409. Overridden by the
  410. .B -c
  411. option.
  412. .SH DIAGNOSTICS
  413. The following diagnostics may be issued on stderr:
  414.  
  415. Bad magic number.
  416. .RS
  417. The input file does not look like an archive file.
  418. .RE
  419. Old style baz segments.
  420. .RS
  421. .B foo
  422. can only handle new style baz segments. COBOL
  423. object libraries are not supported in this version.
  424. .SH BUGS
  425. The command name should have been chosen more carefully
  426. to reflect its purpose.
  427. .SH AUTHOR
  428. Jens Schweikhardt <schweikh@noc.dfn.de>
  429. .SH "SEE ALSO"
  430. .BR bar (1),
  431. .BR foo (5),
  432. .BR xyzzy (1)
  433.  
  434.    
  435.    
  436.    _3) How do I document several programs/functions in a single man page?_
  437.    
  438.    
  439.    Many programs (grep, egrep) and functions (printf, fprintf, ...) are
  440.    documented in a single man page. However, these man pages would be
  441.    quite useless if they were only accessible under one name. We can not
  442.    expect a user to remember that the egrep man page is actually the grep
  443.    man page. It is therefore necessary to have the man page available
  444.    under different names. You have several possibilities to achieve this:
  445.     1. have identical copies for each name.
  446.     2. connect all man pages using hard links.
  447.     3. symbolic links pointing to the actual man page.
  448.     4. use groff's `source' mechanism provided by the `.so' macro.
  449.        
  450.    
  451.    
  452.    The first way is obviously a waste of disk space. The second is not
  453.    recommended because intelligent versions of the catman program can
  454.    save a lot of work by looking at the the file type or contents. Hard
  455.    links will prevent catman from being clever. (catman's purpose is to
  456.    format all man pages so that they can be displayed more quickly.) The
  457.    third alternative has a slight drawback: if flexibility is a concern,
  458.    you have to be aware that there are file systems that do not support
  459.    symbolic links. The upshot of this is that the Best Thing (TM) is
  460.    using groff's source mechanism. Here's how to do it: If you want to
  461.    have your man page available under the names `foo' and `bar' in
  462.    section 1, then put the man page in foo.1 and have bar.1 look like
  463.    this:
  464.    
  465.    .so man1/foo.1
  466.    
  467.    It is important to specify the `man1/' directory part as well as the
  468.    file name `foo.1' because when groff is run by the browser it will
  469.    have the manual base directory as its current working directory (cwd)
  470.    and groff interprets .so arguments relative to the cwd.
  471.    
  472.    _4) Which macro package should I use? _
  473.    
  474.    There are a number of macro packages especially designed for use in
  475.    writing man pages. Usually they are in the groff macro directory
  476.    /usr/lib/groff/tmac. The file names are tmac.<something>, where
  477.    <something> is the argument to groff's -m option. Groff will use
  478.    tmac.<something> when it is given the `-m <something>' option. Often
  479.    the blank between `-m' and `<something>' is omitted so we may say
  480.    `groff -man' when we are formatting man pages using the tmac.an macro
  481.    package. That's the reason for the strange name `tmac.an'. Besides
  482.    tmac.an there is another popular macro package, tmac.doc, which
  483.    originated at the University of California at Berkeley. Many BSD man
  484.    pages use it and it seems that UCB has made it its standard for
  485.    documentation. The tmac.doc macros are much more flexible but alas,
  486.    there are manual browsers that will not use them but always call groff
  487.    -man. For example, all xman programs I have seen will screw up on man
  488.    pages requiring tmac.doc. So do yourself a favor: use tmac.an -- use
  489.    of any other macro package is considered harmful. tmac.andoc is a
  490.    pseudo macro package that takes a look at the source and then loads
  491.    either tmac.an or tmac.doc. Actually any man page browser should use
  492.    it but until now not all of them do, so it is best we cling to ye olde
  493.    tmac.an. Anything I tell you from now on and concerning macros only
  494.    holds true for tmac.an. If you want to use the tmac.doc macros anyway,
  495.    here is a pointer to detailed information on how to use them:
  496.    http://www.bsdi.com/bsdi-man There is a searchable index form on the
  497.    page. Enter mdoc.samples and it will find you mdoc.samples(7), a
  498.    tutorial sampler for writing BSD man pages.
  499.    
  500.    _5) What preprocessors may I use? _
  501.    
  502.    Groff comes with at least three preprocessors, tbl, eqn, and pic (on
  503.    some systems they are named gtbl, geqn and gpic.) Their purpose is to
  504.    translate preprocessor macros and their data to regular troff input.
  505.    Tbl is a table preprocessor, eqn is an equations/maths preprocessor
  506.    and pic is a picture preprocessor. Please refer to the man pages for
  507.    more information on what functionality they provide. To put it in a
  508.    nutshell: don't write man pages requiring ANY preprocessor. Eqn will
  509.    generally produce terrible output for typewriter-like devices,
  510.    unfortunately the type of device 99% of all man pages are viewed on.
  511.    For example, XAllocColor.3x uses a few formulas with exponentiation.
  512.    Due to the nature of typewriter-like devices the exponent will be on
  513.    the same line as the base. N to the power of two appears as `N2'. Tbl
  514.    should be avoided because all xman programs I have seen fail on them.
  515.    Xman 3.1.6 uses the following command to format man pages, e.g.
  516.    signal(7):
  517.    
  518.    gtbl /usr/man/man7/signal.7 | geqn | gtbl | groff -Tascii -man
  519.    /tmp/xmana01760 2> /dev/null
  520.    
  521.    which screws up for sources using gtbl, because gtbl output is fed
  522.    again into gtbl. The effect is a man page without your table. I don't
  523.    know if it's a bug or a feature that gtbl chokes on its own output or
  524.    if xman could be a little smarter not using gtbl twice... Anyway, if
  525.    you want a table, format it yourself and put it between .nf .fi lines
  526.    so that it will be left unformatted. You won't have bold and italics
  527.    this way but this beats having your table swallowed any day. I have
  528.    yet to see a man page requiring pic preprocessing. But I would not
  529.    like it. As you can see above, xman will not use it and groff will
  530.    certainly do the funky wadakiki on the input.
  531.    
  532.    _6) Should I distribute source and/or already formatted documentation?
  533.    _
  534.    
  535.    Let me give the pros (+) and cons (-) of a few selected possibilities:
  536.     1. Source only:
  537.        + smaller distribution package.
  538.        - inaccessible on systems without groff.
  539.     2. Uncompressed formatted only:
  540.        + accessible even on systems without groff.
  541.        - the user can't generate a dvi or postscript file.
  542.        - waste of disk space on systems that also handle compressed
  543.        pages.
  544.     3. Compressed formatted only:
  545.        + accessible even on systems without groff.
  546.        - the user can't generate a dvi or postscript file.
  547.        - which compression format would you use? .Z? .z? .gz? All of
  548.        them?
  549.     4. Source and uncompressed formatted:
  550.        + accessible even on systems without groff.
  551.        - larger distribution package
  552.        - some systems may expect compressed formatted man pages.
  553.        - redundant information on systems equipped with groff.
  554.        
  555.    
  556.    
  557.    IMHO it is best to distribute source only. The argument that it's
  558.    inaccessible on systems without groff does not matter. The 500+ man
  559.    pages of the Linux Documentation Project are source only. The man
  560.    pages of XFree86 are source only. The man pages from the FSF are
  561.    source only. In fact, I have rarely seen software distributed with
  562.    formatted man pages. If any sysadmin is really concerned about having
  563.    man pages accessible then he also has groff installed.
  564.    
  565.    _7) What are the font conventions? _
  566.    
  567.    First of all: don't use direct font operators like \fB \fP etc. Use
  568.    macros which take arguments. This way you avoid a common glitch:
  569.    forgetting the font change at the end of the word and having the bold
  570.    or italic extend up to the next font change. Believe me, it happens
  571.    more often than you think. The tmac.an macros provide the following
  572.    type faces:
  573.    
  574.        
  575.        .B Bold
  576.        
  577.        .BI Bold alternating with italics
  578.        
  579.        .BR Bold alternating with Roman
  580.        
  581.        .I Italics
  582.        
  583.        .IB Italics alternating with bold
  584.        
  585.        .IR Italics alternating with Roman
  586.        
  587.        .RB Roman alternating with bold
  588.        
  589.        .RI Roman alternating with italics
  590.        
  591.        .SM Small (scaled 9/10 of the regular size)
  592.        
  593.        .SB Small bold (NOT small alternating with bold)
  594.        
  595.    
  596.    
  597.    X alternating with Y means that the odd arguments are typeset in X
  598.    while the even arguments are typeset in Y. For example
  599.    
  600.        
  601.        .BI "Arg 1 is Bold, " "Arg 2 is Italics, " "and Bold, " "and
  602.        Italics."
  603.        
  604.    
  605.    
  606.    The double quotes are needed to include white space into an argument.
  607.    So much for what's available. Here's how you should make use of the
  608.    different typefaces: (portions shamelessly stolen from man(7))
  609.    
  610.    Although there are many arbitrary conventions for man pages in the
  611.    UNIX world, the existence of several hundred Linux-specific man pages
  612.    defines our standards: For functions, the arguments are always
  613.    specified using italics, even in the SYNOPSIS section, where the rest
  614.    of the function is specified in bold:
  615.    
  616.        
  617.        .BI "myfunction(int " argc ", char **" argv );
  618.        
  619.    
  620.    
  621.    Filenames are always in italics, except in the SYNOPSIS section, where
  622.    included files are in bold. So you should use
  623.    
  624.        
  625.        .I /usr/include/stdio.h
  626.        
  627.    
  628.    
  629.    and
  630.    
  631.        
  632.        .B #include <stdio.h>
  633.        
  634.    
  635.    
  636.    Special macros, which are usually in upper case, are in bold:
  637.    
  638.        
  639.        .B MAXINT
  640.        
  641.    
  642.    
  643.    When enumerating a list of error codes, the codes are in bold. This
  644.    list usually uses the .TP (paragraph with hanging tag) macro as
  645.    follows:
  646.    
  647.        
  648.        .TP
  649.        .B EBADF
  650.        .I fd is not a valid file descriptor.
  651.        .TP
  652.        .B EINVAL
  653.        .I fd is unsuitable for reading
  654.        
  655.    
  656.    
  657.    Any reference to another man page (or to the subject of the current
  658.    man page) is in bold. If the manual section number is given, it is
  659.    given in roman, without any spaces:
  660.    
  661.        
  662.        .BR man (7)
  663.        
  664.    
  665.    
  666.    Acronyms look best when typeset in small type face. So I recommend
  667.    
  668.        
  669.        .SM UNIX
  670.        
  671.        .SM ASCII
  672.        
  673.        .SM TAB
  674.        
  675.        .SM NFS
  676.        
  677.        .SM LALR(1)
  678.        
  679.    
  680.    
  681.    _8) Polishing your man page_
  682.    
  683.    Following are some guidelines that increase reliability, readability
  684.    and 'formatability' of your documentation.
  685.      * Test examples if they work (use cut and paste to give your shell
  686.        the exact wording from the man page) read output of your command
  687.        into your man page, don't type what you THINK your program will
  688.        print.
  689.      * Proof read, ispell, have someone else read it, especially if you
  690.        are not a native English speaker. The HOWTO you are reading by now
  691.        has not yet passed the latter test. Do you want to volunteer?
  692.      * Test your man page: Does groff complain when you format your man
  693.        page? It's nice to have the groff command line in a comment. Does
  694.        the man(1) command complain when you call `man yourprog'? Does the
  695.        way how man(1) uses the formatting system produce the expected
  696.        result? Will xman(1x) and tkman(1tk) cope with your manual?
  697.        XFree86 3.1 has xman 3.1.6 - X11R6, it will try to uncompress
  698.        using
  699.        gzip -c -d < %s > %s
  700.        zcat < %s > %s
  701.      * Will makewhatis(8) be able to extract the one-line description
  702.        from the NAME section?
  703.        
  704.    
  705.    
  706.    _9) How do I get a plain text man page without all that ^H^_ stuff? _
  707.    
  708.    Have a look at col(1), col can filter out backspace sequences. Just in
  709.    case you can't wait that long:
  710.    
  711.    funnyprompt$ groff -t -e -mandoc -Tascii manpage.1 | col -bx >
  712.    manpage.txt
  713.    
  714.    The -t and -e switches tell groff to preprocess using tbl and eqn.
  715.    This is overkill for man pages that don't require preprocessing but it
  716.    doesn't harm apart from a few CPU cycles wasted. On the other hand,
  717.    not using -t when it is actually required does harm: the table is
  718.    terribly formatted. You can even find out (well, "guess" is a better
  719.    word) what command is needed to format a certain groff document (not
  720.    just man pages) by issuing
  721.    
  722.    funnyprompt$ grog /usr/man/man7/signal.7 groff -t -man
  723.    /usr/man/man7/signal.7
  724.    
  725.    "Grog" stands for "GROff Guess", and it does what it says--guess, if
  726.    it were perfect we wouldn't need options any more. I've seen it guess
  727.    wrong on macro packages, but never on preprocessors. Here is a little
  728.    perl script I wrote that can delete the page headers and footers,
  729.    therefore saving you a few pages when printing long and elaborate man
  730.    pages. Save it in a file named strip-headers & chmod 755.
  731.     #!/usr/bin/perl -wn
  732.     #  make it slurp the whole file at once:
  733.     undef $/;
  734.     #  delete first header:
  735.     s/^\n*.*\n+//;
  736.     #  delete last footer:
  737.     s/\n+.*\n+$/\n/g;
  738.     #  delete page breaks:
  739.     s/\n\n+[^ \t].*\n\n+(\S+).*\1\n\n+/\n/g;
  740.     #  collapse two or more blank lines into a single one:
  741.     s/\n{3,}/\n\n/g;
  742.     #  see what's left...
  743.     print;
  744.  
  745.    
  746.    
  747.    You have to use it as the first filter after the 'man' command as it
  748.    relies on the number of newlines being output by groff. For example:
  749.    
  750.    funnyprompt$ man bash | strip-headers | col -bx > bash.txt
  751.    
  752.    _10) How do I get a high quality PostScript man page? _
  753.    
  754.    funnyprompt$ groff -t -e -mandoc -Tps manpage.1 > manpage.ps
  755.    
  756.    Print that using your favorite PostScript printer/interpreter. See
  757.    question 9) for explanation of options.
  758.    
  759.    _11) How do I get `apropos' and `whatis' to work? _
  760.    
  761.    Suppose you wonder what compilers are installed on your system and how
  762.    these can be invoked. To answer this (frequently asked) question you
  763.    say
  764.    
  765.    funnyprompt$ apropos compiler
  766.    f77 (1) - Fortran 77 compiler
  767.    gcc (1) - GNU C and C++ compiler
  768.    pc (1) - Pascal compiler
  769.    
  770.    Apropos and whatis are used to give a quick response which man page
  771.    has information on a certain topic. Both programs search a number of
  772.    files named `whatis' that may be found in each of the manual base
  773.    directories. Like I said before, the whatis data base files contain a
  774.    one line entry for any man page in the respective directory tree. In
  775.    fact, that line is exactly the NAME section (to be precise: joined on
  776.    one line and with hyphenation removed, also note that the section is
  777.    mentioned within parentheses). The whatis data base files are created
  778.    with the makewhatis(8) program. There are several versions around, so
  779.    please refer to the man page what options are available. In order for
  780.    makewhatis to be able to extract the NAME sections correctly it is
  781.    important that you, the manual writer, adhere to the NAME section
  782.    format described under question 2). The difference between apropos and
  783.    whatis is where in the line and what they are looking for. Apropos
  784.    (which is equivalent to man -k) searches the argument string anywhere
  785.    on the line whereas whatis (equivalent to man -f) tries to match a
  786.    complete command name only on the part before the dash. Consequently,
  787.    `whatis cc' will report if there is a cc manual and remain quiet for
  788.    gcc.
  789.    
  790.    Corrections and suggestions welcome!
  791.    
  792.    _A) Copying conditions _
  793.    
  794.    Copyright 1995,96,97 by Jens Schweikhardt <schweikh@noc.dfn.de>
  795.    
  796.    Voice: ++49 7151 909516
  797.    
  798.    Unless otherwise stated, Linux HOWTO documents are copyrighted by
  799.    their respective authors. Linux HOWTO documents may be reproduced and
  800.    distributed in whole or in part, in any medium physical or electronic,
  801.    as long as this copyright notice is retained on all copies. Commercial
  802.    redistribution is allowed and encouraged; however, the author would
  803.    like to be notified of any such distributions. All translations,
  804.    derivative works, or aggregate works incorporating any Linux HOWTO
  805.    documents must be covered under this copyright notice. That is, you
  806.    may not produce a derivative work from a HOWTO and impose additional
  807.    restrictions on its distribution. Exceptions to these rules may be
  808.    granted under certain conditions; please contact the Linux HOWTO
  809.    coordinator at the address given below. In short, we wish to promote
  810.    dissemination of this information through as many channels as
  811.    possible. However, we do wish to retain copyright on the HOWTO
  812.    documents, and would like to be notified of any plans to redistribute
  813.    the HOWTOs. If you have questions, please contact Greg Hankins, the
  814.    Linux HOWTO coordinator, at gregh@sunsite.unc.edu via email.
  815.