Getting Started with Texinfo
============================

"Texinfo" is a documentation system that uses a single source file to
produce both on-line information and printed output.  Using Texinfo,
you can create a printed document with the normal features of a book,
including chapters, sections, cross references, and indices.  From the
same Texinfo source file, you can create a menu-driven, on-line Info
file with nodes, menus, cross references, and indices.
  
The name of the Texinfo source documentation file is `texinfo.txi'.
You can produce both on-line information and printed output from this
source file.  The documentation describes Texinfo in detail, including
how to write Texinfo files, how to format them for both hard copy and
Info, and how to install Info files.

To get started, you need to create either a printed manual or an
on-line Info file from the `texinfo.txi' file.  You do not need to
create both, although you will probably want both eventually.

To learn how to use Info, read the info documentation.  You can do this in
one of two ways: using the standalone `info' program, or using Info mode in
GNU Emacs.

  * If you want to use the `info' program, run

         info -f info-stnd

  * If you want to use Emacs, start up emacs and type `C-h i' [M-x info].
    Follow the instructions to learn how to use Info.

After learning how to use Info, you can read the Texinfo documentation.
Using the standalone `info', type the following at the shell prompt:

         info -f texinfo

To use read this manual in Emacs, you first need to edit the Info-directory
menu (the file `dir' in the system info directory) to contain the
appropriate node.  To learn how to do this, see node: Add in the Info
documentation.

The Texinfo documentation describes Texinfo in detail; among other things,
it tells how to install Info files in the usual manner.  (See node: Install
an Info File.)

The `info-stnd.info' file describes the standalone Info reader in detail.  To
read this file, type

         $ info -f info-stnd

If you are using GNU Emacs, you may want to install the Emacs Lisp files
permanently.  Move them to a directory in the load-path for Emacs;
otherwise Emacs will not be able to load the autoloaded support files, such
as `texinfmt.el'.

The `texinfo.el' file contains the autoload commands; it is the only
file that needs to be loaded initially.  If your Emacs does not
automatically load `texinfo.el', you can tell it to do so by placing
the following in `default.el' or in your `.emacs' file:

         (load "texinfo")


To create a printed manual
==========================

You need:

  * The `tex' program, which typesets the manual using TeX.
  * The `texinfo.tex' definition file that tells TeX how to typeset
    a Texinfo file.
  * The `texindex' program, which sorts the unsorted index files
    created by TeX.
  * A printing program such as `lp' or `lpr',
  * A printer.

This Texinfo distribution package contains `texinfo.tex', the C source
for `texindex', and the handy shell script `texi2dvi'.  The `tex'
program is not part of this distribution, but is available separately.
(See `How to Obtain TeX' in the Texinfo documentation.)

  * Install `tex'.  (`texindex' is installed automagically by 
    `make install' in this distribution.)

  * Move the `texinfo.tex' file to an appropriate directory; the current
    directory will do.  (`/usr/local/lib/tex/inputs' might be a good place.
    See ``Preparing to Use TeX'' in the Texinfo manual, for more
    information.)

After following those instructions, type the following to make the .dvi
files:

      $ make texinfo.dvi
      $ (cd info; make info.dvi info-stnd.dvi)
      $ (cd makeinfo; make makeinfo.dvi)

You can then print the resulting .dvi files with the `lpr' command (on BSD
systems.  On SysV systems the command is `lp'.  Consult your man pages for
more information). 

For example, the command to print the texinfo.dvi file might be:

      $ lpr -d texinfo.dvi

The name of the printing command depends on the system; `lpr -d' is
common, and is illustrated here.  You may use a different name for the
printing command.

Please report bugs to bug-texinfo@gnu.org.

Happy formatting.
