1 Overview of Texinfo
*********************

Texinfo(1)  is a documentation system that uses a single
source file to produce both online information and printed output.  This
means that instead of writing two different documents, one for the
online information and the other for a printed work, you need write only
one document.  Therefore, when the work is revised, you need revise only
that one document.

* Reporting Bugs::              Submitting effective bug reports.
* Using Texinfo::               Create printed or online output.
* Info Files::                  What is an Info file?
* Printed Books::               Characteristics of a printed book or manual.
* Formatting Commands::         @-commands are used for formatting.
* Conventions::                 General rules for writing a Texinfo file.
* Comments::                    Writing comments and ignored text in general.
* Minimum::                     What a Texinfo file must have.
* Six Parts::                   Usually, a Texinfo file has six parts.
* Short Sample::                A short sample Texinfo file.
* History::                     Acknowledgements, contributors and genesis.


1.1 Reporting Bugs
==================

We welcome bug reports and suggestions for any aspect of the Texinfo system,
programs, documentation, installation, anything.  Please email them to
<mailto:bug-texinfo@gnu.org>.  You can get the latest version of Texinfo
from <ftp://ftp.gnu.org/gnu/texinfo/> and its mirrors worldwide.

For bug reports, please include enough information for the maintainers
to reproduce the problem.  Generally speaking, that means:

* the version number of Texinfo and the program(s) or manual(s) involved.
* hardware and operating system names and versions.
* the contents of any input files necessary to reproduce the bug.
* a description of the problem and samples of any erroneous output.
* any unusual options you gave to configure.
* anything else that you think would be helpful.

When in doubt whether something is needed or not, include it.  It's
better to include too much than to leave out something important.

Patches are most welcome; if possible, please make them with
`diff -c' (see Overview in Comparing and Merging Files) and include `ChangeLog' entries (see Change Log in The GNU Emacs Manual).

When sending patches, if possible please do not encode or split them in
any way; it's much easier to deal with one plain text message, however
large, than many small ones.  GNU shar <ftp://ftp.gnu.org/gnu/sharutils/> is a convenient way of packaging multiple and/or binary files
for email.


1.2 Using Texinfo
=================


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, online Info file with nodes, menus, cross references, and
indices.  You can also create from that same source file an HTML output
file suitable for use with a web browser, or an XML file.  The GNU
Emacs Manual is a good example of a Texinfo file, as is this manual.

To make a printed document, you process a Texinfo source file with the
TeX typesetting program (but the Texinfo language is very different
and much stricter than TeX's usual language, plain TeX).  This
creates a DVI file that you can typeset and print as a book or report
(see Hardcopy).

To output an Info file, process your Texinfo source with the
makeinfo utility or Emacs's texinfo-format-buffer command.
You can install the result in your Info tree (see Installing an Info File).

To output an HTML file, run makeinfo --html on your Texinfo
source.  You can (for example) install the result on your web site.

To output an XML file, run makeinfo --xml on your Texinfo source.
To output DocBook (a particular form of XML), run makeinfo
--docbook.  If you want to convert from Docbook to Texinfo,
please see <http://docbook2X.sourceforge.net/>.

If you are a programmer and would like to contribute to the GNU project
by implementing additional output formats for Texinfo, that would be
excellent.  But please do not write a separate translator texi2foo for
your favorite format foo!  That is the hard way to do the job, and makes
extra work in subsequent maintenance, since the Texinfo language is
continually being enhanced and updated.  Instead, the best approach is
modify makeinfo to generate the new format, as it does now for
Info, plain text, HTML, XML, and DocBook.

TeX works with virtually all printers; Info works with virtually all
computer terminals; the HTML output works with virtually all web
browsers.  Thus Texinfo can be used by almost any computer user.

A Texinfo source file is a plain ASCII file containing text and
@-commands (words preceded by an `@') that tell the
typesetting and formatting programs what to do.  You may edit a Texinfo
file with any text editor; but it is especially convenient to use GNU
Emacs since that editor has a special mode, called Texinfo mode, that
provides various Texinfo-related features.  (See Texinfo Mode.)

Before writing a Texinfo source file, you should learn about nodes,
menus, cross references, and the rest, for example by reading this
manual.

You can use Texinfo to create both online help and printed manuals;
moreover, Texinfo is freely redistributable.  For these reasons, Texinfo
is the official documentation format of the GNU project.  More
information is available at the GNU documentation web page <http://www.gnu.org/doc/>.

From time to time, proposals are made to generate traditional Unix man
pages from Texinfo source.  This is not likely to ever be supported,
because man pages have a very strict conventional format.  Merely
enhancing makeinfo to output troff format would be
insufficient.  Generating a good man page therefore requires a
completely different source than the typical Texinfo applications of
writing a good user tutorial or a good reference manual.  This makes
generating man pages incompatible with the Texinfo design goal of not
having to document the same information in different ways for different
output formats.  You might as well just write the man page directly.

Man pages still have their place, and if you wish to support them, the
program help2man may be useful; it generates a traditional man
page from the `--help' output of a program.  In fact, this is
currently used to generate man pages for the Texinfo programs
themselves.  It is GNU software written by Brendan O'Dea, available from
<ftp://ftp.gnu.org/gnu/help2man/>.


1.3 Info files
==============

An Info file is a Texinfo file formatted so that the Info documentation
reading program can operate on it.  (makeinfo
and texinfo-format-buffer are two commands that convert a Texinfo file
into an Info file.)

Info files are divided into pieces called nodes, each of which
contains the discussion of one topic.  Each node has a name, and
contains both text for the user to read and pointers to other nodes,
which are identified by their names.  The Info program displays one node
at a time, and provides commands with which the user can move to other
related nodes.

See (info)info, for more information about using Info.

Each node of an Info file may have any number of child nodes that
describe subtopics of the node's topic.  The names of child
nodes are listed in a menu within the parent node; this
allows you to use certain Info commands to move to one of the child
nodes.  Generally, an Info file is organized like a book.  If a node
is at the logical level of a chapter, its child nodes are at the level
of sections; likewise, the child nodes of sections are at the level
of subsections.

All the children of any one parent are linked together in a
bidirectional chain of `Next' and `Previous' pointers.  The `Next'
pointer provides a link to the next section, and the `Previous' pointer
provides a link to the previous section.  This means that all the nodes
that are at the level of sections within a chapter are linked together.
Normally the order in this chain is the same as the order of the
children in the parent's menu.  Each child node records the parent node
name as its `Up' pointer.  The last child has no `Next' pointer, and the
first child has the parent both as its `Previous' and as its `Up'
pointer.(2)

The book-like structuring of an Info file into nodes that correspond
to chapters, sections, and the like is a matter of convention, not a
requirement.  The `Up', `Previous', and `Next' pointers of a node can
point to any other nodes, and a menu can contain any other nodes.
Thus, the node structure can be any directed graph.  But it is usually
more comprehensible to follow a structure that corresponds to the
structure of chapters and sections in a printed book or report.

In addition to menus and to `Next', `Previous', and `Up' pointers, Info
provides pointers of another kind, called references, that can be
sprinkled throughout the text.  This is usually the best way to
represent links that do not fit a hierarchical structure.

Usually, you will design a document so that its nodes match the
structure of chapters and sections in the printed output.  But
occasionally there are times when this is not right for the material
being discussed.  Therefore, Texinfo uses separate commands to specify
the node structure for the Info file and the section structure for the
printed output.

Generally, you enter an Info file through a node that by convention is
named `Top'.  This node normally contains just a brief summary of the
file's purpose, and a large menu through which the rest of the file is
reached.  From this node, you can either traverse the file
systematically by going from node to node, or you can go to a specific
node listed in the main menu, or you can search the index menus and then
go directly to the node that has the information you want.  Alternatively,
with the standalone Info program, you can specify specific menu items on
the command line (see Top in Info).

If you want to read through an Info file in sequence, as if it were a
printed manual, you can hit <SPC> repeatedly, or you get the whole
file with the advanced Info command g *.  (See (info)Advanced Info commands.)

The `dir' file in the `info' directory serves as the
departure point for the whole Info system.  From it, you can reach the
`Top' nodes of each of the documents in a complete Info system.

If you wish to refer to an Info file in a URI, you can use the
(unofficial) syntax exemplified in the following.  This works with
Emacs/W3, for example:
info:///usr/info/emacs#Dissociated%20Press
info:emacs#Dissociated%20Press
info://localhost/usr/info/emacs#Dissociated%20Press

The info program itself does not follow URI's of any kind.


1.4 Printed Books
=================

A Texinfo file can be formatted and typeset as a printed book or manual.
To do this, you need TeX, a powerful, sophisticated typesetting
program written by Donald Knuth.(3)

A Texinfo-based book is similar to any other typeset, printed work: it
can have a title page, copyright page, table of contents, and preface,
as well as chapters, numbered or unnumbered sections and subsections,
page headers, cross references, footnotes, and indices.

You can use Texinfo to write a book without ever having the intention
of converting it into online information.  You can use Texinfo for
writing a printed novel, and even to write a printed memo, although
this latter application is not recommended since electronic mail is so
much easier.

TeX is a general purpose typesetting program.  Texinfo provides a
file `texinfo.tex' that contains information (definitions or
macros) that TeX uses when it typesets a Texinfo file.
(`texinfo.tex' tells TeX how to convert the Texinfo @-commands
to TeX commands, which TeX can then process to create the typeset
document.)  `texinfo.tex' contains the specifications for printing
a document.  You can get the latest version of `texinfo.tex' from
<ftp://ftp.gnu.org/gnu/texinfo.tex>.

In the United States, documents are most often printed on 8.5 inch by 11
inch pages (216mm by 280mm); this is the default size.  But
you can also print for 7 inch by 9.25 inch pages (178mm by
235mm, the @smallbook size; or on A4 or A5 size paper
(@afourpaper, @afivepaper).  (See Printing "Small" Books.  Also, see Printing on A4 Paper.)

By changing the parameters in `texinfo.tex', you can change the
size of the printed document.  In addition, you can change the style in
which the printed document is formatted; for example, you can change the
sizes and fonts used, the amount of indentation for each paragraph, the
degree to which words are hyphenated, and the like.  By changing the
specifications, you can make a book look dignified, old and serious, or
light-hearted, young and cheery.

TeX is freely distributable.  It is written in a superset of Pascal
called WEB and can be compiled either in Pascal or (by using a
conversion program that comes with the TeX distribution) in C.
(See TeX Mode in The GNU Emacs Manual, for information
about TeX.)

TeX is very powerful and has a great many features.  Because a
Texinfo file must be able to present information both on a
character-only terminal in Info form and in a typeset book, the
formatting commands that Texinfo supports are necessarily limited.

To get a copy of TeX, see
How to Obtain TeX.


1.5 @-commands
==============

In a Texinfo file, the commands that tell TeX how to typeset the
printed manual and tell makeinfo and
texinfo-format-buffer how to create an Info file are preceded
by `@'; they are called @-commands.  For example,
@node is the command to indicate a node and @chapter
is the command to indicate the start of a chapter.

Please note: All the @-commands, with the exception of the
@TeX{} command, must be written entirely in lower case.

The Texinfo @-commands are a strictly limited set of constructs.  The
strict limits make it possible for Texinfo files to be understood both
by TeX and by the code that converts them into Info files.  You can
display Info files on any terminal that displays alphabetic and
numeric characters.  Similarly, you can print the output generated by
TeX on a wide variety of printers.

Depending on what they do or what arguments(4) they take, you
need to write @-commands on lines of their own or as part of
sentences:

* Write a command such as @noindent at the beginning of a line as
the only text on the line.  (@noindent prevents the beginning of
the next line from being indented as the beginning of a
paragraph.)

* Write a command such as @chapter at the beginning of a line
followed by the command's arguments, in this case the chapter title, on
the rest of the line.  (@chapter creates chapter titles.)

* Write a command such as @dots{} wherever you wish but usually
within a sentence. (@dots{} creates dots ...)

* Write a command such as @code{sample-code} wherever you
wish (but usually within a sentence) with its argument,
sample-code in this example, between the braces.  (@code
marks text as being code.)

* Write a command such as @example on a line of its own; write the
body-text on following lines; and write the matching @end
command, @end example in this case, at the on a line of its own
after the body-text. (@example ... @end example
indents and typesets body-text as an example.)  It's usually ok to
indent environment commands like this, but in complicated and
hard-to-define circumstances the extra spaces cause extra space to
appear in the output, so beware.

As a general rule, a command requires braces if it mingles among other
text; but it does not need braces if it starts a line of its own.  The
non-alphabetic commands, such as @:, are exceptions to the rule;
they do not need braces.

As you gain experience with Texinfo, you will rapidly learn how to
write the different commands: the different ways to write commands
make it easier to write and read Texinfo files than if all commands
followed exactly the same syntax.  (For details about @-command
syntax, see @-Command Syntax.)


1.6 General Syntactic Conventions
=================================

This section describes the general conventions used in all Texinfo documents.

* All printable ASCII characters except `@', `{' and
`}' can appear in a Texinfo file and stand for themselves.
`@' is the escape character which introduces commands, while
`{' and `}' are used to surround arguments to certain
commands.  To put one of these special characters into the document, put
an `@' character in front of it, like this: `@@',
`@{', and `@}'.

* It is customary in TeX to use doubled single-quote characters to
begin and end quotations: ``...''.  This
convention should be followed in Texinfo files.  TeX converts
two single quotes to left- and right-hand doubled
quotation marks, 
and Info converts doubled single-quote characters to ASCII
double-quotes: ``...'' becomes "...".

* Use three hyphens in a row, `---', for a dash--like this.  In
TeX, a single or double hyphen produces a printed dash that is
shorter than the usual typeset dash. Info reduces three hyphens to two
for display on the screen.

* To prevent a paragraph from being indented in the printed manual, put
the command @noindent on a line by itself before the
paragraph.

* If you mark off a region of the Texinfo file with the @iftex
and @end iftex commands, that region will appear only in
the printed copy; in that region, you can use certain commands
borrowed from plain TeX that you cannot use in Info.  Conversely,
text surrounded by @ifnottex and @end ifnottex will
appear in all output formats except TeX.

Each of the other output formats (html, info,
plaintext) have an analogous pair of commands.  See Conditionals.

Caution: Do not use tab characters in a Texinfo file (except in
verbatim modes)!  TeX uses variable-width fonts, which means that it
is impractical at best to define a tab to work in all circumstances.
Consequently, TeX treats tabs like single spaces, and that is not
what they look like.  Furthermore, makeinfo does nothing special
with tabs, and thus a tab character in your input file may appear
differently in the output, for example, in indented text.

To avoid this problem, Texinfo mode causes GNU Emacs to insert multiple
spaces when you press the <TAB> key.

Also, you can run untabify in Emacs to convert tabs in a region
to multiple spaces.


1.7 Comments
============


You can write comments in a Texinfo file that will not appear in
either the Info file or the printed manual by using the
@comment command (which may be abbreviated to @c).
Such comments are for the person who revises the Texinfo file.  All the
text on a line that follows either @comment or @c is a
comment; the rest of the line does not appear in either the Info file
or the printed manual.

Often, you can write the @comment or @c in the middle of
a line, and only the text that follows after the @comment or
@c command does not appear; but some commands, such as
@settitle and @setfilename, work on a whole line.  You
cannot use @comment or @c in a line beginning with such
a command.

You can write long stretches of text that will not appear in either
the Info file or the printed manual by using the @ignore and
@end ignore commands.  Write each of these commands on a line
of its own, starting each command at the beginning of the line.  Text
between these two commands does not appear in the processed output.
You can use @ignore and @end ignore for writing
comments.

Text enclosed by @ignore or by failing @ifset or
@ifclear conditions is ignored in the sense that it will not
contribute to the formatted output.  However, TeX and makeinfo must
still parse the ignored text, in order to understand when to stop
ignoring text from the source file; that means that you may still get
error messages if you have invalid Texinfo commands within ignored text.


1.8 What a Texinfo File Must Have
=================================

By convention, the namea of a Texinfo file ends with (in order of
preference) one of the extensions `.texinfo', `.texi',
`.txi', or `.tex'.  The longer extensions are preferred since
they describe more clearly to a human reader the nature of the file.
The shorter extensions are for operating systems that cannot handle long
file names.

In order to be made into a printed manual and an Info file, a Texinfo
file must begin with lines like this:

\input texinfo
@setfilename info-file-name
@settitle name-of-manual

The contents of the file follow this beginning, and then you
must end a Texinfo file with a line like this:

@bye

Here's an explanation:

* The `\input texinfo' line tells TeX to use the
`texinfo.tex' file, which tells TeX how to translate the Texinfo
@-commands into TeX typesetting commands.  (Note the use of the
backslash, `\'; this is correct for TeX.)

* The @setfilename line provides a name for the Info file and
tells TeX to open auxiliary files.  All text before
@setfilename is ignored!

* The @settitle line specifies a title for the page headers (or
footers) of the printed manual, and the default document description for
the `<head>' in HTML format.  Strictly speaking, @settitle
is optional--if you don't mind your document being titled `Untitled'.

* The @bye line at the end of the file on a line of its own tells
the formatters that the file is ended and to stop formatting.


Typically, you will not use quite such a spare format, but will include
mode setting and start-of-header and end-of-header lines at the
beginning of a Texinfo file, like this:

\input texinfo   @c -*-texinfo-*-
@c %**start of header
@setfilename info-file-name
@settitle name-of-manual
@c %**end of header

In the first line, `-*-texinfo-*-' causes Emacs to switch into
Texinfo mode when you edit the file.

The @c lines which surround the @setfilename and
@settitle lines are optional, but you need them in order to
run TeX or Info on just part of the file.  (See Start of Header.)

Furthermore, you will usually provide a Texinfo file with a title page,
indices, and the like, all of which are explained in this manual.  But
the minimum, which can be useful for short documents, is just the three
lines at the beginning and the one line at the end.


1.9 Six Parts of a Texinfo File
===============================

Generally, a Texinfo file contains more than the minimal beginning and
end described in the previous section--it usually contains the six
parts listed below.  These are described fully in the following sections.

1. Header
The Header names the file, tells TeX which definitions file to
use, and other such housekeeping tasks.

2. Summary and Copyright
The Summary and Copyright segment describes the document and
contains the copyright notice and copying permissions.  This is done
with the @copying command.

3. Title and Copyright
The Title and Copyright segment contains the title and copyright
pages for the printed manual.  The segment must be enclosed between
@titlepage and @end titlepage commands.  The title and
copyright page appear only in the printed manual.

4. `Top' Node and Master Menu
The `Top' node starts off the online output; it does not appear in the
printed manual.  We recommend including the copying permissions here as
well as the segments above.  And it contains at least a top-level menu
listing the chapters, and possibly a Master Menu listing all the
nodes in the entire document.

5. Body
The Body of the document is typically structured like a
traditional book or encyclopedia, but it may be free form.

6. End
The End segment contains commands for printing indices and
generating the table of contents, and the @bye command on a line
of its own.


1.10 A Short Sample Texinfo File
================================

Here is a very short but complete Texinfo file, in the six conventional
parts enumerated in the previous section, so you can see how Texinfo
source appears in practice.  The first three parts of the file, from
`\input texinfo' through to `@end titlepage', look more
intimidating than they are: most of the material is standard
boilerplate; when writing a manual, you simply change the names as
appropriate.

See Beginning a File, for full documentation on the commands listed
here.  See GNU Sample Texts, for the full texts to be used in GNU manuals.

In the following, the sample text is indented; comments on it are
not.  The complete file, without interspersed comments, is shown in
Short Sample Texinfo File.

Part 1: Header
--------------

The header does not appear in either the Info file or the
printed output.  It sets various parameters, including the
name of the Info file and the title used in the header.

\input texinfo   @c -*-texinfo-*-
@c %**start of header
@setfilename sample.info
@settitle Sample Manual 1.0
@c %**end of header

Part 2: Summary Description and Copyright
-----------------------------------------

A real manual includes more text here, according to the license under
which it is distributed.  See GNU Sample Texts.

@copying
This is a short example of a complete Texinfo file, version 1.0.

Copyright @copyright{} 2002 Free Software Foundation, Inc.
@end copying

Part 3: Titlepage, Contents, Copyright
--------------------------------------

The titlepage segment does not appear in the online output, only in the
printed manual.  We use the @insertcopying command to
include the permission text from the previous section, instead of
writing it out again; it is output on the back of the title page.  The
@contents command generates a table of contents.

@titlepage
@title Sample Title

@c The following two commands start the copyright page.
@page
@vskip 0pt plus 1filll
@insertcopying
@end titlepage

@c Output the table of contents at the beginning.
@contents

Part 4: `Top' Node and Master Menu
----------------------------------

The `Top' node contains the master menu for the Info file.  Since a
printed manual uses a table of contents rather than a menu, the master
menu appears only in online output.  We also include the copying text
again for the benefit of online readers.  And since the copying text
begins with a brief description of the manual, no other text is needed.

@ifnottex
@node Top
@end ifnottex

@insertcopying

@menu
* First Chapter::    The first chapter is the
                       only chapter in this sample.
* Index::            Complete index.
@end menu


Part 5: The Body of the Document
--------------------------------

The body segment contains all the text of the document, but not the
indices or table of contents.  This example illustrates a node and a
chapter containing an enumerated list.

@node First Chapter
@chapter First Chapter

@cindex chapter, first

This is the first chapter.
@cindex index entry, another

Here is a numbered list.

@enumerate
@item
This is the first item.

@item
This is the second item.
@end enumerate


Part 6: The End of the Document
-------------------------------

The end segment contains commands for generating an index in a node and
unnumbered chapter of its own, and the @bye command that marks
the end of the document.

@node Index
@unnumbered Index

@printindex cp

@bye


Some Results
------------

Here is what the contents of the first chapter of the sample look like:


This is the first chapter.

Here is a numbered list.

1. This is the first item.

2. This is the second item.


1.11 History
============

Richard M. Stallman invented the Texinfo format, wrote the initial
processors, and created Edition 1.0 of this manual.  Robert J.
Chassell greatly revised and extended the manual, starting with Edition
1.1.  Brian Fox was responsible for the standalone Texinfo distribution
until version 3.8, and wrote the standalone makeinfo and
info programs.  Karl Berry has continued maintenance since
Texinfo 3.8 (manual edition 2.22).

Our thanks go out to all who helped improve this work, particularly the
indefatigable Eli Zaretskii and Andreas Schwab, who have provided
patches beyond counting.  Franc,ois Pinard and David D. Zuhn,
tirelessly recorded and reported mistakes and obscurities.  Zack
Weinberg did the impossible by implementing the macro syntax in
`texinfo.tex'.  Special thanks go to Melissa Weisshaus for her
frequent reviews of nearly similar editions.  Dozens of others have
contributed patches and suggestions, they are gratefully acknowledged in
the `ChangeLog' file.  Our mistakes are our own.

A bit of history: in the 1970's at CMU, Brian Reid developed a program
and format named Scribe to mark up documents for printing.  It used the
@ character to introduce commands, as Texinfo does.  Much more
consequentially, it strived to describe document contents rather than
formatting, an idea wholeheartedly adopted by Texinfo.

Meanwhile, people at MIT developed another, not too dissimilar format
called Bolio.  This then was converted to using TeX as its typesetting
language: BoTeX.  The earliest BoTeX version seems to have been
0.02 on October 31, 1984.

BoTeX could only be used as a markup language for documents to be
printed, not for online documents.  Richard Stallman (RMS) worked on
both Bolio and BoTeX.  He also developed a nifty on-line help format
called Info, and then combined BoTeX and Info to create Texinfo, a
mark up language for text that is intended to be read both online and
as printed hard copy.


