# 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

We welcome bug reports or suggestions for the Texinfo system, both programs and documentation. Please email them to 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, operating system, and compiler versions.
• any unusual options you gave to @command{configure}.
• the contents of any input files necessary to reproduce the bug.
• a description of the problem and samples of any erroneous output.
• 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 section `Overview' in Comparing and Merging Files) and include `ChangeLog' entries (see section `Change Log' in The GNU Emacs Manual).

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

## 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. 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 from TeX's usual language, plain TeX). This creates a DVI file that you can typeset and print as a book or report (see section Formatting and Printing 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 section Installing an Info File).

To output an HTML file, process your Texinfo source with `makeinfo` using the `--html' option. You can (for example) install the result on your web site.

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 and HTML.

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 section Using 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.

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 @command{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 generating a good user manual 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.

If you wish to support man pages, the program @command{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 free software written by Brendan O'Dea, available from http://www.ozemail.com.au/~bod/help2man.tar.gz.

## 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.

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 section `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 file `info', node `Expert'.)

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 @command{info} program itself does not follow URI's of any kind.

## 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.

Most often, documents are 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 European A4 size paper (`@afourpaper`). (See section Printing "Small" Books. Also, see section 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 section `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 section How to Obtain TeX.

## @-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 section @-Command Syntax.)

## 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. `{' and `}' should be used only 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: " and " . This convention should be followed in Texinfo files. TeX converts doubled single-quote characters to left- and right-hand doubled quotation marks, "like this", and Info converts doubled single-quote characters to ASCII double-quotes: " and " to " .
• 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. Likewise, if you mark off a region with the `@ifinfo` and `@end ifinfo` commands, that region will appear only in the Info file; in that region, you can use Info commands that you cannot use in TeX. Similarly for `@ifhtml ... @end ifhtml`, `@ifnothtml ... @end ifnothtml`, `@ifnotinfo ... @end ifnotinfo`, `@ifnottex ... @end ifnottex`. See section Conditionally Visible Text.

Caution: Do not use tabs in a Texinfo file! TeX uses variable-width fonts, which means that it cannot predefine 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.

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.

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. Often, `@ignore` and `@end ignore` is used to enclose a part of the copying permissions that applies to the Texinfo source file of a document, but not to the Info or printed version of the document.

## What a Texinfo File Must Have

By convention, the names of Texinfo files end with one of the extensions `.texinfo', `.texi', `.txi', or `.tex'. The longer extension is preferred since it describes 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
```

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. The `@settitle' line specifies a title for the page headers (or footers) of the printed manual.

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.

Usually, 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-*-
@setfilename info-file-name
@settitle name-of-manual
```

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 section Start of Header, for more information.)

Furthermore, you will usually provide a Texinfo file with a title page, indices, and the like. 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.

## Six Parts of a Texinfo File

Generally, a Texinfo file contains more than the minimal beginning and end--it usually contains six parts:

The Header names the file, tells TeX which definitions' file to use, and performs other "housekeeping" tasks.
The Summary Description and Copyright segment describes the document and contains the copyright notice and copying permissions for the Info file. The segment must be enclosed between `@ifinfo` and `@end ifinfo` commands so that the formatters place it only in the Info file.
The Title and Copyright segment contains the title and copyright pages and copying permissions 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 Master Menu contains a complete menu of all the nodes in the whole Info file. It appears only in the Info file, in the `Top' node.
5. Body
The Body of the document may be structured like a traditional book or encyclopedia or it may be free form.
6. End
The End contains commands for printing indices and generating the table of contents, and the `@bye` command on a line of its own.

## A Short Sample Texinfo File

Here is a complete but very short Texinfo file, in six parts. 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 you write a manual, simply insert the names for your own manual in this segment. (See section Beginning a Texinfo File.)

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

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-*-
@setfilename sample.info
@settitle Sample Document
@setchapternewpage odd
```

### Part 2: Summary Description and Copyright

The summary description and copyright segment does not appear in the printed document.

```@ifinfo
This is a short example of a complete Texinfo file.

@end ifinfo
```

### Part 3: Titlepage and Copyright

The titlepage segment does not appear in the Info file.

```@titlepage
@sp 10
@comment The title is printed in a large font.
@center @titlefont{Sample Title}

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

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

```@node    Top,       First Chapter, ,         (dir)
@comment node-name, next,          previous, up
```
```@menu
* First Chapter::    The first chapter is the
only chapter in this sample.
* Concept Index::    This index has two entries.
```

### 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, Concept Index, Top,      Top
@comment node-name,     next,          previous, up
@chapter First Chapter
@cindex Sample index entry

This is the contents of the first chapter.
@cindex Another sample index entry

Here is a numbered list.

@enumerate
@item
This is the first item.

@item
This is the second item.
@end enumerate

The @code{makeinfo} and @code{texinfo-format-buffer}
commands transform a Texinfo file such as this into
an Info file; and @TeX{} typesets it for a printed
manual.
```

### 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, (usually) for generating the table of contents, and the `@bye` command that marks the end of the document.

```@node    Concept Index,    ,  First Chapter, Top
@unnumbered Concept Index

@printindex cp

@contents
@bye
```

### The Results

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

This is the contents of the first chapter.

Here is a numbered list.

1. This is the first item.
2. This is the second item.

The `makeinfo` and `texinfo-format-buffer` commands transform a Texinfo file such as this into an Info file; and TeX typesets it for a printed manual.

## Acknowledgements and 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 @command{makeinfo} and @command{info}. Karl Berry has made the updates since Texinfo 3.8 and subsequent releases, starting with Edition 2.22 of the manual.

Our thanks go out to all who helped improve this work, particularly to Fran@,{c}ois Pinard and David D. Zuhn, who tirelessly recorded and reported mistakes and obscurities; our special thanks go to Melissa Weisshaus for her frequent and often tedious reviews of nearly similar editions. The indefatigable Eli Zaretskii and Andreas Schwab have provided patches beyond counting. Zack Weinberg did the impossible by implementing the macro syntax in `texinfo.tex'. 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 and strived to describe document contents rather than formatting.

Meanwhile, people at MIT developed another, not too dissimilar format called Bolio. This then was converted to using TeX as its typesetting language: BoTeX.

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 on line and as printed hard copy.