This is texinfo.info, produced by texi2any version 6.1 from
texinfo.texi.

This manual is for GNU Texinfo (version 6.1, 6 February 2016), a
documentation system that can produce both online information and a
printed manual from a single source using semantic markup.

   Copyright (C) 1988, 1990, 1991, 1992, 1993, 1995, 1996, 1997, 1998,
1999, 2001, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
2012, 2013, 2014, 2015, 2016 Free Software Foundation, Inc.

     Permission is granted to copy, distribute and/or modify this
     document under the terms of the GNU Free Documentation License,
     Version 1.3 or any later version published by the Free Software
     Foundation; with no Invariant Sections, with the Front-Cover Texts
     being "A GNU Manual", and with the Back-Cover Texts as in (a)
     below. A copy of the license is included in the section entitled
     "GNU Free Documentation License".

     (a) The FSF's Back-Cover Text is: "You have the freedom to copy and
     modify this GNU manual. Buying copies from the FSF supports it in
     developing GNU and promoting software freedom."
INFO-DIR-SECTION Texinfo documentation system
START-INFO-DIR-ENTRY
* Texinfo: (texinfo).           The GNU documentation format.
* install-info: (texinfo)Invoking install-info. Update info/dir entries.
* makeinfo: (texinfo)Invoking makeinfo.         Translate Texinfo source.
* pod2texi: (pod2texi)Invoking pod2texi.        Translate Perl POD to Texinfo.
* texi2dvi: (texinfo)Format with texi2dvi.      Print Texinfo documents.
* texi2pdf: (texinfo)PDF Output.                PDF output for Texinfo.
* pdftexi2dvi: (texinfo)PDF Output.             PDF output for Texinfo.
* texindex: (texinfo)Format with tex/texindex.  Sort Texinfo index files.
END-INFO-DIR-ENTRY


File: texinfo.info,  Node: HTML Xref Command Expansion,  Next: HTML Xref 8-bit Character Expansion,  Prev: HTML Xref Node Name Expansion,  Up: HTML Xref

22.4.3 HTML Cross-reference Command Expansion
---------------------------------------------

Node names may contain @-commands (*note Node Line Requirements::).
This section describes how they are handled.

   First, comments are removed.

   Next, any '@value' commands (*note @set @value::) and macro
invocations (*note Invoking Macros::) are fully expanded.

   Then, for the following commands, the command name and braces are
removed, and the text of the argument is recursively transformed:

     @asis @b @cite @code @command @dfn @dmn @dotless
     @emph @env @file @i @indicateurl @kbd @key
     @samp @sansserif @sc @slanted @strong @sub @sup
     @t @U @var @verb @w

For '@sc', any letters are capitalized.

   In addition, the following commands are replaced by constant text, as
shown below.  If any of these commands have non-empty arguments, as in
'@TeX{bad}', it is an error, and the result is unspecified.  In this
table, '(space)' means a space character and '(nothing)' means the empty
string.  The notation 'U+HHHH' means Unicode code point HHHH (in hex, as
usual).

   There are further transformations of many of these expansions to
yield the final file or other target name, such as space characters to
'-', etc., according to the other rules.

'@(newline)'           (space)
'@(space)'             (space)
'@(tab)'               (space)
'@!'                   '!'
'@*'                   (space)
'@-'                   (nothing)
'@.'                   '.'
'@:'                   (nothing)
'@?'                   '?'
'@@'                   '@'
'@{'                   '{'
'@}'                   '}'
'@LaTeX'               'LaTeX'
'@TeX'                 'TeX'
'@arrow'               U+2192
'@bullet'              U+2022
'@comma'               ','
'@copyright'           U+00A9
'@dots'                U+2026
'@enddots'             '...'
'@equiv'               U+2261
'@error'               'error-->'
'@euro'                U+20AC
'@exclamdown'          U+00A1
'@expansion'           U+21A6
'@geq'                 U+2265
'@leq'                 U+2264
'@minus'               U+2212
'@ordf'                U+00AA
'@ordm'                U+00BA
'@point'               U+2605
'@pounds'              U+00A3
'@print'               U+22A3
'@questiondown'        U+00BF
'@registeredsymbol'    U+00AE
'@result'              U+21D2
'@textdegree'          U+00B0
'@tie'                 (space)

   Quotation mark @-commands ('@quotedblright{}' and the like), are
likewise replaced by their Unicode values.  Normal quotation
_characters_ (e.g., ASCII ' and ') are not altered.  *Note Inserting
Quotation Marks::.

   Any '@acronym', '@abbr', '@email', and '@image' commands are replaced
by their first argument.  (For these commands, all subsequent arguments
are optional, and ignored here.)  *Note @acronym::, and *note @email::,
and *note Images::.

   Accents are handled according to the next section.

   Any other command is an error, and the result is unspecified.


File: texinfo.info,  Node: HTML Xref 8-bit Character Expansion,  Next: HTML Xref Mismatch,  Prev: HTML Xref Command Expansion,  Up: HTML Xref

22.4.4 HTML Cross-reference 8-bit Character Expansion
-----------------------------------------------------

Usually, characters other than plain 7-bit ASCII are transformed into
the corresponding Unicode code point(s) in Normalization Form C, which
uses precomposed characters where available.  (This is the normalization
form recommended by the W3C and other bodies.)  This holds when that
code point is '0xffff' or less, as it almost always is.

   These will then be further transformed by the rules above into the
string '_HHHH', where HHHH is the code point in hex.

   For example, combining this rule and the previous section:

     @node @b{A} @TeX{} @u{B} @point{}@enddots{}
     => A-TeX-B_0306-_2605_002e_002e_002e

   Notice: 1) '@enddots' expands to three periods which in turn expands
to three '_002e''s; 2) '@u{B}' is a 'B' with a breve accent, which does
not exist as a pre-accented Unicode character, therefore expands to
'B_0306' (B with combining breve).

   When the Unicode code point is above '0xffff', the transformation is
'__XXXXXX', that is, two leading underscores followed by six hex digits.
Since Unicode has declared that their highest code point is '0x10ffff',
this is sufficient.  (We felt it was better to define this extra escape
than to always use six hex digits, since the first two would nearly
always be zeros.)

   This method works fine if the node name consists mostly of ASCII
characters and contains only few 8-bit ones.  But if the document is
written in a language whose script is not based on the Latin alphabet
(for example, Ukrainian), it will create file names consisting almost
entirely of '_XXXX' notations, which is inconvenient and all but
unreadable.  To handle such cases, 'makeinfo' offers the
'--transliterate-file-names' command line option.  This option enables
"transliteration" of node names into ASCII characters for the purposes
of file name creation and referencing.  The transliteration is based on
phonetic principles, which makes the generated file names more easily
understanable.

   For the definition of Unicode Normalization Form C, see Unicode
report UAX#15, <http://www.unicode.org/reports/tr15/>.  Many related
documents and implementations are available elsewhere on the web.


File: texinfo.info,  Node: HTML Xref Mismatch,  Next: HTML Xref Configuration,  Prev: HTML Xref 8-bit Character Expansion,  Up: HTML Xref

22.4.5 HTML Cross-reference Mismatch
------------------------------------

As mentioned earlier (*note HTML Xref Link Basics::), the generating
software may need to guess whether a given manual being cross referenced
is available in split or monolithic form--and, inevitably, it might
guess wrong.  However, when the _referent_ manual is generated, it is
possible to handle at least some mismatches.

   In the case where we assume the referent is split, but it is actually
available in mono, the only recourse would be to generate a 'manual/'
subdirectory full of HTML files which redirect back to the monolithic
'manual.html'.  Since this is essentially the same as a split manual in
the first place, it's not very appealing.

   On the other hand, in the case where we assume the referent is mono,
but it is actually available in split, it is possible to use JavaScript
to redirect from the putatively monolithic 'manual.html' to the
different 'manual/node.html' files.  Here's an example:

     function redirect() {
       switch (location.hash) {
         case "#Node1":
           location.replace("manual/Node1.html#Node1"); break;
         case "#Node2" :
           location.replace("manual/Node2.html#Node2"); break;
         ...
         default:;
       }
     }

   Then, in the '<body>' tag of 'manual.html':

     <body onLoad="redirect();">

   Once again, this is something the software which generated the
_referent_ manual has to do in advance, it's not something the software
generating the cross-reference in the present manual can control.


File: texinfo.info,  Node: HTML Xref Configuration,  Next: HTML Xref Link Preservation,  Prev: HTML Xref Mismatch,  Up: HTML Xref

22.4.6 HTML Cross-reference Configuration: 'htmlxref.cnf'
---------------------------------------------------------

'makeinfo' reads a file named 'htmlxref.cnf' to gather information for
cross-references to other manuals in HTML output.  It is looked for in
the following directories:

'./'
     (the current directory)

'./.texinfo/'
     (under the current directory)

'~/.texinfo/'
     (where '~' is the current user's home directory)

'SYSCONFDIR/texinfo/'
     (where SYSCONFDIR is the system configuration directory specified
     at compile-time, e.g., '/usr/local/etc')

'DATADIR/texinfo/'
     (likewise specified at compile time, e.g., '/usr/local/share')

   All files found are used, with earlier entries overriding later ones.
The Texinfo distribution includes a default file which handles many GNU
manuals; it is installed in the last of the above directories, i.e.,
'DATADIR/texinfo/htmlxref.cnf'.

   The file is line-oriented.  Lines consisting only of whitespace are
ignored.  Comments are indicated with a '#' at the beginning of a line,
optionally preceded by whitespace.  Since '#' can occur in urls (like
almost any character), it does not otherwise start a comment.

   Each non-blank non-comment line must be either a "variable
assignment" or "manual information".

   A variable assignment line looks like this:

     VARNAME = VARVALUE

   Whitespace around the '=' is optional and ignored.  The VARNAME
should consist of letters; case is significant.  The VARVALUE is an
arbitrary string, continuing to the end of the line.  Variables are then
referenced with '${VARNAME}'; variable references can occur in the
VARVALUE.

   A manual information line looks like this:

     MANUAL KEYWORD URLPREFIX

with MANUAL the short identifier for a manual, KEYWORD being one of:
'mono', 'node', 'section', 'chapter', and URLPREFIX described below.
Variable references can occur only in the URLPREFIX.  For example (used
in the canonical 'htmlxref.cnf'):

     G = http://www.gnu.org
     GS = ${G}/software
     hello mono    ${GS}/hello/manual/hello.html
     hello chapter ${GS}/hello/manual/html_chapter/
     hello section ${GS}/hello/manual/html_section/
     hello node    ${GS}/hello/manual/html_node/

   If the keyword is 'mono', URLPREFIX gives the host, directory, and
file name for MANUAL as one monolithic file.

   If the keyword is 'node', 'section', or 'chapter', URLPREFIX gives
the host and directory for MANUAL split into nodes, sections, or
chapters, respectively.

   When available, 'makeinfo' will use the "corresponding" value for
cross-references between manuals.  That is, when generating monolithic
output ('--no-split'), the 'mono' url will be used, when generating
output that is split by node, the 'node' url will be used, etc.
However, if a manual is not available in that form, anything that is
available can be used.  Here is the search order for each style:

     node    => node,    section, chapter, mono
     section => section, chapter, node,    mono
     chapter => chapter, section, node,    mono
     mono    => mono,    chapter, section, node

   These section- and chapter-level cross-manual references can succeed
only when the target manual was created using '--node-files'; this is
the default for split output.

   If you have additions or corrections to the 'htmlxref.cnf'
distributed with Texinfo, please email <bug-texinfo@gnu.org> as usual.
You can get the latest version from
<http://ftpmirror.gnu.org/texinfo/htmlxref.cnf>.


File: texinfo.info,  Node: HTML Xref Link Preservation,  Prev: HTML Xref Configuration,  Up: HTML Xref

22.4.7 HTML Cross-reference Link Preservation: MANUAL'-noderename.cnf'
----------------------------------------------------------------------

Occasionally changes in a program require removing (or renaming) nodes
in the manual in order to have the best documentation.  Given the nature
of the web, however, links may exist anywhere to such a removed node
(renaming appears the same as removal for this purpose), and it's not
ideal for those links to simply break.

   Therefore, Texinfo provides a way for manual authors to specify old
node names and the new nodes to which the old names should be
redirected, via the file MANUAL'-noderename.cnf', where MANUAL is the
base name of the manual.  For example, the manual 'texinfo.texi' would
be supplemented by a file 'texinfo-noderename'.cnf.  (This name can be
overridden by setting the 'RENAMED_NODES_FILE' customization variable;
*note Customization Variables::).

   The file is read in pairs of lines, as follows:

     OLD-NODE-NAME
     @@{} NEW-NODE-NAME

   The usual conversion from Texinfo node names to HTML names is
applied; see this entire section for details (*note HTML Xref::).  The
unusual '@@{}' separator is used because it is not a valid Texinfo
construct, so can't appear in the node names.

   The effect is that 'makeinfo' generates a redirect from OLD-NODE-NAME
to NEW-NODE-NAME when producing HTML output.  Thus, external links to
the old node are preserved.

   Lines consisting only of whitespace are ignored.  Comments are
indicated with a '@c' at the beginning of a line, optionally preceded by
whitespace.

   Another approach to preserving links to deleted or renamed nodes is
to use anchors (*note @anchor::).  There is no effective difference
between the two approaches.


File: texinfo.info,  Node: @-Command Details,  Next: Tips,  Prev: Generating HTML,  Up: Top

Appendix A @-Command Details
****************************

Here are the details of @-commands: information about their syntax, a
list of commands, and information about where commands can appear.

* Menu:

* Command Syntax::
* Command List::
* Command Contexts::


File: texinfo.info,  Node: Command Syntax,  Next: Command List,  Up: @-Command Details

A.1 @-Command Syntax
====================

Texinfo has the following types of @-command:

1. Brace commands
     These commands start with @ followed by a letter or a word,
     followed by an argument within braces.  For example, the command
     '@dfn' indicates the introductory or defining use of a term; it is
     used as follows: 'In Texinfo, @@-commands are @dfn{mark-up}
     commands.'

2. Line commands
     These commands occupy an entire line.  The line starts with @,
     followed by the name of the command (a word); for example,
     '@center' or '@cindex'.  If no argument is needed, the word is
     followed by the end of the line.  If there is an argument, it is
     separated from the command name by a space.  Braces are not used.

3. Block commands
     These commands are written at the start of a line, with general
     text on following lines, terminated by a matching '@end' command on
     a line of its own.  For example, '@example', then the lines of a
     coding example, then '@end example'.  Some of these block commands
     take arguments as line commands do; for example, '@enumerate A'
     opening an environment terminated by '@end enumerate'.  Here 'A' is
     the argument.

4. Symbol insertion commands with no arguments
     These commands start with @ followed by a word followed by a left
     and right- brace.  These commands insert special symbols in the
     document; they do not take arguments.  Some examples: '@dots{}' =>
     '...', '@equiv{}' => '==', '@TeX{}' => 'TeX', and '@bullet{}' =>
     '*'.

5. Non-alphabetic commands
     The names of commands in all of the above categories consist of
     alphabetic characters, almost entirely in lower-case.  Unlike
     those, the non-alphabetic commands commands consist of an @
     followed by a punctuation mark or other character that is not part
     of the Latin alphabet.  Non-alphabetic commands are almost always
     part of text within a paragraph.  The non-alphabetic commands
     include '@@', '@{', '@}', '@.', '@SPACE', and most of the accent
     commands.

6. Miscellaneous commands
     There are a handful of commands that don't fit into any of the
     above categories; for example, the obsolete command '@refill',
     which is always used at the end of a paragraph immediately
     following the final period or other punctuation character.
     '@refill' takes no argument and does not require braces.  Likewise,
     '@tab' used in a '@multitable' block does not take arguments, and
     is not followed by braces.

   Thus, the alphabetic commands fall into classes that have different
argument syntaxes.  You cannot tell to which class a command belongs by
the appearance of its name, but you can tell by the command's meaning:
if the command stands for a glyph, it is in class 4 and does not require
an argument; if it makes sense to use the command among other text as
part of a paragraph, the command is in class 1 and must be followed by
an argument in braces.  The non-alphabetic commands, such as '@:', are
exceptions to the rule; they do not need braces.

   The purpose of having different syntax for commands is to make
Texinfo files easier to read, and also to help the GNU Emacs paragraph
and filling commands work properly.


File: texinfo.info,  Node: Command List,  Next: Command Contexts,  Prev: Command Syntax,  Up: @-Command Details

A.2 @-Command List
==================

Here is an alphabetical list of the @-commands in Texinfo.  Square
brackets, [ ], indicate optional arguments; an ellipsis, '...',
indicates repeated text.

'@WHITESPACE'
     An '@' followed by a space, tab, or newline produces a normal,
     stretchable, interword space.  *Note Multiple Spaces::.

'@!'
     Produce an exclamation point that ends a sentence (usually after an
     end-of-sentence capital letter).  *Note Ending a Sentence::.

'@"'
'@''
     Generate an umlaut or acute accent, respectively, over the next
     character, as in o" and o'.  *Note Inserting Accents::.

'@*'
     Force a line break.  *Note Line Breaks::.

'@,{C}'
     Generate a cedilla accent under C, as in c,.  *Note Inserting
     Accents::.

'@-'
     Insert a discretionary hyphenation point.  *Note @- @hyphenation::.

'@.'
     Produce a period that ends a sentence (usually after an
     end-of-sentence capital letter).  *Note Ending a Sentence::.

'@/'
     Produces no output, but allows a line break.  *Note Line Breaks::.

'@:'
     Tell TeX to refrain from inserting extra whitespace after an
     immediately preceding period, question mark, exclamation mark, or
     colon, as TeX normally would.  *Note Not Ending a Sentence::.

'@='
     Generate a macron (bar) accent over the next character, as in o=.
     *Note Inserting Accents::.

'@?'
     Produce a question mark that ends a sentence (usually after an
     end-of-sentence capital letter).  *Note Ending a Sentence::.

'@@'
'@atchar{}'
     Insert an at sign, '@'.  *Note Inserting an Atsign::.

'@\'
'@backslashchar{}'
     Insert a backslash, '\'; '@backslashchar{}' works anywhere, while
     '@\' works only inside '@math'.  *Note Inserting a Backslash::, and
     *note Inserting Math::.

'@^'
'@`'
     Generate a circumflex (hat) or grave accent, respectively, over the
     next character, as in o^ and e`.  *Note Inserting Accents::.

'@{'
'@lbracechar{}'
     Insert a left brace, '{'.  *Note Inserting Braces::.

'@}'
'@rbracechar{}'
     Insert a right brace, '}'.  *Note Inserting Braces::.

'@~'
     Generate a tilde accent over the next character, as in N~.  *Note
     Inserting Accents::.

'@AA{}'
'@aa{}'
     Generate the uppercase and lowercase Scandinavian A-ring letters,
     respectively: AA, aa.  *Note Inserting Accents::.

'@abbr{ABBREVIATION}'
     Indicate a general abbreviation, such as 'Comput.'.  *Note @abbr::.

'@acronym{ACRONYM}'
     Indicate an acronym in all capital letters, such as 'NASA'. *Note
     @acronym::.

'@AE{}'
'@ae{}'
     Generate the uppercase and lowercase AE ligatures, respectively:
     AE, ae.  *Note Inserting Accents::.

'@afivepaper'
     Change page dimensions for the A5 paper size.  *Note A4 Paper::.

'@afourlatex'
'@afourpaper'
'@afourwide'
     Change page dimensions for the A4 paper size.  *Note A4 Paper::.

'@alias NEW=EXISTING'
     Make the command '@NEW' a synonym for the existing command
     '@EXISTING'.  *Note @alias::.

'@allowcodebreaks TRUE-FALSE'
     Control breaking at '-' and '_' in TeX.  *Note @allowcodebreaks::.

'@anchor{NAME}'
     Define NAME as the current location for use as a cross-reference
     target.  *Note @anchor::.

'@appendix TITLE'
     Begin an appendix.  The title appears in the table of contents.  In
     Info, the title is underlined with asterisks.  *Note @unnumbered
     @appendix::.

'@appendixsec TITLE'
'@appendixsection TITLE'
     Begin an appendix section within an appendix.  The section title
     appears in the table of contents.  In Info, the title is underlined
     with equal signs.  '@appendixsection' is a longer spelling of the
     '@appendixsec' command.  *Note @unnumberedsec @appendixsec
     @heading::.

'@appendixsubsec TITLE'
     Begin an appendix subsection.  The title appears in the table of
     contents.  In Info, the title is underlined with hyphens.  *Note
     @unnumberedsubsec @appendixsubsec @subheading::.

'@appendixsubsubsec TITLE'
     Begin an appendix subsubsection.  The title appears in the table of
     contents.  In Info, the title is underlined with periods.  *Note
     @subsubsection::.

'@arrow{}'
     Generate a right arrow glyph: '->'.  Used by default for '@click'.
     *Note Click Sequences::.

'@asis'
     Used following '@table', '@ftable', and '@vtable' to print the
     table's first column without highlighting ("as is").  *Note
     @asis::.

'@author AUTHOR'
     Typeset AUTHOR flushleft and underline it.  *Note @title @subtitle
     @author::.

'@b{TEXT}'
     Set TEXT in a bold font.  No effect in Info.  *Note Fonts::.

'@bullet{}'
     Generate a large round dot, * ('*' in Info).  Often used with
     '@table'.  *Note @bullet::.

'@bye'
     Stop formatting a file.  The formatters do not see anything in the
     input file following '@bye'.  *Note Ending a File::.

'@c COMMENT'
     Begin a comment in Texinfo.  The rest of the line does not appear
     in any output.  A synonym for '@comment'.  'DEL' also starts a
     comment.  *Note Comments::.

'@caption'
     Define the full caption for a '@float'.  *Note @caption
     @shortcaption::.

'@cartouche'
     Highlight an example or quotation by drawing a box with rounded
     corners around it.  Pair with '@end cartouche'.  No effect in Info.
     *Note @cartouche::.

'@center LINE-OF-TEXT'
     Center the line of text following the command.  *Note @titlefont
     @center @sp::.

'@centerchap LINE-OF-TEXT'
     Like '@chapter', but centers the chapter title.  *Note @chapter::.

'@chapheading TITLE'
     Print an unnumbered chapter-like heading, but omit from the table
     of contents.  In Info, the title is underlined with asterisks.
     *Note @majorheading @chapheading::.

'@chapter TITLE'
     Begin a numbered chapter.  The chapter title appears in the table
     of contents.  In Info, the title is underlined with asterisks.
     *Note @chapter::.

'@cindex ENTRY'
     Add ENTRY to the index of concepts.  *Note Defining the Entries of
     an Index: Index Entries.

'@cite{REFERENCE}'
     Highlight the name of a book or other reference that has no
     companion Info file.  *Note @cite::.

'@clear FLAG'
     Unset FLAG, preventing the Texinfo formatting commands from
     formatting text between subsequent pairs of '@ifset FLAG' and '@end
     ifset' commands, and preventing '@value{FLAG}' from expanding to
     the value to which FLAG is set.  *Note @set @clear @value::.

'@click{}'
     Represent a single "click" in a GUI.  Used within '@clicksequence'.
     *Note Click Sequences::.

'@clicksequence{ACTION @click{} ACTION}'
     Represent a sequence of clicks in a GUI.  *Note Click Sequences::.

'@clickstyle @CMD'
     Execute @CMD for each '@click'; the default is '@arrow'.  The usual
     following empty braces on @CMD are omitted.  *Note Click
     Sequences::.

'@code{SAMPLE-CODE}'
     Indicate an expression, a syntactically complete token of a
     program, or a program name.  Unquoted in Info output.  *Note
     @code::.

'@codequotebacktick ON-OFF'
'@codequoteundirected ON-OFF'
     Control output of '`' and ''' in code examples.  *Note Inserting
     Quote Characters::.

'@comma{}'
     Insert a comma ',' character; only needed when a literal comma
     would be taken as an argument separator.  *Note Inserting a
     Comma::.

'@command{COMMAND-NAME}'
     Indicate a command name, such as 'ls'.  *Note @command::.

'@comment COMMENT'
     Begin a comment in Texinfo.  The rest of the line does not appear
     in any output.  A synonym for '@c'.  *Note Comments::.

'@contents'
     Print a complete table of contents.  Has no effect in Info, which
     uses menus instead.  *Note Generating a Table of Contents:
     Contents.

'@copying'
     Specify copyright holders and copying conditions for the document
     Pair with '@end cartouche'.  *Note @copying::.

'@copyright{}'
     Generate the copyright symbol (C).  *Note @copyright::.

'@defcodeindex INDEX-NAME'
     Define a new index and its indexing command.  Print entries in an
     '@code' font.  *Note Defining New Indices: New Indices.

'@defcv CATEGORY CLASS NAME'
'@defcvx CATEGORY CLASS NAME'
     Format a description for a variable associated with a class in
     object-oriented programming.  Takes three arguments: the category
     of thing being defined, the class to which it belongs, and its
     name.  *Note Definition Commands::.

'@deffn CATEGORY NAME ARGUMENTS...'
'@deffnx CATEGORY NAME ARGUMENTS...'
     Format a description for a function, interactive command, or
     similar entity that may take arguments.  '@deffn' takes as
     arguments the category of entity being described, the name of this
     particular entity, and its arguments, if any.  *Note Definition
     Commands::.

'@defindex INDEX-NAME'
     Define a new index and its indexing command.  Print entries in a
     roman font.  *Note Defining New Indices: New Indices.

'@definfoenclose NEWCMD, BEFORE, AFTER'
     Must be used within '@ifinfo'; create a new command '@NEWCMD' for
     Info that marks text by enclosing it in strings that precede and
     follow the text.  *Note @definfoenclose::.

'@defivar CLASS INSTANCE-VARIABLE-NAME'
'@defivarx CLASS INSTANCE-VARIABLE-NAME'
     Format a description for an instance variable in object-oriented
     programming.  The command is equivalent to '@defcv {Instance
     Variable} ...'.  *Note Definition Commands::.

'@defmac MACRONAME ARGUMENTS...'
'@defmacx MACRONAME ARGUMENTS...'
     Format a description for a macro; equivalent to '@deffn Macro ...'.
     *Note Definition Commands::.

'@defmethod CLASS METHOD-NAME ARGUMENTS...'
'@defmethodx CLASS METHOD-NAME ARGUMENTS...'
     Format a description for a method in object-oriented programming;
     equivalent to '@defop Method ...'.  *Note Definition Commands::.

'@defop CATEGORY CLASS NAME ARGUMENTS...'
'@defopx CATEGORY CLASS NAME ARGUMENTS...'
     Format a description for an operation in object-oriented
     programming.  '@defop' takes as arguments the name of the category
     of operation, the name of the operation's class, the name of the
     operation, and its arguments, if any.  *Note Definition Commands::,
     and *note Abstract Objects::.

'@defopt OPTION-NAME'
'@defoptx OPTION-NAME'
     Format a description for a user option; equivalent to '@defvr {User
     Option} ...'.  *Note Definition Commands::.

'@defspec SPECIAL-FORM-NAME ARGUMENTS...'
'@defspecx SPECIAL-FORM-NAME ARGUMENTS...'
     Format a description for a special form; equivalent to '@deffn
     {Special Form} ...'.  *Note Definition Commands::.

'@deftp CATEGORY NAME-OF-TYPE ATTRIBUTES...'
'@deftpx CATEGORY NAME-OF-TYPE ATTRIBUTES...'
     Format a description for a data type; its arguments are the
     category, the name of the type (e.g., 'int') , and then the names
     of attributes of objects of that type.  *Note Definition
     Commands::, and *note Data Types::.

'@deftypecv CATEGORY CLASS DATA-TYPE NAME'
'@deftypecvx CATEGORY CLASS DATA-TYPE NAME'
     Format a description for a typed class variable in object-oriented
     programming.  *Note Definition Commands::, and *note Abstract
     Objects::.

'@deftypefn CATEGORY DATA-TYPE NAME ARGUMENTS...'
'@deftypefnx CATEGORY DATA-TYPE NAME ARGUMENTS...'
     Format a description for a function or similar entity that may take
     arguments and that is typed.  '@deftypefn' takes as arguments the
     category of entity being described, the type, the name of the
     entity, and its arguments, if any.  *Note Definition Commands::.

'@deftypefnnewline ON-OFF'
     Specifies whether return types for '@deftypefn' and similar are
     printed on lines by themselves; default is off.  *Note Functions in
     Typed Languages: Typed Functions.

'@deftypefun DATA-TYPE FUNCTION-NAME ARGUMENTS...'
'@deftypefunx DATA-TYPE FUNCTION-NAME ARGUMENTS...'
     Format a description for a function in a typed language.  The
     command is equivalent to '@deftypefn Function ...'.  *Note
     Definition Commands::.

'@deftypeivar CLASS DATA-TYPE VARIABLE-NAME'
'@deftypeivarx CLASS DATA-TYPE VARIABLE-NAME'
     Format a description for a typed instance variable in
     object-oriented programming.  *Note Definition Commands::, and
     *note Abstract Objects::.

'@deftypemethod CLASS DATA-TYPE METHOD-NAME ARGUMENTS...'
'@deftypemethodx CLASS DATA-TYPE METHOD-NAME ARGUMENTS...'
     Format a description for a typed method in object-oriented
     programming.  *Note Definition Commands::.

'@deftypeop CATEGORY CLASS DATA-TYPE NAME ARGUMENTS...'
'@deftypeopx CATEGORY CLASS DATA-TYPE NAME ARGUMENTS...'
     Format a description for a typed operation in object-oriented
     programming.  *Note Definition Commands::, and *note Abstract
     Objects::.

'@deftypevar DATA-TYPE VARIABLE-NAME'
'@deftypevarx DATA-TYPE VARIABLE-NAME'
     Format a description for a variable in a typed language.  The
     command is equivalent to '@deftypevr Variable ...'.  *Note
     Definition Commands::.

'@deftypevr CATEGORY DATA-TYPE NAME'
'@deftypevrx CATEGORY DATA-TYPE NAME'
     Format a description for something like a variable in a typed
     language--an entity that records a value.  Takes as arguments the
     category of entity being described, the type, and the name of the
     entity.  *Note Definition Commands::.

'@defun FUNCTION-NAME ARGUMENTS...'
'@defunx FUNCTION-NAME ARGUMENTS...'
     Format a description for a function; equivalent to '@deffn Function
     ...'.  *Note Definition Commands::.

'@defvar VARIABLE-NAME'
'@defvarx VARIABLE-NAME'
     Format a description for a variable; equivalent to '@defvr Variable
     ...'.  *Note Definition Commands::.

'@defvr CATEGORY NAME'
'@defvrx CATEGORY NAME'
     Format a description for any kind of variable.  '@defvr' takes as
     arguments the category of the entity and the name of the entity.
     *Note Definition Commands::.

'@detailmenu'
     Mark the (optional) detailed node listing in a master menu.  *Note
     Master Menu Parts::.

'@dfn{TERM}'
     Indicate the introductory or defining use of a term.  *Note @dfn::.

'@DH{}'
'@dh{}'
     Generate the uppercase and lowercase Icelandic letter eth,
     respectively: D, d.  *Note Inserting Accents::.

'@dircategory DIRPART'
     Specify a part of the Info directory menu where this file's entry
     should go.  *Note Installing Dir Entries::.

'@direntry'
     Begin the Info directory menu entry for this file.  Pair with '@end
     direntry'.  *Note Installing Dir Entries::.

'@display'
     Begin a kind of example.  Like '@example' (indent text, do not
     fill), but do not select a new font.  Pair with '@end display'.
     *Note @display::.

'@dmn{DIMENSION}'
     Format a unit of measure, as in 12pt.  Causes TeX to insert a thin
     space before DIMENSION.  No effect in Info.  *Note @dmn::.

'@docbook'
     Enter Docbook completely.  Pair with '@end docbook'.  *Note Raw
     Formatter Commands::.

'@documentdescription'
     Set the document description text, included in the HTML output.
     Pair with '@end documentdescription'.  *Note
     @documentdescription::.

'@documentencoding ENC'
     Declare the input encoding to be ENC.  *Note @documentencoding::.

'@documentlanguage CC'
     Declare the document language as the two-character ISO-639
     abbreviation CC.  *Note @documentlanguage::.

'@dotaccent{C}'
     Generate a dot accent over the character C, as in o..  *Note
     Inserting Accents::.

'@dotless{I-OR-J}'
     Generate dotless i ('i') and dotless j ('j').  *Note Inserting
     Accents::.

'@dots{}'
     Generate an ellipsis, '...'.  *Note @dots::.

'@email{ADDRESS[, DISPLAYED-TEXT]}'
     Indicate an electronic mail address.  *Note @email::.

'@emph{TEXT}'
     Emphasize TEXT, by using _italics_ where possible, and enclosing in
     asterisks in Info.  *Note Emphasizing Text: Emphasis.

'@end ENVIRONMENT'
     Ends ENVIRONMENT, as in '@end example'.  *Note @-commands:
     Formatting Commands.

'@enddots{}'
     Generate an end-of-sentence ellipsis, like this: ...  *Note
     @dots::.

'@enumerate [NUMBER-OR-LETTER]'
     Begin a numbered list, using '@item' for each entry.  Optionally,
     start list with NUMBER-OR-LETTER.  Pair with '@end enumerate'.
     *Note @enumerate::.

'@env{ENVIRONMENT-VARIABLE}'
     Indicate an environment variable name, such as 'PATH'.  *Note
     @env::.

'@equiv{}'
     Indicate to the reader the exact equivalence of two forms with a
     glyph: '=='.  *Note @equiv::.

'@error{}'
     Indicate to the reader with a glyph that the following text is an
     error message: 'error->'.  *Note @error::.

'@errormsg{MSG}'
     Report MSG as an error to standard error, and exit unsuccessfully.
     Texinfo commands within MSG are expanded to plain text.  *Note
     Conditionals::, and *note External Macro Processors::.

'@euro{}'
     Generate the Euro currency sign.  *Note @euro::.

'@evenfooting [LEFT] @| [CENTER] @| [RIGHT]'
'@evenheading [LEFT] @| [CENTER] @| [RIGHT]'
     Specify page footings resp. headings for even-numbered (left-hand)
     pages.  *Note How to Make Your Own Headings: Custom Headings.

'@everyfooting [LEFT] @| [CENTER] @| [RIGHT]'
'@everyheading [LEFT] @| [CENTER] @| [RIGHT]'
     Specify page footings resp. headings for every page.  Not relevant
     to Info.  *Note How to Make Your Own Headings: Custom Headings.

'@example'
     Begin an example.  Indent text, do not fill, and select fixed-width
     font.  Pair with '@end example'.  *Note @example::.

'@exampleindent INDENT'
     Indent example-like environments by INDENT number of spaces
     (perhaps 0).  *Note @exampleindent::.

'@exclamdown{}'
     Generate an upside-down exclamation point.  *Note Inserting
     Accents::.

'@exdent LINE-OF-TEXT'
     Remove any indentation a line might have.  *Note @exdent::.

'@expansion{}'
     Indicate the result of a macro expansion to the reader with a
     special glyph: '==>'.  *Note @expansion::.

'@file{FILENAME}'
     Highlight the name of a file, buffer, node, directory, etc.  *Note
     @file::.

'@finalout'
     Prevent TeX from printing large black warning rectangles beside
     over-wide lines.  *Note Overfull hboxes::.

'@findex ENTRY'
     Add ENTRY to the index of functions.  *Note Defining the Entries of
     an Index: Index Entries.

'@firstparagraphindent WORD'
     Control indentation of the first paragraph after section headers
     according to WORD, one of 'none' or 'insert'.  *Note
     @firstparagraphindent::.

'@float'
     Environment to define floating material.  Pair with '@end float'.
     *Note Floats::.

'@flushleft'
'@flushright'
     Do not fill text; left (right) justify every line while leaving the
     right (left) end ragged.  Leave font as is.  Pair with '@end
     flushleft' ('@end flushright').  *Note @flushleft @flushright::.

'@fonttextsize 10-11'
     Change the size of the main body font in the TeX output.  *Note
     Fonts::.

'@footnote{TEXT-OF-FOOTNOTE}'
     Enter a footnote.  Footnote text is printed at the bottom of the
     page by TeX; Info may format in either 'End' node or 'Separate'
     node style.  *Note Footnotes::.

'@footnotestyle STYLE'
     Specify an Info file's footnote style, either 'end' for the end
     node style or 'separate' for the separate node style.  *Note
     Footnotes::.

'@format'
     Begin a kind of example.  Like '@display', but do not indent.  Pair
     with '@end format'.  *Note @example::.

'@frenchspacing ON-OFF'
     Control spacing after punctuation.  *Note @frenchspacing::.

'@ftable FORMATTING-COMMAND'
     Begin a two-column table, using '@item' for each entry.
     Automatically enter each of the items in the first column into the
     index of functions.  Pair with '@end ftable'.  The same as
     '@table', except for indexing.  *Note @ftable @vtable::.

'@geq{}'
     Generate a greater-than-or-equal sign, '>='.  *Note @geq @leq::.

'@group'
     Disallow page breaks within following text.  Pair with '@end
     group'.  Ignored in Info.  *Note @group::.

'@guillemetleft{}'
'@guillemetright{}'
'@guillemotleft{}'
'@guillemotright{}'
'@guilsinglleft{}'
'@guilsinglright{}'
     Double and single angle quotation marks: << >> < >.
     '@guillemotleft' and '@guillemotright' are synonyms for
     '@guillemetleft' and '@guillemetright'.  *Note Inserting Quotation
     Marks::.

'@H{C}'
     Generate the long Hungarian umlaut accent over C, as in o''.

'@hashchar{}'
     Insert a hash '#' character; only needed when a literal hash would
     introduce '#line' directive.  *Note Inserting a Hashsign::, and
     *note External Macro Processors::.

'@heading TITLE'
     Print an unnumbered section-like heading, but omit from the table
     of contents.  In Info, the title is underlined with equal signs.
     *Note @unnumberedsec @appendixsec @heading::.

'@headings ON-OFF-SINGLE-DOUBLE'
     Turn page headings on or off, and/or specify single-sided or
     double-sided page headings for printing.  *Note @headings::.

'@headitem'
     Begin a heading row in a multitable.  *Note Multitable Rows::.

'@headitemfont{TEXT}'
     Set TEXT in the font used for multitable heading rows; mostly
     useful in multitable templates.  *Note Multitable Rows::.

'@html'
     Enter HTML completely.  Pair with '@end html'.  *Note Raw Formatter
     Commands::.

'@hyphenation{HY-PHEN-A-TED WORDS}'
     Explicitly define hyphenation points.  *Note @- @hyphenation::.

'@i{TEXT}'
     Set TEXT in an italic font.  No effect in Info.  *Note Fonts::.

'@ifclear TXIVAR'
     If the Texinfo variable TXIVAR is not set, format the following
     text.  Pair with '@end ifclear'.  *Note @set @clear @value::.

'@ifcommanddefined TXICMD'
'@ifcommandnotdefined TXICMD'
     If the Texinfo code '@TXICMD' is (not) defined, format the follow
     text.  Pair with the corresponding '@end ifcommand...'.  *Note
     Testing for Texinfo Commands::.

'@ifdocbook'
'@ifhtml'
'@ifinfo'
     Begin text that will appear only in the given output format.
     '@ifinfo' output appears in both Info and (for historical
     compatibility) plain text output.  Pair with '@end ifdocbook' resp.
     '@end ifhtml' resp. '@end ifinfo'.  *Note Conditionals::.

'@ifnotdocbook'
'@ifnothtml'
'@ifnotplaintext'
'@ifnottex'
'@ifnotxml'
     Begin text to be ignored in one output format but not the others.
     '@ifnothtml' text is omitted from HTML output, etc.  Pair with the
     corresponding '@end ifnotFORMAT'.  *Note Conditionals::.

'@ifnotinfo'
     Begin text to appear in output other than Info and (for historical
     compatibility) plain text.  Pair with '@end ifnotinfo'.  *Note
     Conditionals::.

'@ifplaintext'
     Begin text that will appear only in the plain text output.  Pair
     with '@end ifplaintext'.  *Note Conditionals::.

'@ifset TXIVAR'
     If the Texinfo variable TXIVAR is set, format the following text.
     Pair with '@end ifset'.  *Note @set @clear @value::.

'@iftex'
     Begin text to appear only in the TeX output.  Pair with '@end
     iftex'.  *Note Conditionally Visible Text: Conditionals.

'@ifxml'
     Begin text that will appear only in the XML output.  Pair with
     '@end ifxml'.  *Note Conditionals::.

'@ignore'
     Begin text that will not appear in any output.  Pair with '@end
     ignore'.  *Note Comments and Ignored Text: Comments.

'@image{FILENAME, [WIDTH], [HEIGHT], [ALT], [EXT]}'
     Include graphics image in external FILENAME scaled to the given
     WIDTH and/or HEIGHT, using ALT text and looking for 'FILENAME.EXT'
     in HTML.  *Note Images::.

'@include FILENAME'
     Read the contents of Texinfo source file FILENAME.  *Note Include
     Files::.

'@indent'
     Insert paragraph indentation.  *Note @indent::.

'@indentedblock'
     Indent a block of arbitary text on the left.  Pair with '@end
     indentedblock'.  *Note @indentedblock::.

'@indicateurl{INDICATEURL}'
     Indicate text that is a uniform resource locator for the World Wide
     Web.  *Note @indicateurl::.

'@inforef{NODE-NAME, [ENTRY-NAME], INFO-FILE-NAME}'
     Make a cross-reference to an Info file for which there is no
     printed manual.  *Note @inforef::.

'@inlinefmt{FMT, TEXT}'
     Insert TEXT only if the output format is FMT.  *Note Inline
     Conditionals::.

'@inlinefmtifelse{FMT, TEXT, ELSE-TEXT}'
     Insert TEXT if the output format is FMT, else ELSE-TEXT.

'@inlineifclear{VAR, TEXT}'
'@inlineifset{VAR, TEXT}'
     Insert TEXT only if the Texinfo variable VAR is (not) set.

'@inlineraw{FMT, RAW-TEXT}'
     Insert TEXT as in a raw conditional, only if the output format is
     FMT.

'\input MACRO-DEFINITIONS-FILE'
     Use the specified macro definitions file.  This command is used
     only in the first line of a Texinfo file to cause TeX to make use
     of the 'texinfo' macro definitions file.  The '\' in '\input' is
     used instead of an '@' because TeX does not recognize '@' until
     after it has read the definitions file.  *Note Texinfo File
     Header::.

'@insertcopying'
     Insert the text previously defined with the '@copying' environment.
     *Note @insertcopying::.

'@item'
     Indicate the beginning of a marked paragraph for '@itemize' and
     '@enumerate'; indicate the beginning of the text of a first column
     entry for '@table', '@ftable', and '@vtable'.  *Note Lists and
     Tables::.

'@itemize MARK-GENERATING-CHARACTER-OR-COMMAND'
     Begin an unordered list: indented paragraphs with a mark, such as
     '@bullet', inside the left margin at the beginning of each item.
     Pair with '@end itemize'.  *Note @itemize::.

'@itemx'
     Like '@item' but do not generate extra vertical space above the
     item text.  Thus, when several items have the same description, use
     '@item' for the first and '@itemx' for the others.  *Note @itemx::.

'@kbd{KEYBOARD-CHARACTERS}'
     Indicate characters of input to be typed by users.  *Note @kbd::.

'@kbdinputstyle STYLE'
     Specify when '@kbd' should use a font distinct from '@code'
     according to STYLE: 'code', 'distinct', 'example'.  *Note @kbd::.

'@key{KEY-NAME}'
     Indicate the name of a key on a keyboard.  *Note @key::.

'@kindex ENTRY'
     Add ENTRY to the index of keys.  *Note Defining the Entries of an
     Index: Index Entries.

'@L{}'
'@l{}'
     Generate the uppercase and lowercase Polish suppressed-L letters,
     respectively: /L, /l.

'@LaTeX{}'
     Generate the LaTeX logo.  *Note @TeX @LaTeX::.

'@leq{}'
     Generate a less-than-or-equal sign, '<='.  *Note @geq @leq::.

'@lisp'
     Begin an example of Lisp code.  Indent text, do not fill, and
     select fixed-width font.  Pair with '@end lisp'.  *Note @lisp::.

'@listoffloats'
     Produce a table-of-contents-like listing of '@float's.  *Note
     @listoffloats::.

'@lowersections'
     Change subsequent chapters to sections, sections to subsections,
     and so on.  *Note '@raisesections' and '@lowersections':
     Raise/lower sections.

'@macro MACRONAME {PARAMS}'
     Define a new Texinfo command '@MACRONAME{PARAMS}'.  Pair with '@end
     macro'.  *Note Defining Macros::.

'@majorheading TITLE'
     Print an unnumbered chapter-like heading, but omit from the table
     of contents.  This generates more vertical whitespace before the
     heading than the '@chapheading' command.  *Note @majorheading
     @chapheading::.

'@math{MATHEMATICAL-EXPRESSION}'
     Format a mathematical expression.  *Note Inserting Math::.

'@menu'
     Mark the beginning of a menu of nodes.  No effect in a printed
     manual.  Pair with '@end menu'.  *Note Menus::.

'@minus{}'
     Generate a minus sign, '-'.  *Note @minus::.

'@multitable COLUMN-WIDTH-SPEC'
     Begin a multi-column table.  Begin each row with '@item' or
     '@headitem', and separate columns with '@tab'.  Pair with '@end
     multitable'.  *Note Multitable Column Widths::.

'@need N'
     Start a new page in a printed manual if fewer than N mils
     (thousandths of an inch) remain on the current page.  *Note
     @need::.

'@node NAME, NEXT, PREVIOUS, UP'
     Begin a new node.  *Note Writing a Node::.

'@noindent'
     Prevent text from being indented as if it were a new paragraph.
     *Note @noindent::.

'@novalidate'
     Suppress validation of node references and omit creation of
     auxiliary files with TeX.  Use before any sectioning or
     cross-reference commands.  *Note Pointer Validation::.

'@O{}'
'@o{}'
     Generate the uppercase and lowercase O-with-slash letters,
     respectively: /O, /o.

'@oddfooting [LEFT] @| [CENTER] @| [RIGHT]'
'@oddheading [LEFT] @| [CENTER] @| [RIGHT]'
     Specify page footings resp. headings for odd-numbered (right-hand)
     pages.  *Note How to Make Your Own Headings: Custom Headings.

'@OE{}'
'@oe{}'
     Generate the uppercase and lowercase OE ligatures, respectively:
     OE, oe.  *Note Inserting Accents::.

'@ogonek{C}'
     Generate an ogonek diacritic under the next character, as in a;.
     *Note Inserting Accents::.

'@option{OPTION-NAME}'
     Indicate a command-line option, such as '-l' or '--help'.  *Note
     @option::.

'@ordf{}'
'@ordm{}'
     Generate the feminine and masculine Spanish ordinals, respectively:
     a, o.  *Note Inserting Accents::.

'@page'
     Start a new page in a printed manual.  No effect in Info.  *Note
     @page::.

'@pagesizes [WIDTH][, HEIGHT]'
     Change page dimensions.  *Note pagesizes::.

'@paragraphindent INDENT'
     Indent paragraphs by INDENT number of spaces (perhaps 0); preserve
     source file indentation if INDENT is 'asis'.  *Note
     @paragraphindent::.

'@part TITLE'
     Begin a group of chapters or appendixes; included in the tables of
     contents and produces a page of its own in printed output.  *Note
     @part::.

'@pindex ENTRY'
     Add ENTRY to the index of programs.  *Note Defining the Entries of
     an Index: Index Entries.

'@point{}'
     Indicate the position of point in a buffer to the reader with a
     glyph: '-!-'.  *Note @point::.

'@pounds{}'
     Generate the pounds sterling currency sign.  *Note @pounds::.

'@print{}'
     Indicate printed output to the reader with a glyph: '-|'.  *Note
     @print::.

'@printindex INDEX-NAME'
     Generate the alphabetized index for INDEX-NAME (using two columns
     in a printed manual).  *Note Printing Indices & Menus::.

'@pxref{NODE, [ENTRY], [NODE-TITLE], [INFO-FILE], [MANUAL]}'
     Make a reference that starts with a lowercase 'see' in a printed
     manual.  Use within parentheses only.  Only the first argument is
     mandatory.  *Note @pxref::.

'@questiondown{}'
     Generate an upside-down question mark.  *Note Inserting Accents::.

'@quotation'
     Narrow the margins to indicate text that is quoted from another
     work.  Takes optional argument specifying prefix text, e.g., an
     author name.  Pair with '@end quotation'.  *Note @quotation::.

'@quotedblleft{}'
'@quotedblright{}'
'@quoteleft{}'
'@quoteright{}'
'@quotedblbase{}'
'@quotesinglbase{}'
     Produce various quotation marks: `` '' ` ' ,, ,.  *Note Inserting
     Quotation Marks::.

'@r{TEXT}'
     Set TEXT in the regular roman font.  No effect in Info.  *Note
     Fonts::.

'@raggedright'
     Fill text; left justify every line while leaving the right end
     ragged.  Leave font as is.  Pair with '@end raggedright'.  No
     effect in Info.  *Note @raggedright::.

'@raisesections'
     Change subsequent sections to chapters, subsections to sections,
     and so on.  *Note Raise/lower sections::.

'@ref{NODE, [ENTRY], [NODE-TITLE], [INFO-FILE], [MANUAL]}'
     Make a plain reference that does not start with any special text.
     Follow command with a punctuation mark.  Only the first argument is
     mandatory.  *Note @ref::.

'@refill'
     This command used to refill and indent the paragraph after all the
     other processing has been done.  It is no longer needed, since all
     formatters now automatically refill as needed, but you may still
     see it in the source to some manuals, as it does no harm.

'@registeredsymbol{}'
     Generate the legal symbol (R).  *Note @registeredsymbol::.

'@result{}'
     Indicate the result of an expression to the reader with a special
     glyph: '=>'.  *Note @result::.

'@ringaccent{C}'
     Generate a ring accent over the next character, as in o*.  *Note
     Inserting Accents::.

'@samp{TEXT}'
     Indicate a literal example of a sequence of characters, in general.
     Quoted in Info output.  *Note @samp::.

'@sansserif{TEXT}'
     Set TEXT in a sans serif font if possible.  No effect in Info.
     *Note Fonts::.

'@sc{TEXT}'
     Set TEXT in a small caps font in printed output, and uppercase in
     Info.  *Note Smallcaps::.

'@section TITLE'
     Begin a section within a chapter.  The section title appears in the
     table of contents.  In Info, the title is underlined with equal
     signs.  Within '@chapter' and '@appendix', the section title is
     numbered; within '@unnumbered', the section is unnumbered.  *Note
     @section::.

'@set TXIVAR [STRING]'
     Define the Texinfo variable TXIVAR, optionally to the value STRING.
     *Note @set @clear @value::.

'@setchapternewpage ON-OFF-ODD'
     Specify whether chapters start on new pages, and if so, whether on
     odd-numbered (right-hand) new pages.  *Note @setchapternewpage::.

'@setcontentsaftertitlepage'
     Put the table of contents after the '@end titlepage' even if the
     '@contents' command is at the end.  *Note Contents::.

'@setfilename INFO-FILE-NAME'
     Provide a name to be used for the output files.  This command is
     ignored for TeX formatting.  *Note @setfilename::.

'@setshortcontentsaftertitlepage'
     Place the short table of contents after the '@end titlepage'
     command even if the '@shortcontents' command is at the end.  *Note
     Contents::.

'@settitle TITLE'
     Specify the title for page headers in a printed manual, and the
     default document title for HTML '<head>'.  *Note @settitle::.

'@shortcaption'
     Define the short caption for a '@float'.  *Note @caption
     @shortcaption::.

'@shortcontents'
     Print a short table of contents, with chapter-level entries only.
     Not relevant to Info, which uses menus rather than tables of
     contents.  *Note Generating a Table of Contents: Contents.

'@shorttitlepage TITLE'
     Generate a minimal title page.  *Note @titlepage::.

'@slanted{TEXT}'
     Set TEXT in a slanted font if possible.  No effect in Info.  *Note
     Fonts::.

'@smallbook'
     Cause TeX to produce a printed manual in a 7 by 9.25 inch format
     rather than the regular 8.5 by 11 inch format.  *Note @smallbook::.
     Also, see *note @small...::.

'@smalldisplay'
     Begin a kind of example.  Like '@display', but use a smaller font
     size where possible.  Pair with '@end smalldisplay'.  *Note
     @small...::.

'@smallexample'
     Begin an example.  Like '@example', but use a smaller font size
     where possible.  Pair with '@end smallexample'.  *Note @small...::.

'@smallformat'
     Begin a kind of example.  Like '@format', but use a smaller font
     size where possible.  Pair with '@end smallformat'.  *Note
     @small...::.

'@smallindentedblock'
     Like '@indentedblock', but use a smaller font size where possible.
     Pair with '@end smallindentedblock'.  *Note @small...::.

'@smalllisp'
     Begin an example of Lisp code.  Same as '@smallexample'.  Pair with
     '@end smalllisp'.  *Note @small...::.

'@smallquotation'
     Like '@quotation', but use a smaller font size where possible.
     Pair with '@end smallquotation'.  *Note @small...::.

'@sortas {KEY}'
     Used in the arguments to index commands to give a string by which
     the index entry should be sorted.  *Note Indexing Commands::.

'@sp N'
     Skip N blank lines.  *Note @sp::.

'@ss{}'
     Generate the German sharp-S es-zet letter, ss.  *Note Inserting
     Accents::.

'@strong {TEXT}'
     Emphasize TEXT more strongly than '@emph', by using *boldface*
     where possible; enclosed in asterisks in Info.  *Note Emphasizing
     Text: emph & strong.

'@sub {TEXT}'
     Set TEXT as a subscript.  *Note Inserting Subscripts and
     Superscripts::.

'@subheading TITLE'
     Print an unnumbered subsection-like heading, but omit from the
     table of contents of a printed manual.  In Info, the title is
     underlined with hyphens.  *Note @unnumberedsubsec @appendixsubsec
     @subheading::.

'@subsection TITLE'
     Begin a subsection within a section.  The subsection title appears
     in the table of contents.  In Info, the title is underlined with
     hyphens.  Same context-dependent numbering as '@section'.  *Note
     @subsection::.

'@subsubheading TITLE'
     Print an unnumbered subsubsection-like heading, but omit from the
     table of contents of a printed manual.  In Info, the title is
     underlined with periods.  *Note @subsubsection::.

'@subsubsection TITLE'
     Begin a subsubsection within a subsection.  The subsubsection title
     appears in the table of contents.  In Info, the title is underlined
     with periods.  Same context-dependent numbering as '@section'.
     *Note @subsubsection::.

'@subtitle TITLE'
     In a printed manual, set a subtitle in a normal sized font flush to
     the right-hand side of the page.  Not relevant to Info, which does
     not have title pages.  *Note @title @subtitle @author::.

'@summarycontents'
     Print a short table of contents.  Synonym for '@shortcontents'.
     *Note Generating a Table of Contents: Contents.

'@sup {TEXT}'
     Set TEXT as a superscript.  *Note Inserting Subscripts and
     Superscripts::.

'@syncodeindex FROM-INDEX TO-INDEX'
     Merge the index named in the first argument into the index named in
     the second argument, formatting the entries from the first index
     with '@code'.  *Note Combining Indices::.

'@synindex FROM-INDEX TO-INDEX'
     Merge the index named in the first argument into the index named in
     the second argument.  Do not change the font of FROM-INDEX entries.
     *Note Combining Indices::.

'@t{TEXT}'
     Set TEXT in a fixed-width, typewriter-like font.  No effect in
     Info.  *Note Fonts::.

'@tab'
     Separate columns in a row of a multitable.  *Note Multitable
     Rows::.

'@table FORMATTING-COMMAND'
     Begin a two-column table (description list), using '@item' for each
     entry.  Write each first column entry on the same line as '@item'.
     First column entries are printed in the font resulting from
     FORMATTING-COMMAND.  Pair with '@end table'.  *Note Making a
     Two-column Table: Two-column Tables.  Also see *note @ftable
     @vtable::, and *note @itemx::.

'@TeX{}'
     Generate the TeX logo.  *Note @TeX @LaTeX::.

'@tex'
     Enter TeX completely.  Pair with '@end tex'.  *Note Raw Formatter
     Commands::.

'@textdegree{}'
     Generate the degree symbol.  *Note @textdegree::.

'@thischapter'
'@thischaptername'
'@thischapternum'
'@thisfile'
'@thispage'
'@thistitle'
     Only allowed in a heading or footing.  Stands for, respectively,
     the number and name of the current chapter (in the format 'Chapter
     1: Title'), the current chapter name only, the current chapter
     number only, the filename, the current page number, and the title
     of the document, respectively.  *Note How to Make Your Own
     Headings: Custom Headings.

'@TH{}'
'@th{}'
     Generate the uppercase and lowercase Icelandic letter thorn,
     respectively: TH, th.  *Note Inserting Accents::.

'@tie{}'
     Generate a normal interword space at which a line break is not
     allowed.  *Note @tie::.

'@tieaccent{CC}'
     Generate a tie-after accent over the next two characters CC, as in
     'oo['.  *Note Inserting Accents::.

'@tindex ENTRY'
     Add ENTRY to the index of data types.  *Note Defining the Entries
     of an Index: Index Entries.

'@title TITLE'
     In a printed manual, set a title flush to the left-hand side of the
     page in a larger than normal font and underline it with a black
     rule.  Not relevant to Info, which does not have title pages.
     *Note @title @subtitle @author::.

'@titlefont{TEXT}'
     In a printed manual, print TEXT in a larger than normal font.
     *Note @titlefont @center @sp::.

'@titlepage'
     Begin the title page.  Write the command on a line of its own,
     paired with '@end titlepage'.  Nothing between '@titlepage' and
     '@end titlepage' appears in Info.  *Note @titlepage::.

'@today{}'
     Insert the current date, in '1 Jan 1900' style.  *Note How to Make
     Your Own Headings: Custom Headings.

'@top TITLE'
     Mark the topmost '@node' in the file, which must be defined on the
     line immediately preceding the '@top' command.  The title is
     formatted as a chapter-level heading.  The entire top node,
     including the '@node' and '@top' lines, are normally enclosed with
     '@ifnottex ... @end ifnottex'.  In TeX and 'texinfo-format-buffer',
     the '@top' command is merely a synonym for '@unnumbered'.  *Note
     makeinfo Pointer Creation::.

'@U{HEX}'
     Output a representation of Unicode character U+HEX.  *Note
     Inserting Unicode::.

'@u{C}'
'@ubaraccent{C}'
'@udotaccent{C}'
     Generate a breve, underbar, or underdot accent, respectively, over
     or under the character C, as in o(, o_, .o.  *Note Inserting
     Accents::.

'@unmacro MACRONAME'
     Undefine the macro '@MACRONAME' if it has been defined.  *Note
     Defining Macros::.

'@unnumbered TITLE'
     Begin a chapter that appears without chapter numbers of any kind.
     The title appears in the table of contents.  In Info, the title is
     underlined with asterisks.  *Note @unnumbered @appendix::.

'@unnumberedsec TITLE'
     Begin a section that appears without section numbers of any kind.
     The title appears in the table of contents of a printed manual.  In
     Info, the title is underlined with equal signs.  *Note
     @unnumberedsec @appendixsec @heading::.

'@unnumberedsubsec TITLE'
     Begin an unnumbered subsection.  The title appears in the table of
     contents.  In Info, the title is underlined with hyphens.  *Note
     @unnumberedsubsec @appendixsubsec @subheading::.

'@unnumberedsubsubsec TITLE'
     Begin an unnumbered subsubsection.  The title appears in the table
     of contents.  In Info, the title is underlined with periods.  *Note
     @subsubsection::.

'@uref{URL[, DISPLAYED-TEXT][, REPLACEMENT}'
'@url{URL[, DISPLAYED-TEXT][, REPLACEMENT}'
     Define a cross-reference to an external uniform resource locator,
     e.g., for the World Wide Web.  *Note @url::.

'@urefbreakstyle STYLE'
     Specify how '@uref'/'@url' should break at special characters:
     'after', 'before', 'none'.  *Note @url::.

'@v{C}'
     Generate check accent over the character C, as in o<.  *Note
     Inserting Accents::.

'@validatemenus ON-OFF'
     Control whether menus can be automatically generated.  *Note
     Writing a Menu::.

'@value{TXIVAR}'
     Insert the value, if any, of the Texinfo variable TXIVAR,
     previously defined by '@set'.  *Note @set @clear @value::.

'@var{METASYNTACTIC-VARIABLE}'
     Highlight a metasyntactic variable, which is something that stands
     for another piece of text.  *Note @var::.

'@verb{DELIM LITERAL DELIM}'
     Output LITERAL, delimited by the single character DELIM, exactly as
     is (in the fixed-width font), including any whitespace or Texinfo
     special characters.  *Note @verb::.

'@verbatim'
     Output the text of the environment exactly as is (in the
     fixed-width font).  Pair with '@end verbatim'.  *Note @verbatim::.

'@verbatiminclude FILENAME'
     Output the contents of FILENAME exactly as is (in the fixed-width
     font).  *Note @verbatiminclude::.

'@vindex ENTRY'
     Add ENTRY to the index of variables.  *Note Defining the Entries of
     an Index: Index Entries.

'@vskip AMOUNT'
     In a printed manual, insert whitespace so as to push text on the
     remainder of the page towards the bottom of the page.  Used in
     formatting the copyright page with the argument '0pt plus 1filll'.
     (Note spelling of 'filll'.)  '@vskip' may be used only in contexts
     ignored for Info.  *Note Copyright::.

'@vtable FORMATTING-COMMAND'
     Begin a two-column table, using '@item' for each entry.
     Automatically enter each of the items in the first column into the
     index of variables.  Pair with '@end vtable'.  The same as
     '@table', except for indexing.  *Note @ftable @vtable::.

'@w{TEXT}'
     Disallow line breaks within TEXT.  *Note @w::.

'@xml'
     Enter XML completely.  Pair with '@end xml'.  *Note Raw Formatter
     Commands::.

'@xref{NODE, [ENTRY], [NODE-TITLE], [INFO-FILE], [MANUAL]}'
     Make a reference that starts with 'See' in a printed manual.
     Follow command with a punctuation mark.  Only the first argument is
     mandatory.  *Note @xref::.

'@xrefautomaticsectiontitle ON-OFF'
     By default, use the section title instead of the node name in cross
     references.  *Note Three Arguments::.


File: texinfo.info,  Node: Command Contexts,  Prev: Command List,  Up: @-Command Details

A.3 @-Command Contexts
======================

Here we describe approximately which @-commands can be used in which
contexts.  It not exhaustive or meant to be a complete reference.
Discrepancies between the information here and the 'makeinfo' or TeX
implementations are most likely to be resolved in favor of the
implementation.

   By "general text" below, we mean anything except sectioning and other
such outer-level document commands, such as '@section', '@node', and
'@setfilename'.

   '@c', '@comment' and '@if ... @end if' conditional commands may
appear anywhere (except the conditionals must still be on lines by
themselves).  '@caption' may only appear in '@float' but may contain
general text.  '@footnote' content likewise.

   @-commands with braces marking text (such as '@strong', '@sc',
'@asis') may contain raw formatter commands such as '@html' but no other
block commands (other commands terminated by '@end') and may not be
split across paragraphs, but may otherwise contain general text.

   In addition to the block command restriction, on '@center', '@exdent'
and '@item' in '@table' lines, @-commands that makes only sense in a
paragraph are not accepted, such as '@indent'.

   In addition to the above, sectioning commands cannot contain
'@anchor', '@footnote' or '@verb'.

   In addition to the above, remaining commands ('@node', '@anchor',
'@printindex', '@ref', '@math', '@cindex', '@url', '@image', and so on)
cannot contain cross-reference commands ('@ref', '@xref', '@pxref' and
'@inforef').  In one last addition, '@shortcaption' may only appear
inside '@float'.

   For precise and complete information, we suggest looking into the
test suite in the sources, which exhaustively tries combinations.


File: texinfo.info,  Node: Tips,  Next: Sample Texinfo Files,  Prev: @-Command Details,  Up: Top

Appendix B Tips and Hints
*************************

Here are some tips for writing Texinfo documentation:

   * Write in the present tense, not in the past or the future.

   * Write actively!  For example, write "We recommend that ..." rather
     than "It is recommended that ...".

   * Use 70 or 72 as your fill column.  Longer lines are hard to read.

   * Include a copyright notice and copying permissions.

Index, Index, Index!
....................

Write many index entries, in different ways.  Readers like indices; they
are helpful and convenient.

   Although it is easiest to write index entries as you write the body
of the text, some people prefer to write entries afterwards.  In either
case, write an entry before the paragraph to which it applies.  This
way, an index entry points to the first page of a paragraph that is
split across pages.

   Here are more index-related hints we have found valuable:

   * Write each index entry differently, so each entry refers to a
     different place in the document.

   * Write index entries only where a topic is discussed significantly.
     For example, it is not useful to index "debugging information" in a
     chapter on reporting bugs.  Someone who wants to know about
     debugging information will certainly not find it in that chapter.

   * Consistently capitalize the first word of every concept index
     entry, or else consistently use lowercase.  Terse entries often
     call for lowercase; longer entries for capitalization.  Whichever
     case convention you use, please use one or the other consistently!
     Mixing the two styles looks bad.

   * Always capitalize or use uppercase for those words in an index for
     which this is proper, such as names of countries or acronyms.
     Always use the appropriate case for case-sensitive names, such as
     those in C or Lisp.

   * Write the indexing commands that refer to a whole section
     immediately after the section command, and write the indexing
     commands that refer to a paragraph before that paragraph.

     In the example that follows, a blank line comes after the index
     entry for "Leaping":

          @section The Dog and the Fox
          @cindex Jumping, in general
          @cindex Leaping

          @cindex Dog, lazy, jumped over
          @cindex Lazy dog jumped over
          @cindex Fox, jumps over dog
          @cindex Quick fox jumps over dog
          The quick brown fox jumps over the lazy dog.

     (Note that the example shows entries for the same concept that are
     written in different ways--'Lazy dog', and 'Dog, lazy'--so readers
     can look up the concept in different ways.)

Blank Lines
...........

   * Insert a blank line between a sectioning command and the first
     following sentence or paragraph, or between the indexing commands
     associated with the sectioning command and the first following
     sentence or paragraph, as shown in the tip on indexing.  It makes
     the source easier to read.

   * Always insert a blank line before a '@table' command and after an
     '@end table' command; but never insert a blank line after an
     '@table' command.

     For example,

          Types of fox:

          @table @samp
          @item Quick
          Jump over lazy dogs.

          @item Brown
          Also jump over lazy dogs.
          @end table

          @noindent
          On the other hand, ...

     Insert blank lines before and after '@itemize' ... '@end itemize'
     and '@enumerate' ... '@end enumerate' in the same way.

Complete Phrases
................

Complete phrases are easier to read than ...

   * Write entries in an itemized list as complete sentences; or at
     least, as complete phrases.  Incomplete expressions ... awkward ...
     like this.

   * Write the prefatory sentence or phrase for a multi-item list or
     table as a complete expression.  Do not write "You can set:";
     instead, write "You can set these variables:".  The former
     expression sounds cut off.

Editions, Dates and Versions
............................

Include edition numbers, version numbers, and dates in the '@copying'
text (for people reading the Texinfo file, and for the legal copyright
in the output files).  Then use '@insertcopying' in the '@titlepage'
section for people reading the printed output (*note Short Sample::).

   It is easiest to handle such version information using '@set' and
'@value'.  *Note @value Example::, and *note GNU Sample Texts::.

Definition Commands
...................

Definition commands are '@deffn', '@defun', '@defmac', and the like, and
enable you to write descriptions in a uniform format.

   * Write just one definition command for each entity you define with a
     definition command.  The automatic indexing feature creates an
     index entry that leads the reader to the definition.

   * Use '@table' ... '@end table' in an appendix that contains a
     summary of functions, not '@deffn' or other definition commands.

Capitalization
..............

   * Capitalize "Texinfo"; it is a name.  Do not write the 'x' or 'i' in
     uppercase.

   * Capitalize "Info"; it is a name.

   * Write TeX using the '@TeX{}' command.  Note the uppercase 'T' and
     'X'.  This command causes the formatters to typeset the name
     according to the wishes of Donald Knuth, who wrote TeX.  (Likewise
     '@LaTeX{}' for LaTeX.)

Spaces
......

Do not use spaces to format a Texinfo file, except inside of '@example'
... '@end example' and other literal environments and commands.

   For example, TeX fills the following:

        @kbd{C-x v}
        @kbd{M-x vc-next-action}
           Perform the next logical operation
           on the version-controlled file
           corresponding to the current buffer.

so it looks like this:

     'C-x v' 'M-x vc-next-action' Perform the next logical operation on
     the version-controlled file corresponding to the current buffer.

In this case, the text should be formatted with '@table', '@item', and
'@itemx', to create a table.

@code, @samp, @var, and '---'
.............................

   * Use '@code' around Lisp symbols, including command names.  For
     example,

          The main function is @code{vc-next-action}, ...

   * Avoid putting letters such as 's' immediately after an '@code'.
     Such letters look bad.

   * Use '@var' around meta-variables.  Do not write angle brackets
     around them.

   * Use three hyphens in a row, '---', to indicate a long dash.  TeX
     typesets these as a long dash and the Info formatters reduce three
     hyphens to two.

Periods Outside of Quotes
.........................

Place periods and other punctuation marks _outside_ of quotations,
unless the punctuation is part of the quotation.  This practice goes
against some publishing conventions in the United States, but enables
the reader to distinguish between the contents of the quotation and the
whole passage.

   For example, you should write the following sentence with the period
outside the end quotation marks:

     Evidently, 'au' is an abbreviation for ``author''.

since 'au' does _not_ serve as an abbreviation for 'author.' (with a
period following the word).

Introducing New Terms
.....................

   * Introduce new terms so that a reader who does not know them can
     understand them from context; or write a definition for the term.

     For example, in the following, the terms "check in", "register" and
     "delta" are all appearing for the first time; the example sentence
     should be rewritten so they are understandable.

          The major function assists you in checking in a file to your
          version control system and registering successive sets of
          changes to it as deltas.

   * Use the '@dfn' command around a word being introduced, to indicate
     that the reader should not expect to know the meaning already, and
     should expect to learn the meaning from this passage.

Program Invocation Nodes
........................

You can invoke programs such as Emacs, GCC, and 'gawk' from a shell.
The documentation for each program should contain a section that
describes this.  Unfortunately, if the node names and titles for these
sections are all different, they are difficult for users to find.

   So, there is a convention to name such sections with a phrase
beginning with the word 'Invoking', as in 'Invoking Emacs'; this way,
users can find the section easily.

ANSI C Syntax
.............

When you use '@example' to describe a C function's calling conventions,
use the ANSI C syntax, like this:

     void dld_init (char *@var{path});

And in the subsequent discussion, refer to the argument values by
writing the same argument names, again highlighted with '@var'.

   Avoid the obsolete style that looks like this:

     #include <dld.h>

     dld_init (path)
       char *path;

   Also, it is best to avoid writing '#include' above the declaration
just to indicate that the function is declared in a header file.  The
practice may give the misimpression that the '#include' belongs near the
declaration of the function.  Either state explicitly which header file
holds the declaration or, better yet, name the header file used for a
group of functions at the beginning of the section that describes the
functions.

Node Length
...........

Keep nodes (sections) to a reasonable length, whatever reasonable might
be in the given context.  Don't hesitate break up long nodes into
subnodes and have an extensive tree structure; that's what it's there
for.  Many times, readers will probably try to find a single specific
point in the manual, using search, indexing, or just plain guessing,
rather than reading the whole thing from beginning to end.

   You can use the 'texi-elements-by-size' utility to see a list of all
nodes (or sections) in the document, sorted by size (either lines or
words), to find candidates for splitting.  It's in the 'util/'
subdirectory of the Texinfo sources.

Bad Examples
............

Here are several examples of bad writing to avoid:

   In this example, say, " ... you must '@dfn'{check in} the new
version."  That flows better.

     When you are done editing the file, you must perform a '@dfn'{check
     in}.

   In the following example, say, "... makes a unified interface such as
VC mode possible."

     SCCS, RCS and other version-control systems all perform similar
     functions in broadly similar ways (it is this resemblance which
     makes a unified control mode like this possible).

   And in this example, you should specify what 'it' refers to:

     If you are working with other people, it assists in coordinating
     everyone's changes so they do not step on each other.

And Finally ...
...............

   * Pronounce TeX as if the 'X' were a Greek 'chi', as the last sound
     in the name 'Bach'.  But pronounce Texinfo as in 'speck':
     "teckinfo".

   * Write notes for yourself at the very end of a Texinfo file after
     the '@bye'.  None of the formatters process text after the '@bye';
     it is as if the text were within '@ignore' ... '@end ignore'.


File: texinfo.info,  Node: Sample Texinfo Files,  Next: Texinfo Mode,  Prev: Tips,  Up: Top

Appendix C Sample Texinfo Files
*******************************

The first example from the first chapter (*note Short Sample::) is given
here in its entirety, without commentary.  The second example includes
the full texts to be used in GNU manuals.

* Menu:

* Short Sample Texinfo File::
* GNU Sample Texts::
* Verbatim Copying License::
* All-permissive Copying License::


File: texinfo.info,  Node: Short Sample Texinfo File,  Next: GNU Sample Texts,  Up: Sample Texinfo Files

C.1 Short Sample
================

Here is a complete, short sample Texinfo file.  You can see this file,
with comments, in the first chapter.  *Note Short Sample::.

   In a nutshell: The 'makeinfo' program transforms a Texinfo source
file such as this into an Info file or HTML; and TeX typesets it for a
printed manual.


     \input texinfo
     @settitle Sample Manual 1.0

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

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

     @titlepage
     @title Sample Title
     @page
     @vskip 0pt plus 1filll
     @insertcopying
     @end titlepage

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

     @ifnottex
     @node Top
     @top GNU Sample

     This manual is for GNU Sample
     (version @value{VERSION}, @value{UPDATED}).
     @end ifnottex

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


     @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


     @node Index
     @unnumbered Index

     @printindex cp

     @bye


File: texinfo.info,  Node: GNU Sample Texts,  Next: Verbatim Copying License,  Prev: Short Sample Texinfo File,  Up: Sample Texinfo Files

C.2 GNU Sample Texts
====================

Following is a sample Texinfo document with the full texts that should
be used (adapted as necessary) in GNU manuals.

   As well as the legal texts, it also serves as a practical example of
how many elements in a GNU system can affect the manual.  If you're not
familiar with all these different elements, don't worry.  They're not
required and a perfectly good manual can be written without them.
They're included here nonetheless because many manuals do (or could)
benefit from them.

   *Note Short Sample::, for a minimal example of a Texinfo file.  *Note
Beginning and Ending a File::, for a full explanation of that minimal
example.

   Here are some notes on the example:

   * The '$Id:' comment is for the CVS (<http://www.nongnu.org/cvs/>),
     RCS (*note (rcs)Top::) and other version control systems, which
     expand it into a string such as:

          $Id: texinfo.texi 6987 2016-02-06 08:59:21Z gavin $

     (This is potentially useful in all sources that use version
     control, not just manuals.)  You may wish to include the '$Id:'
     comment in the '@copying' text, if you want a completely
     unambiguous reference to the documentation source version.

     If you want to literally write $Id$, use '@w': '@w{$}Id$'.
     Unfortunately, this technique does not work in plain text output,
     where it's not clear what should be done.

   * The 'version.texi' in the '@include' command is maintained
     automatically by Automake (*note (automake)Top::).  It sets the
     'VERSION' and 'UPDATED' values used elsewhere.  If your
     distribution doesn't use Automake, but you do use Emacs, you may
     find the time-stamp.el package helpful (*note (emacs)Time
     Stamps::).

   * The '@syncodeindex' command reflects the recommendation to use only
     one index where possible, to make it easier for readers to look up
     index entries.

   * The '@dircategory' is for constructing the Info directory.  *Note
     Installing Dir Entries::, which includes a variety of recommended
     category names.

   * The 'Invoking' node is a GNU standard to help users find the basic
     information about command-line usage of a given program.  *Note
     (standards)Manual Structure Details::.

   * It is best to include the entire GNU Free Documentation License in
     a GNU manual, unless the manual is only a few pages long.  Of
     course this sample is even shorter than that, but it includes the
     FDL anyway in order to show one conventional way to do so.  The
     'fdl.texi' file is available on the GNU machines and in the Texinfo
     and other GNU source distributions.

     The FDL provides for omitting itself under certain conditions, but
     in that case the sample texts given here have to be modified.
     *Note GNU Free Documentation License::.

   * If the FSF is not the copyright holder, then use the appropriate
     name.

   * If your manual is published on paper by the FSF or is longer than
     400 pages, you should include the standard FSF cover texts (*note
     (maintain)License Notices for Documentation::).

   * For documents that express your personal views, feelings or
     experiences, it is more appropriate to use a license permitting
     only verbatim copying, rather than the FDL.  *Note Verbatim Copying
     License::.

   Here is the sample document:

\input texinfo   @c -*-texinfo-*-
@comment $Id@w{$}
@comment %**start of header
@include version.texi
@settitle GNU Sample @value{VERSION}
@syncodeindex pg cp
@comment %**end of header
@copying
This manual is for GNU Sample (version @value{VERSION}, @value{UPDATED}),
which is an example in the Texinfo documentation.

Copyright @copyright{} 2016 Free Software Foundation, Inc.

@quotation
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
Texts.  A copy of the license is included in the section entitled
``GNU Free Documentation License''.
@end quotation
@end copying

@dircategory Texinfo documentation system
@direntry
* sample: (sample)Invoking sample.
@end direntry

@titlepage
@title GNU Sample
@subtitle for version @value{VERSION}, @value{UPDATED}
@author A.U. Thor (@email{bug-sample@@gnu.org})
@page
@vskip 0pt plus 1filll
@insertcopying
@end titlepage

@contents

@ifnottex
@node Top
@top GNU Sample

This manual is for GNU Sample (version @value{VERSION}, @value{UPDATED}).
@end ifnottex

@menu
* Invoking sample::
* GNU Free Documentation License::
* Index::
@end menu


@node Invoking sample
@chapter Invoking sample

@pindex sample
@cindex invoking @command{sample}

This is a sample manual.  There is no sample program to
invoke, but if there were, you could see its basic usage
and command line options here.


@node GNU Free Documentation License
@appendix GNU Free Documentation License

@include fdl.texi


@node Index
@unnumbered Index

@printindex cp

@bye


File: texinfo.info,  Node: Verbatim Copying License,  Next: All-permissive Copying License,  Prev: GNU Sample Texts,  Up: Sample Texinfo Files

C.3 Verbatim Copying License
============================

For software manuals and other documentation, it is critical to use a
license permitting free redistribution and updating, so that when a free
program is changed, the documentation can be updated as well.

   On the other hand, for documents that express your personal views,
feelings or experiences, it is more appropriate to use a license
permitting only verbatim copying.

   Here is sample text for such a license permitting verbatim copying
only.  This is just the license text itself.  For a complete sample
document, see the previous sections.

@copying
This document is a sample for allowing verbatim copying only.

Copyright @copyright{} 2016 Free Software Foundation, Inc.

@quotation
Permission is granted to make and distribute verbatim copies
of this entire document without royalty provided the
copyright notice and this permission notice are preserved.
@end quotation
@end copying


File: texinfo.info,  Node: All-permissive Copying License,  Prev: Verbatim Copying License,  Up: Sample Texinfo Files

C.4 All-permissive Copying License
==================================

For software manuals and other documentation, it is important to use a
license permitting free redistribution and updating, so that when a free
program is changed, the documentation can be updated as well.

   On the other hand, for small supporting files, short manuals (under
300 lines long) and rough documentation (README files, INSTALL files,
etc.), the full FDL would be overkill.  They can use a simple
all-permissive license.

   Here is sample text for such an all-permissive license.  This is just
the license text itself.  For a complete sample document, see the
previous sections.

     Copyright @copyright{} 2016 Free Software Foundation, Inc.

     Copying and distribution of this file, with or without modification,
     are permitted in any medium without royalty provided the copyright
     notice and this notice are preserved.


File: texinfo.info,  Node: Texinfo Mode,  Next: Headings,  Prev: Sample Texinfo Files,  Up: Top

Appendix D Using Texinfo Mode
*****************************

You may edit a Texinfo file with any text editor you choose.  A Texinfo
file is no different from any other ASCII file.  However, GNU Emacs
comes with a special mode, called Texinfo mode, that provides Emacs
commands and tools to help ease your work.

* Menu:

* Texinfo Mode Overview::       How Texinfo mode can help you.
* Emacs Editing::               Texinfo mode adds to GNU Emacs' general
                                  purpose editing features.
* Inserting::                   How to insert frequently used @-commands.
* Showing the Structure::       How to show the structure of a file.
* Updating Nodes and Menus::    How to update or create new nodes and menus.
* Info Formatting::             How to format for Info.
* Printing::                    How to format and print part or all of a file.
* Texinfo Mode Summary::        Summary of all the Texinfo mode commands.


File: texinfo.info,  Node: Texinfo Mode Overview,  Next: Emacs Editing,  Up: Texinfo Mode

D.1 Texinfo Mode Overview
=========================

Texinfo mode provides special features for working with Texinfo files.
You can:

   * Insert frequently used @-commands.

   * Automatically create '@node' lines.

   * Show the structure of a Texinfo source file.

   * Automatically create or update the 'Next', 'Previous', and 'Up'
     pointers of a node.

   * Automatically create or update menus.

   * Automatically create a master menu.

   * Format a part or all of a file for Info.

   * Typeset and print part or all of a file.

   Perhaps the two most helpful features are those for inserting
frequently used @-commands and for creating node pointers and menus.


File: texinfo.info,  Node: Emacs Editing,  Next: Inserting,  Prev: Texinfo Mode Overview,  Up: Texinfo Mode

D.2 The Usual GNU Emacs Editing Commands
========================================

In most cases, the usual Text mode commands work the same in Texinfo
mode as they do in Text mode.  Texinfo mode adds new editing commands
and tools to GNU Emacs' general purpose editing features.  The major
difference concerns filling.  In Texinfo mode, the paragraph separation
variable and syntax table are redefined so that Texinfo commands that
should be on lines of their own are not inadvertently included in
paragraphs.  Thus, the 'M-q' ('fill-paragraph') command will refill a
paragraph but not mix an indexing command on a line adjacent to it into
the paragraph.

   In addition, Texinfo mode sets the 'page-delimiter' variable to the
value of 'texinfo-chapter-level-regexp'; by default, this is a regular
expression matching the commands for chapters and their equivalents,
such as appendices.  With this value for the page delimiter, you can
jump from chapter title to chapter title with the 'C-x ]'
('forward-page') and 'C-x [' ('backward-page') commands and narrow to a
chapter with the 'C-x n p' ('narrow-to-page') command.  (*Note
(emacs)Pages::, for details about the page commands.)

   You may name a Texinfo file however you wish, but the convention is
to end a Texinfo file name with one of the extensions '.texinfo',
'.texi', '.txi', or '.tex'.  A longer extension is preferred, since it
is explicit, but a shorter extension may be necessary for operating
systems that limit the length of file names.  GNU Emacs automatically
enters Texinfo mode when you visit a file with a '.texinfo', '.texi' or
'.txi' extension.  Also, Emacs switches to Texinfo mode when you visit a
file that has '-*-texinfo-*-' in its first line.  If ever you are in
another mode and wish to switch to Texinfo mode, type 'M-x
texinfo-mode'.

   Like all other Emacs features, you can customize or enhance Texinfo
mode as you wish.  In particular, the keybindings are very easy to
change.  The keybindings described here are the default or standard
ones.


File: texinfo.info,  Node: Inserting,  Next: Showing the Structure,  Prev: Emacs Editing,  Up: Texinfo Mode

D.3 Inserting Frequently Used Commands
======================================

Texinfo mode provides commands to insert various frequently used
@-commands into the buffer.  You can use these commands to save
keystrokes.

   The insert commands are invoked by typing 'C-c' twice and then the
first letter of the @-command:

'C-c C-c c'
'M-x texinfo-insert-@code'
     Insert '@code{}' and put the cursor between the braces.

'C-c C-c d'
'M-x texinfo-insert-@dfn'
     Insert '@dfn{}' and put the cursor between the braces.

'C-c C-c e'
'M-x texinfo-insert-@end'
     Insert '@end' and attempt to insert the correct following word,
     such as 'example' or 'table'.  (This command does not handle nested
     lists correctly, but inserts the word appropriate to the
     immediately preceding list.)

'C-c C-c i'
'M-x texinfo-insert-@item'
     Insert '@item' and put the cursor at the beginning of the next
     line.

'C-c C-c k'
'M-x texinfo-insert-@kbd'
     Insert '@kbd{}' and put the cursor between the braces.

'C-c C-c n'
'M-x texinfo-insert-@node'
     Insert '@node' and a comment line listing the sequence for the
     'Next', 'Previous', and 'Up' nodes.  Leave point after the '@node'.

'C-c C-c o'
'M-x texinfo-insert-@noindent'
     Insert '@noindent' and put the cursor at the beginning of the next
     line.

'C-c C-c s'
'M-x texinfo-insert-@samp'
     Insert '@samp{}' and put the cursor between the braces.

'C-c C-c t'
'M-x texinfo-insert-@table'
     Insert '@table' followed by a <SPC> and leave the cursor after the
     <SPC>.

'C-c C-c v'
'M-x texinfo-insert-@var'
     Insert '@var{}' and put the cursor between the braces.

'C-c C-c x'
'M-x texinfo-insert-@example'
     Insert '@example' and put the cursor at the beginning of the next
     line.

'C-c C-c {'
'M-x texinfo-insert-braces'
     Insert '{}' and put the cursor between the braces.

'C-c }'
'C-c ]'
'M-x up-list'
     Move from between a pair of braces forward past the closing brace.
     Typing 'C-c ]' is easier than typing 'C-c }', which is, however,
     more mnemonic; hence the two keybindings.  (Also, you can move out
     from between braces by typing 'C-f'.)

   To put a command such as '@code{...}' around an _existing_ word,
position the cursor in front of the word and type 'C-u 1 C-c C-c c'.
This makes it easy to edit existing plain text.  The value of the prefix
argument tells Emacs how many words following point to include between
braces--'1' for one word, '2' for two words, and so on.  Use a negative
argument to enclose the previous word or words.  If you do not specify a
prefix argument, Emacs inserts the @-command string and positions the
cursor between the braces.  This feature works only for those @-commands
that operate on a word or words within one line, such as '@kbd' and
'@var'.

   This set of insert commands was created after analyzing the frequency
with which different @-commands are used in the 'GNU Emacs Manual' and
the 'GDB Manual'.  If you wish to add your own insert commands, you can
bind a keyboard macro to a key, use abbreviations, or extend the code in
'texinfo.el'.

   'C-c C-c C-d' ('texinfo-start-menu-description') is an insert command
that works differently from the other insert commands.  It inserts a
node's section or chapter title in the space for the description in a
menu entry line.  (A menu entry has three parts, the entry name, the
node name, and the description.  Only the node name is required, but a
description helps explain what the node is about.  *Note The Parts of a
Menu: Menu Parts.)

   To use 'texinfo-start-menu-description', position point in a menu
entry line and type 'C-c C-c C-d'.  The command looks for and copies the
title that goes with the node name, and inserts the title as a
description; it positions point at beginning of the inserted text so you
can edit it.  The function does not insert the title if the menu entry
line already contains a description.

   This command is only an aid to writing descriptions; it does not do
the whole job.  You must edit the inserted text since a title tends to
use the same words as a node name but a useful description uses
different words.


File: texinfo.info,  Node: Showing the Structure,  Next: Updating Nodes and Menus,  Prev: Inserting,  Up: Texinfo Mode

D.4 Showing the Sectioning Structure of a File
==============================================

You can show the sectioning structure of a Texinfo file by using the
'C-c C-s' command ('texinfo-show-structure').  This command lists the
lines that begin with the @-commands for '@chapter', '@section', and the
like.  It constructs what amounts to a table of contents.  These lines
are displayed in another buffer called the '*Occur*' buffer.  In that
buffer, you can position the cursor over one of the lines and use the
'C-c C-c' command ('occur-mode-goto-occurrence'), to jump to the
corresponding spot in the Texinfo file.

'C-c C-s'
'M-x texinfo-show-structure'
     Show the '@chapter', '@section', and such lines of a Texinfo file.

'C-c C-c'
'M-x occur-mode-goto-occurrence'
     Go to the line in the Texinfo file corresponding to the line under
     the cursor in the '*Occur*' buffer.

   If you call 'texinfo-show-structure' with a prefix argument by typing
'C-u C-c C-s', it will list not only those lines with the @-commands for
'@chapter', '@section', and the like, but also the '@node' lines.  You
can use 'texinfo-show-structure' with a prefix argument to check whether
the 'Next', 'Previous', and 'Up' pointers of an '@node' line are
correct.

   Often, when you are working on a manual, you will be interested only
in the structure of the current chapter.  In this case, you can mark off
the region of the buffer that you are interested in by using the 'C-x n
n' ('narrow-to-region') command and 'texinfo-show-structure' will work
on only that region.  To see the whole buffer again, use 'C-x n w'
('widen').  (*Note (emacs)Narrowing::, for more information about the
narrowing commands.)

   In addition to providing the 'texinfo-show-structure' command,
Texinfo mode sets the value of the page delimiter variable to match the
chapter-level @-commands.  This enables you to use the 'C-x ]'
('forward-page') and 'C-x [' ('backward-page') commands to move forward
and backward by chapter, and to use the 'C-x n p' ('narrow-to-page')
command to narrow to a chapter.  *Note (emacs)Pages::, for more
information about the page commands.


File: texinfo.info,  Node: Updating Nodes and Menus,  Next: Info Formatting,  Prev: Showing the Structure,  Up: Texinfo Mode

D.5 Updating Nodes and Menus
============================

Texinfo mode provides commands for automatically creating or updating
menus and node pointers.  The commands are called "update" commands
because their most frequent use is for updating a Texinfo file after you
have worked on it; but you can use them to insert the 'Next',
'Previous', and 'Up' pointers into an '@node' line that has none and to
create menus in a file that has none.

   If you do not use any updating commands, you need to write menus by
hand, which is a tedious task.

* Menu:

* Updating Commands::           Five major updating commands.
* Updating Requirements::       How to structure a Texinfo file for
                                  using the updating command.
* Other Updating Commands::     How to indent descriptions, insert
                                  missing nodes lines, and update
                                  nodes in sequence.


File: texinfo.info,  Node: Updating Commands,  Next: Updating Requirements,  Up: Updating Nodes and Menus

D.5.1 The Updating Commands
---------------------------

You can use the updating commands to:

   * insert or update the 'Next', 'Previous', and 'Up' pointers of a
     node,

   * insert or update the menu for a section, and

   * create a master menu for a Texinfo source file.

   You can also use the commands to update all the nodes and menus in a
region or in a whole Texinfo file.

   The updating commands work only with conventional Texinfo files,
which are structured hierarchically like books.  In such files, a
structuring command line must follow closely after each '@node' line,
except for the 'Top' '@node' line.  (A "structuring command line" is a
line beginning with '@chapter', '@section', or other similar command.)

   You can write the structuring command line on the line that follows
immediately after an '@node' line or else on the line that follows after
a single '@comment' line or a single '@ifinfo' line.  You cannot
interpose more than one line between the '@node' line and the
structuring command line; and you may interpose only a '@comment' line
or an '@ifinfo' line.

   Commands which work on a whole buffer require that the 'Top' node be
followed by a node with a '@chapter' or equivalent-level command.  The
menu updating commands will not create a main or master menu for a
Texinfo file that has only '@chapter'-level nodes!  The menu updating
commands only create menus _within_ nodes for lower level nodes.  To
create a menu of chapters, you must provide a 'Top' node.

   The menu updating commands remove menu entries that refer to other
Info files since they do not refer to nodes within the current buffer.
This is a deficiency.  Rather than use menu entries, you can use cross
references to refer to other Info files.  None of the updating commands
affect cross-references.

   Texinfo mode has five updating commands that are used most often: two
are for updating the node pointers or menu of a single node (or a
region); two are for updating every node pointer and menu in a file; and
one, the 'texinfo-master-menu' command, is for creating a master menu
for a complete file, and optionally, for updating every node and menu in
the whole Texinfo file.

   The 'texinfo-master-menu' command is the primary command:

'C-c C-u m'
'M-x texinfo-master-menu'
     Create or update a master menu that includes all the other menus
     (incorporating the descriptions from pre-existing menus, if any).

     With an argument (prefix argument, 'C-u,' if interactive), first
     create or update all the nodes and all the regular menus in the
     buffer before constructing the master menu.  (*Note The Top Node
     and Master Menu: The Top Node, for more about a master menu.)

     For 'texinfo-master-menu' to work, the Texinfo file must have a
     'Top' node and at least one subsequent node.

     After extensively editing a Texinfo file, you can type the
     following:

          C-u M-x texinfo-master-menu
     or
          C-u C-c C-u m

     This updates all the nodes and menus completely and all at once.

   The other major updating commands do smaller jobs and are designed
for the person who updates nodes and menus as he or she writes a Texinfo
file.

   The commands are:

'C-c C-u C-n'
'M-x texinfo-update-node'
     Insert the 'Next', 'Previous', and 'Up' pointers for the node that
     point is within (i.e., for the '@node' line preceding point).  If
     the '@node' line has pre-existing 'Next', 'Previous', or 'Up'
     pointers in it, the old pointers are removed and new ones inserted.
     With an argument (prefix argument, 'C-u', if interactive), this
     command updates all '@node' lines in the region (which is the text
     between point and mark).

'C-c C-u C-m'
'M-x texinfo-make-menu'
     Create or update the menu in the node that point is within.  With
     an argument ('C-u' as prefix argument, if interactive), the command
     makes or updates menus for the nodes which are either within or a
     part of the region.

     Whenever 'texinfo-make-menu' updates an existing menu, the
     descriptions from that menu are incorporated into the new menu.
     This is done by copying descriptions from the existing menu to the
     entries in the new menu that have the same node names.  If the node
     names are different, the descriptions are not copied to the new
     menu.

'C-c C-u C-e'
'M-x texinfo-every-node-update'
     Insert or update the 'Next', 'Previous', and 'Up' pointers for
     every node in the buffer.

'C-c C-u C-a'
'M-x texinfo-all-menus-update'
     Create or update all the menus in the buffer.  With an argument
     ('C-u' as prefix argument, if interactive), first insert or update
     all the node pointers before working on the menus.

     If a master menu exists, the 'texinfo-all-menus-update' command
     updates it; but the command does not create a new master menu if
     none already exists.  (Use the 'texinfo-master-menu' command for
     that.)

     When working on a document that does not merit a master menu, you
     can type the following:

          C-u C-c C-u C-a
     or
          C-u M-x texinfo-all-menus-update

     This updates all the nodes and menus.

   The 'texinfo-column-for-description' variable specifies the column to
which menu descriptions are indented.  By default, the value is 32
although it can be useful to reduce it to as low as 24.  You can set the
variable via customization (*note (emacs)Customization::) or with the
'M-x set-variable' command (*note Examining and Setting Variables:
(emacs)Examining.).

   Also, the 'texinfo-indent-menu-description' command may be used to
indent existing menu descriptions to a specified column.  Finally, if
you wish, you can use the 'texinfo-insert-node-lines' command to insert
missing '@node' lines into a file.  (*Note Other Updating Commands::,
for more information.)


File: texinfo.info,  Node: Updating Requirements,  Next: Other Updating Commands,  Prev: Updating Commands,  Up: Updating Nodes and Menus

D.5.2 Updating Requirements
---------------------------

To use the updating commands, you must organize the Texinfo file
hierarchically with chapters, sections, subsections, and the like.  When
you construct the hierarchy of the manual, do not 'jump down' more than
one level at a time: you can follow the 'Top' node with a chapter, but
not with a section; you can follow a chapter with a section, but not
with a subsection.  However, you may 'jump up' any number of levels at
one time--for example, from a subsection to a chapter.

   Each '@node' line, with the exception of the line for the 'Top' node,
must be followed by a line with a structuring command such as
'@chapter', '@section', or '@unnumberedsubsec'.

   Each '@node' line/structuring-command line combination must look
either like this:

     @node     Comments,  Minimum, Conventions, Overview
     @comment  node-name, next,    previous,    up
     @section Comments

   or like this (without the '@comment' line):

     @node Comments, Minimum, Conventions, Overview
     @section Comments

   or like this (without the explicit node pointers):

     @node Comments
     @section Comments

In this example, 'Comments' is the name of both the node and the
section.  The next node is called 'Minimum' and the previous node is
called 'Conventions'.  The 'Comments' section is within the 'Overview'
node, which is specified by the 'Up' pointer.  (Instead of an '@comment'
line, you may also write an '@ifinfo' line.)

   If a file has a 'Top' node, it must be called 'top' or 'Top' and be
the first node in the file.

   The menu updating commands create a menu of sections within a
chapter, a menu of subsections within a section, and so on.  This means
that you must have a 'Top' node if you want a menu of chapters.

   Incidentally, the 'makeinfo' command will create an Info file for a
hierarchically organized Texinfo file that lacks 'Next', 'Previous' and
'Up' pointers.  Thus, if you can be sure that your Texinfo file will be
formatted with 'makeinfo', you have no need for the update node
commands.  (*Note Creating an Info File::, for more information about
'makeinfo'.)


File: texinfo.info,  Node: Other Updating Commands,  Prev: Updating Requirements,  Up: Updating Nodes and Menus

D.5.3 Other Updating Commands
-----------------------------

In addition to the five major updating commands, Texinfo mode possesses
several less frequently used updating commands:

'M-x texinfo-insert-node-lines'
     Insert '@node' lines before the '@chapter', '@section', and other
     sectioning commands wherever they are missing throughout a region
     in a Texinfo file.

     With an argument ('C-u' as prefix argument, if interactive), the
     command 'texinfo-insert-node-lines' not only inserts '@node' lines
     but also inserts the chapter or section titles as the names of the
     corresponding nodes.  In addition, it inserts the titles as node
     names in pre-existing '@node' lines that lack names.  Since node
     names should be more concise than section or chapter titles, you
     must manually edit node names so inserted.

     For example, the following marks a whole buffer as a region and
     inserts '@node' lines and titles throughout:

          C-x h C-u M-x texinfo-insert-node-lines

     This command inserts titles as node names in '@node' lines; the
     'texinfo-start-menu-description' command (*note Inserting
     Frequently Used Commands: Inserting.) inserts titles as
     descriptions in menu entries, a different action.  However, in both
     cases, you need to edit the inserted text.

'M-x texinfo-multiple-files-update'
     Update nodes and menus in a document built from several separate
     files.  With 'C-u' as a prefix argument, create and insert a master
     menu in the outer file.  With a numeric prefix argument, such as
     'C-u 2', first update all the menus and all the 'Next', 'Previous',
     and 'Up' pointers of all the included files before creating and
     inserting a master menu in the outer file.  The
     'texinfo-multiple-files-update' command is described in the
     appendix on '@include' files.  *Note
     texinfo-multiple-files-update::.

'M-x texinfo-indent-menu-description'
     Indent every description in the menu following point to the
     specified column.  You can use this command to give yourself more
     space for descriptions.  With an argument ('C-u' as prefix
     argument, if interactive), the 'texinfo-indent-menu-description'
     command indents every description in every menu in the region.
     However, this command does not indent the second and subsequent
     lines of a multi-line description.

'M-x texinfo-sequential-node-update'
     Insert the names of the nodes immediately following and preceding
     the current node as the 'Next' or 'Previous' pointers regardless of
     those nodes' hierarchical level.  This means that the 'Next' node
     of a subsection may well be the next chapter.  Sequentially ordered
     nodes are useful for novels and other documents that you read
     through sequentially.  (However, in Info, the 'g *' command lets
     you look through the file sequentially, so sequentially ordered
     nodes are not strictly necessary.)  With an argument (prefix
     argument, if interactive), the 'texinfo-sequential-node-update'
     command sequentially updates all the nodes in the region.


File: texinfo.info,  Node: Info Formatting,  Next: Printing,  Prev: Updating Nodes and Menus,  Up: Texinfo Mode

D.6 Formatting for Info
=======================

Texinfo mode provides several commands for formatting part or all of a
Texinfo file for Info.  Often, when you are writing a document, you want
to format only part of a file--that is, a region.

   You can use either the 'texinfo-format-region' or the
'makeinfo-region' command to format a region:

'C-c C-e C-r'
'M-x texinfo-format-region'
'C-c C-m C-r'
'M-x makeinfo-region'
     Format the current region for Info.

   You can use either the 'texinfo-format-buffer' or the
'makeinfo-buffer' command to format a whole buffer:

'C-c C-e C-b'
'M-x texinfo-format-buffer'
'C-c C-m C-b'
'M-x makeinfo-buffer'
     Format the current buffer for Info.

   For example, after writing a Texinfo file, you can type the
following:

     C-u C-c C-u m
or
     C-u M-x texinfo-master-menu

This updates all the nodes and menus.  Then type the following to create
an Info file:

     C-c C-m C-b
or
     M-x makeinfo-buffer

   *Note Creating an Info File:: for details about Info formatting.


File: texinfo.info,  Node: Printing,  Next: Texinfo Mode Summary,  Prev: Info Formatting,  Up: Texinfo Mode

D.7 Printing
============

Typesetting and printing a Texinfo file is a multi-step process in which
you first create a file for printing (called a DVI file), and then print
the file.  Optionally, you may also create indices.  To do this, you
must run the 'texindex' command after first running the 'tex'
typesetting command; and then you must run the 'tex' command again.  Or
else run the 'texi2dvi' command which automatically creates indices as
needed (*note Format with texi2dvi::).

   Often, when you are writing a document, you want to typeset and print
only part of a file to see what it will look like.  You can use the
'texinfo-tex-region' and related commands for this purpose.  Use the
'texinfo-tex-buffer' command to format all of a buffer.

'C-c C-t C-b'
'M-x texinfo-tex-buffer'
     Run 'texi2dvi' on the buffer.  In addition to running TeX on the
     buffer, this command automatically creates or updates indices as
     needed.

'C-c C-t C-r'
'M-x texinfo-tex-region'
     Run TeX on the region.

'C-c C-t C-i'
'M-x texinfo-texindex'
     Run 'texindex' to sort the indices of a Texinfo file formatted with
     'texinfo-tex-region'.  The 'texinfo-tex-region' command does not
     run 'texindex' automatically; it only runs the 'tex' typesetting
     command.  You must run the 'texinfo-tex-region' command a second
     time after sorting the raw index files with the 'texindex' command.
     (Usually, you do not format an index when you format a region, only
     when you format a buffer.  Now that the 'texi2dvi' command exists,
     there is little or no need for this command.)

'C-c C-t C-p'
'M-x texinfo-tex-print'
     Print the file (or the part of the file) previously formatted with
     'texinfo-tex-buffer' or 'texinfo-tex-region'.

   For 'texinfo-tex-region' or 'texinfo-tex-buffer' to work, the file
_must_ start with a '\input texinfo' line and must include a '@settitle'
line.  The file must end with '@bye' on a line by itself.  (When you use
'texinfo-tex-region', you must surround the '@settitle' line with
start-of-header and end-of-header lines.)

   *Note Hardcopy::, for a description of the other TeX related
commands, such as 'tex-show-print-queue'.


File: texinfo.info,  Node: Texinfo Mode Summary,  Prev: Printing,  Up: Texinfo Mode

D.8 Texinfo Mode Summary
========================

In Texinfo mode, each set of commands has default keybindings that begin
with the same keys.  All the commands that are custom-created for
Texinfo mode begin with 'C-c'.  The keys are somewhat mnemonic.

Insert Commands
---------------

The insert commands are invoked by typing 'C-c' twice and then the first
letter of the @-command to be inserted.  (It might make more sense
mnemonically to use 'C-c C-i', for 'custom insert', but 'C-c C-c' is
quick to type.)

     C-c C-c c       Insert '@code'.
     C-c C-c d       Insert '@dfn'.
     C-c C-c e       Insert '@end'.
     C-c C-c i       Insert '@item'.
     C-c C-c n       Insert '@node'.
     C-c C-c s       Insert '@samp'.
     C-c C-c v       Insert '@var'.
     C-c {       Insert braces.
     C-c ]
     C-c }       Move out of enclosing braces.

     C-c C-c C-d     Insert a node's section title
                    in the space for the description
                    in a menu entry line.

Show Structure
--------------

The 'texinfo-show-structure' command is often used within a narrowed
region.

     C-c C-s         List all the headings.

The Master Update Command
-------------------------

The 'texinfo-master-menu' command creates a master menu; and can be used
to update every node and menu in a file as well.

     C-c C-u m
     M-x texinfo-master-menu
                    Create or update a master menu.

     C-u C-c C-u m   With 'C-u' as a prefix argument, first
                    create or update all nodes and regular
                    menus, and then create a master menu.

Update Pointers
---------------

The update pointer commands are invoked by typing 'C-c C-u' and then
either 'C-n' for 'texinfo-update-node' or 'C-e' for
'texinfo-every-node-update'.

     C-c C-u C-n     Update a node.
     C-c C-u C-e     Update every node in the buffer.

Update Menus
------------

Invoke the update menu commands by typing 'C-c C-u' and then either
'C-m' for 'texinfo-make-menu' or 'C-a' for 'texinfo-all-menus-update'.
To update both nodes and menus at the same time, precede 'C-c C-u C-a'
with 'C-u'.

     C-c C-u C-m     Make or update a menu.

     C-c C-u C-a     Make or update all
                    menus in a buffer.

     C-u C-c C-u C-a With 'C-u' as a prefix argument,
                    first create or update all nodes and
                    then create or update all menus.

Format for Info
---------------

The Info formatting commands that are written in Emacs Lisp are invoked
by typing 'C-c C-e' and then either 'C-r' for a region or 'C-b' for the
whole buffer.

   The Info formatting commands that are written in C and based on the
'makeinfo' program are invoked by typing 'C-c C-m' and then either 'C-r'
for a region or 'C-b' for the whole buffer.

Use the 'texinfo-format...' commands:

     C-c C-e C-r     Format the region.
     C-c C-e C-b     Format the buffer.

Use 'makeinfo':

     C-c C-m C-r     Format the region.
     C-c C-m C-b     Format the buffer.
     C-c C-m C-l     Recenter the 'makeinfo' output buffer.
     C-c C-m C-k     Kill the 'makeinfo' formatting job.

Typeset and Print
-----------------

The TeX typesetting and printing commands are invoked by typing 'C-c
C-t' and then another control command: 'C-r' for 'texinfo-tex-region',
'C-b' for 'texinfo-tex-buffer', and so on.

     C-c C-t C-r     Run TeX on the region.
     C-c C-t C-b     Run texi2dvi on the buffer.
     C-c C-t C-i     Run texindex.
     C-c C-t C-p     Print the DVI file.
     C-c C-t C-q     Show the print queue.
     C-c C-t C-d     Delete a job from the print queue.
     C-c C-t C-k     Kill the current TeX formatting job.
     C-c C-t C-x     Quit a currently stopped TeX formatting job.
     C-c C-t C-l     Recenter the output buffer.

Other Updating Commands
-----------------------

The remaining updating commands do not have standard keybindings because
they are rarely used.

     M-x texinfo-insert-node-lines
                    Insert missing '@node' lines in region.
                    With 'C-u' as a prefix argument,
                    use section titles as node names.

     M-x texinfo-multiple-files-update
                    Update a multi-file document.
                    With 'C-u 2' as a prefix argument,
                    create or update all nodes and menus
                    in all included files first.

     M-x texinfo-indent-menu-description
                    Indent descriptions.

     M-x texinfo-sequential-node-update
                    Insert node pointers in strict sequence.


File: texinfo.info,  Node: Headings,  Next: Catching Mistakes,  Prev: Texinfo Mode,  Up: Top

Appendix E Page Headings
************************

Most printed manuals contain headings along the top of every page except
the title and copyright pages.  Some manuals also contain footings.
Headings and footings have no meaning in Info or the other output
formats.

* Menu:

* Headings Introduced::         Conventions for using page headings.
* Heading Format::              Standard page heading formats.
* Heading Choice::              How to specify the type of page heading.
* Custom Headings::             How to create your own headings and footings.


File: texinfo.info,  Node: Headings Introduced,  Next: Heading Format,  Up: Headings

E.1 Headings Introduced
=======================

Texinfo provides standard page heading formats for manuals that are
printed on one side of each sheet of paper and for manuals that are
printed on both sides of the paper.  Typically, you will use these
formats, but you can specify your own format if you wish.

   In addition, you can specify whether chapters should begin on a new
page, or merely continue the same page as the previous chapter; and if
chapters begin on new pages, you can specify whether they must be
odd-numbered pages.

   By convention, a book is printed on both sides of each sheet of
paper.  When you open a book, the right-hand page is odd-numbered, and
chapters begin on right-hand pages--a preceding left-hand page is left
blank if necessary.  Reports, however, are often printed on just one
side of paper, and chapters begin on a fresh page immediately following
the end of the preceding chapter.  In short or informal reports,
chapters often do not begin on a new page at all, but are separated from
the preceding text by a small amount of whitespace.

   The '@setchapternewpage' command controls whether chapters begin on
new pages, and whether one of the standard heading formats is used.  In
addition, Texinfo has several heading and footing commands that you can
use to generate your own heading and footing formats.

   In Texinfo, headings and footings are single lines at the tops and
bottoms of pages; you cannot create multiline headings or footings.
Each header or footer line is divided into three parts: a left part, a
middle part, and a right part.  Any part, or a whole line, may be left
blank.  Text for the left part of a header or footer line is set
flushleft; text for the middle part is centered; and, text for the right
part is set flushright.


File: texinfo.info,  Node: Heading Format,  Next: Heading Choice,  Prev: Headings Introduced,  Up: Headings

E.2 Standard Heading Formats
============================

Texinfo provides two standard heading formats, one for manuals printed
on one side of each sheet of paper, and the other for manuals printed on
both sides of the paper.

   By default, nothing is specified for the footing of a Texinfo file,
so the footing remains blank.

   The standard format for single-sided printing consists of a header
line in which the left-hand part contains the name of the chapter, the
central part is blank, and the right-hand part contains the page number.

   A single-sided page looks like this:

       _______________________
      |                       |
      | chapter   page number |
      |                       |
      | Start of text ...     |
      | ...                   |
      |                       |

   The standard format for two-sided printing depends on whether the
page number is even or odd.  By convention, even-numbered pages are on
the left- and odd-numbered pages are on the right.  (TeX will adjust the
widths of the left- and right-hand margins.  Usually, widths are
correct, but during double-sided printing, it is wise to check that
pages will bind properly--sometimes a printer will produce output in
which the even-numbered pages have a larger right-hand margin than the
odd-numbered pages.)

   In the standard double-sided format, the left part of the left-hand
(even-numbered) page contains the page number, the central part is
blank, and the right part contains the title (specified by the
'@settitle' command).  The left part of the right-hand (odd-numbered)
page contains the name of the chapter, the central part is blank, and
the right part contains the page number.

   Two pages, side by side as in an open book, look like this:

       _______________________     _______________________
      |                       |   |                       |
      | page number     title |   | chapter   page number |
      |                       |   |                       |
      | Start of text ...     |   | More  text ...        |
      | ...                   |   | ...                   |
      |                       |   |                       |

The chapter name is preceded by the word "Chapter", the chapter number
and a colon.  This makes it easier to keep track of where you are in the
manual.


File: texinfo.info,  Node: Heading Choice,  Next: Custom Headings,  Prev: Heading Format,  Up: Headings

E.3 Specifying the Type of Heading
==================================

TeX does not begin to generate page headings for a standard Texinfo file
until it reaches the '@end titlepage' command.  Thus, the title and
copyright pages are not numbered.  The '@end titlepage' command causes
TeX to begin to generate page headings according to a standard format
specified by the '@setchapternewpage' command that precedes the
'@titlepage' section.

   There are four possibilities:

No '@setchapternewpage' command
     Cause TeX to specify the single-sided heading format, with chapters
     on new pages.  This is the same as '@setchapternewpage on'.

'@setchapternewpage on'
     Specify the single-sided heading format, with chapters on new
     pages.

'@setchapternewpage off'
     Cause TeX to start a new chapter on the same page as the last page
     of the preceding chapter, after skipping some vertical whitespace.
     Also cause TeX to typeset for single-sided printing.  (You can
     override the headers format with the '@headings double' command;
     *note @headings::.)

'@setchapternewpage odd'
     Specify the double-sided heading format, with chapters on new
     pages.

Texinfo lacks a '@setchapternewpage even' command.


File: texinfo.info,  Node: Custom Headings,  Prev: Heading Choice,  Up: Headings

E.4 How to Make Your Own Headings
=================================

You can use the standard headings provided with Texinfo or specify your
own.  By default, Texinfo has no footers, so if you specify them, the
available page size for the main text will be slightly reduced.

   Texinfo provides six commands for specifying headings and footings:
   * '@everyheading' and '@everyfooting' generate page headers and
     footers that are the same for both even- and odd-numbered pages.
   * '@evenheading' and '@evenfooting' command generate headers and
     footers for even-numbered (left-hand) pages.
   * '@oddheading' and '@oddfooting' generate headers and footers for
     odd-numbered (right-hand) pages.

   Write custom heading specifications in the Texinfo file immediately
after the '@end titlepage' command.  You must cancel the predefined
heading commands with the '@headings off' command before defining your
own specifications.

   Here is how to tell TeX to place the chapter name at the left, the
page number in the center, and the date at the right of every header for
both even- and odd-numbered pages:

     @headings off
     @everyheading @thischapter @| @thispage @| @today{}

You need to divide the left part from the central part and the central
part from the right part by inserting '@|' between parts.  Otherwise,
the specification command will not be able to tell where the text for
one part ends and the next part begins.

   Each part can contain text or @-commands.  The text is printed as if
the part were within an ordinary paragraph in the body of the page.  The
@-commands replace themselves with the page number, date, chapter name,
or whatever.

   Here are the six heading and footing commands:

'@everyheading LEFT @| CENTER @| RIGHT'
'@everyfooting LEFT @| CENTER @| RIGHT'
     The 'every' commands specify the format for both even- and
     odd-numbered pages.  These commands are for documents that are
     printed on one side of each sheet of paper, or for documents in
     which you want symmetrical headers or footers.

'@evenheading LEFT @| CENTER @| RIGHT'
'@oddheading LEFT @| CENTER @| RIGHT'
'@evenfooting LEFT @| CENTER @| RIGHT'
'@oddfooting LEFT @| CENTER @| RIGHT'
     The 'even' and 'odd' commands specify the format for even-numbered
     pages and odd-numbered pages.  These commands are for books and
     manuals that are printed on both sides of each sheet of paper.

   Use the '@this...' series of @-commands to provide the names of
chapters and sections and the page number.  You can use the '@this...'
commands in the left, center, or right portions of headers and footers,
or anywhere else in a Texinfo file so long as they are between '@iftex'
and '@end iftex' commands.

   Here are the '@this...' commands:

'@thispage'
     Expands to the current page number.

'@thissectionname'
     Expands to the name of the current section.

'@thissectionnum'
     Expands to the number of the current section.

'@thissection'
     Expands to the number and name of the current section, in the
     format 'Section 1: Title'.

'@thischaptername'
     Expands to the name of the current chapter.

'@thischapternum'
     Expands to the number of the current chapter, or letter of the
     current appendix.

'@thischapter'
     Expands to the number and name of the current chapter, in the
     format 'Chapter 1: Title'.

'@thistitle'
     Expands to the name of the document, as specified by the
     '@settitle' command.

'@thisfile'
     For '@include' files only: expands to the name of the current
     '@include' file.  If the current Texinfo source file is not an
     '@include' file, this command has no effect.  This command does
     _not_ provide the name of the current Texinfo source file unless it
     is an '@include' file.  (*Note Include Files::, for more
     information about '@include' files.)

You can also use the '@today{}' command, which expands to the current
date, in '1 Jan 1900' format.

   Other @-commands and text are printed in a header or footer just as
if they were in the body of a page.  It is useful to incorporate text,
particularly when you are writing drafts:

     @headings off
     @everyheading @emph{Draft!} @| @thispage @| @thischapter
     @everyfooting @| @| Version: 0.27: @today{}

   Beware of overlong titles: they may overlap another part of the
header or footer and blot it out.

   If you have very short chapters and/or sections, several of them can
appear on a single page.  You can specify which chapters and sections
you want '@thischapter', '@thissection' and other such macros to refer
to on such pages as follows:

'@everyheadingmarks REF'
'@everyfootingmarks REF'
     The REF argument can be either 'top' (the '@this...' commands will
     refer to the chapter/section at the top of a page) or 'bottom' (the
     commands will reflect the situation at the bottom of a page).
     These '@every...' commands specify what to do on both even- and
     odd-numbered pages.

'@evenheadingmarks REF'
'@oddheadingmarks REF'
'@evenfootingmarks REF'
'@oddfootingmarks REF'
     These '@even...' and '@odd...' commands specify what to do on only
     even- or odd-numbered pages, respectively.  The REF argument is the
     same as with the '@every...' commands.

   Write these commands immediately after the '@...contents' commands,
or after the '@end titlepage' command if you don't have a table of
contents or if it is printed at the end of your manual.

   By default the '@this...' commands reflect the situation at the
bottom of a page both in headings and in footings.


File: texinfo.info,  Node: Catching Mistakes,  Next: Info Format Specification,  Prev: Headings,  Up: Top

Appendix F Catching Mistakes
****************************

Besides mistakes in the content of your documentation, there are two
kinds of mistake you can make with Texinfo: you can make mistakes with
@-commands, and you can make mistakes with the structure of the nodes
and chapters.

   Emacs has two tools for catching the @-command mistakes and two for
catching structuring mistakes.

   For finding problems with @-commands, you can run TeX or a region
formatting command on the region that has a problem; indeed, you can run
these commands on each region as you write it.

   For finding problems with the structure of nodes and chapters, you
can use 'C-c C-s' ('texinfo-show-structure') and the related 'occur'
command and you can use the 'M-x Info-validate' command.

* Menu:

* makeinfo Preferred::          'makeinfo' finds errors.
* Debugging with Info::         How to catch errors with Info formatting.
* Debugging with TeX::          How to catch errors with TeX formatting.
* Using texinfo-show-structure:: How to use 'texinfo-show-structure'.
* Using occur::                 How to list all lines containing a pattern.
* Running Info-validate::       How to find badly referenced nodes.


File: texinfo.info,  Node: makeinfo Preferred,  Next: Debugging with Info,  Up: Catching Mistakes

F.1 'makeinfo' Preferred
========================

The 'makeinfo' program does an excellent job of catching errors and
reporting them--far better than 'texinfo-format-region' or
'texinfo-format-buffer'.  In addition, the various functions for
automatically creating and updating node pointers and menus remove many
opportunities for human error.

   If you can, use the updating commands to create and insert pointers
and menus.  These prevent many errors.  Then use 'makeinfo' (or its
Texinfo mode manifestations, 'makeinfo-region' and 'makeinfo-buffer') to
format your file and check for other errors.  This is the best way to
work with Texinfo.  But if you cannot use 'makeinfo', or your problem is
very puzzling, then you may want to use the tools described in this
appendix.


File: texinfo.info,  Node: Debugging with Info,  Next: Debugging with TeX,  Prev: makeinfo Preferred,  Up: Catching Mistakes

F.2 Catching Errors with Info Formatting
========================================

After you have written part of a Texinfo file, you can use the
'texinfo-format-region' or the 'makeinfo-region' command to see whether
the region formats properly.

   Most likely, however, you are reading this section because for some
reason you cannot use the 'makeinfo-region' command; therefore, the rest
of this section presumes that you are using 'texinfo-format-region'.

   If you have made a mistake with an @-command, 'texinfo-format-region'
will stop processing at or after the error and display an error message.
To see where in the buffer the error occurred, switch to the '*Info
Region*' buffer; the cursor will be in a position that is after the
location of the error.  Also, the text will not be formatted after the
place where the error occurred (or more precisely, where it was
detected).

   For example, if you accidentally end a menu with the command '@end
menus' with an 's' on the end, instead of with '@end menu', you will see
an error message that says:

     @end menus is not handled by texinfo

The cursor will stop at the point in the buffer where the error occurs,
or not long after it.  The buffer will look like this:

     ---------- Buffer: *Info Region* ----------
     * Menu:

     * Using texinfo-show-structure::  How to use
                                      `texinfo-show-structure'
                                      to catch mistakes.
     * Running Info-validate::         How to check for
                                      unreferenced nodes.
     @end menus
     -!-
     ---------- Buffer: *Info Region* ----------

   The 'texinfo-format-region' command sometimes provides slightly odd
error messages.  For example, the following cross-reference fails to
format:

     (@xref{Catching Mistakes, for more info.)

In this case, 'texinfo-format-region' detects the missing closing brace
but displays a message that says 'Unbalanced parentheses' rather than
'Unbalanced braces'.  This is because the formatting command looks for
mismatches between braces as if they were parentheses.

   Sometimes 'texinfo-format-region' fails to detect mistakes.  For
example, in the following, the closing brace is swapped with the closing
parenthesis:

     (@xref{Catching Mistakes), for more info.}

Formatting produces:
     (*Note for more info.: Catching Mistakes)

   The only way for you to detect this error is to realize that the
reference should have looked like this:

     (*Note Catching Mistakes::, for more info.)

   Incidentally, if you are reading this node in Info and type 'f <RET>'
('Info-follow-reference'), you will generate an error message that says:

     No such node: "Catching Mistakes) The only way ...

This is because Info perceives the example of the error as the first
cross-reference in this node and if you type a <RET> immediately after
typing the Info 'f' command, Info will attempt to go to the referenced
node.  If you type 'f catch <TAB> <RET>', Info will complete the node
name of the correctly written example and take you to the 'Catching
Mistakes' node.  (If you try this, you can return from the 'Catching
Mistakes' node by typing 'l' ('Info-last').)


File: texinfo.info,  Node: Debugging with TeX,  Next: Using texinfo-show-structure,  Prev: Debugging with Info,  Up: Catching Mistakes

F.3 Debugging with TeX
======================

You can also catch mistakes when you format a file with TeX.

   Usually, you will want to do this after you have run
'texinfo-format-buffer' (or, better, 'makeinfo-buffer') on the same
file, because 'texinfo-format-buffer' sometimes displays error messages
that make more sense than TeX.  (*Note Debugging with Info::, for more
information.)

   For example, TeX was run on a Texinfo file, part of which is shown
here:

     ---------- Buffer: texinfo.texi ----------
     name of the Texinfo file as an extension.  The
     @samp{??} are `wildcards' that cause the shell to
     substitute all the raw index files.  (@xref{sorting
     indices, for more information about sorting
     indices.)@refill
     ---------- Buffer: texinfo.texi ----------

(The cross-reference lacks a closing brace.)  TeX produced the following
output, after which it stopped:

     ---------- Buffer: *tex-shell* ----------
     Runaway argument?
     {sorting indices, for more information about sorting
     indices.) @refill @ETC.
     ! Paragraph ended before @xref was complete.
     <to be read again>
                       @par
     l.27

     ?
     ---------- Buffer: *tex-shell* ----------

   In this case, TeX produced an accurate and understandable error
message:

     Paragraph ended before @xref was complete.

'@par' is an internal TeX command of no relevance to Texinfo.  'l.27'
means that TeX detected the problem on line 27 of the Texinfo file.  The
'?' is the prompt TeX uses in this circumstance.

   Unfortunately, TeX is not always so helpful, and sometimes you must
truly be a Sherlock Holmes to discover what went wrong.

   In any case, if you run into a problem like this, you can do one of
three things.

  1. You can tell TeX to continue running and ignore just this error by
     typing <RET> at the '?' prompt.

  2. You can tell TeX to continue running and to ignore all errors as
     best it can by typing 'r <RET>' at the '?' prompt.

     This is often the best thing to do.  However, beware: the one error
     may produce a cascade of additional error messages as its
     consequences are felt through the rest of the file.  To stop TeX
     when it is producing such an avalanche of error messages, type
     'C-c' (or 'C-c C-c', if you are running a shell inside Emacs).

  3. You can tell TeX to stop this run by typing 'x <RET>' at the '?'
     prompt.

   If you are running TeX inside Emacs, you need to switch to the shell
buffer and line at which TeX offers the '?' prompt.

   Sometimes TeX will format a file without producing error messages
even though there is a problem.  This usually occurs if a command is not
ended but TeX is able to continue processing anyhow.  For example, if
you fail to end an itemized list with the '@end itemize' command, TeX
will write a DVI file that you can print out.  The only error message
that TeX will give you is the somewhat mysterious comment:

     (@end occurred inside a group at level 1)

However, if you print the DVI file, you will find that the text of the
file that follows the itemized list is entirely indented as if it were
part of the last item in the itemized list.  The error message is the
way TeX says that it expected to find an '@end' command somewhere in the
file; but that it could not determine where it was needed.

   Another source of notoriously hard-to-find errors is a missing '@end
group' command.  If you ever are stumped by incomprehensible errors,
look for a missing '@end group' command first.

   If the Texinfo file lacks header lines, TeX may stop in the beginning
of its run and display output that looks like the following.  The '*'
indicates that TeX is waiting for input.

     This is TeX, Version 3.14159 (Web2c 7.0)
     (test.texinfo [1])
     *

In this case, simply type '\end <RET>' after the asterisk.  Then write
the header lines in the Texinfo file and run the TeX command again.
(Note the use of the backslash, '\'.  TeX uses '\' instead of '@'; and
in this circumstance, you are working directly with TeX, not with
Texinfo.)


File: texinfo.info,  Node: Using texinfo-show-structure,  Next: Using occur,  Prev: Debugging with TeX,  Up: Catching Mistakes

F.4 Using 'texinfo-show-structure'
==================================

It is not always easy to keep track of the nodes, chapters, sections,
and subsections of a Texinfo file.  This is especially true if you are
revising or adding to a Texinfo file that someone else has written.

   In GNU Emacs, in Texinfo mode, the 'texinfo-show-structure' command
lists all the lines that begin with the @-commands that specify the
structure: '@chapter', '@section', '@appendix', and so on.  With an
argument ('C-u' as prefix argument, if interactive), the command also
shows the '@node' lines.  The 'texinfo-show-structure' command is bound
to 'C-c C-s' in Texinfo mode, by default.

   The lines are displayed in a buffer called the '*Occur*' buffer,
indented by hierarchical level.  For example, here is a part of what was
produced by running 'texinfo-show-structure' on this manual:

     Lines matching "^@\\(chapter \\|sect\\|subs\\|subh\\|
     unnum\\|major\\|chapheading \\|heading \\|appendix\\)"
     in buffer texinfo.texi.
     ...
     4177:@chapter Nodes
     4198:    @heading Two Paths
     4231:    @section Node and Menu Illustration
     4337:    @section The @code{@@node} Command
     4393:        @subheading Choosing Node and Pointer Names
     4417:        @subsection How to Write a @code{@@node} Line
     4469:        @subsection @code{@@node} Line Tips
     ...

   This says that lines 4337, 4393, and 4417 of 'texinfo.texi' begin
with the '@section', '@subheading', and '@subsection' commands
respectively.  If you move your cursor into the '*Occur*' window, you
can position the cursor over one of the lines and use the 'C-c C-c'
command ('occur-mode-goto-occurrence'), to jump to the corresponding
spot in the Texinfo file.  *Note Using Occur: (emacs)Other Repeating
Search, for more information about 'occur-mode-goto-occurrence'.

   The first line in the '*Occur*' window describes the "regular
expression" specified by TEXINFO-HEADING-PATTERN.  This regular
expression is the pattern that 'texinfo-show-structure' looks for.
*Note Using Regular Expressions: (emacs)Regexps, for more information.

   When you invoke the 'texinfo-show-structure' command, Emacs will
display the structure of the whole buffer.  If you want to see the
structure of just a part of the buffer, of one chapter, for example, use
the 'C-x n n' ('narrow-to-region') command to mark the region.  (*Note
(emacs)Narrowing::.)  This is how the example used above was generated.
(To see the whole buffer again, use 'C-x n w' ('widen').)

   If you call 'texinfo-show-structure' with a prefix argument by typing
'C-u C-c C-s', it will list lines beginning with '@node' as well as the
lines beginning with the @-sign commands for '@chapter', '@section', and
the like.

   You can remind yourself of the structure of a Texinfo file by looking
at the list in the '*Occur*' window; and if you have mis-named a node or
left out a section, you can correct the mistake.


File: texinfo.info,  Node: Using occur,  Next: Running Info-validate,  Prev: Using texinfo-show-structure,  Up: Catching Mistakes

F.5 Using 'occur'
=================

Sometimes the 'texinfo-show-structure' command produces too much
information.  Perhaps you want to remind yourself of the overall
structure of a Texinfo file, and are overwhelmed by the detailed list
produced by 'texinfo-show-structure'.  In this case, you can use the
'occur' command directly.  To do this, type:

     M-x occur

and then, when prompted, type a "regexp", a regular expression for the
pattern you want to match.  (*Note Regular Expressions: (emacs)Regexps.)
The 'occur' command works from the current location of the cursor in the
buffer to the end of the buffer.  If you want to run 'occur' on the
whole buffer, place the cursor at the beginning of the buffer.

   For example, to see all the lines that contain the word '@chapter' in
them, just type '@chapter'.  This will produce a list of the chapters.
It will also list all the sentences with '@chapter' in the middle of the
line.

   If you want to see only those lines that start with the word
'@chapter', type '^@chapter' when prompted by 'occur'.  If you want to
see all the lines that end with a word or phrase, end the last word with
a '$'; for example, 'catching mistakes$'.  This can be helpful when you
want to see all the nodes that are part of the same chapter or section
and therefore have the same 'Up' pointer.

   *Note Using Occur: (emacs)Other Repeating Search, for more
information.


File: texinfo.info,  Node: Running Info-validate,  Prev: Using occur,  Up: Catching Mistakes

F.6 Finding Badly Referenced Nodes
==================================

You can use the 'Info-validate' command to check whether any of the
'Next', 'Previous', 'Up' or other node pointers fail to point to a node.
This command checks that every node pointer points to an existing node.
The 'Info-validate' command works only on Info files, not on Texinfo
files.

   The 'makeinfo' program validates pointers automatically, so you do
not need to use the 'Info-validate' command if you are using 'makeinfo'.
You only may need to use 'Info-validate' if you are unable to run
'makeinfo' and instead must create an Info file using
'texinfo-format-region' or 'texinfo-format-buffer', or if you write an
Info file from scratch.

* Menu:

* Using Info-validate::         How to run 'Info-validate'.
* Unsplit::                     How to create an unsplit file.
* Tagifying::                   How to tagify a file.
* Splitting::                   How to split a file manually.


File: texinfo.info,  Node: Using Info-validate,  Next: Unsplit,  Up: Running Info-validate

F.6.1 Using 'Info-validate'
---------------------------

To use 'Info-validate', visit the Info file you wish to check and type:

     M-x Info-validate

Note that the 'Info-validate' command requires an uppercase 'I'.  You
may also need to create a tag table before running 'Info-validate'.
*Note Tagifying::.

   If your file is valid, you will receive a message that says "File
appears valid".  However, if you have a pointer that does not point to a
node, error messages will be displayed in a buffer called '*problems in
info file*'.

   For example, 'Info-validate' was run on a test file that contained
only the first node of this manual.  One of the messages said:

     In node "Overview", invalid Next: Texinfo Mode

This meant that the node called 'Overview' had a 'Next' pointer that did
not point to anything (which was true in this case, since the test file
had only one node in it).

   Now suppose we add a node named 'Texinfo Mode' to our test case but
we do not specify a 'Previous' for this node.  Then we will get the
following error message:

     In node "Texinfo Mode", should have Previous: Overview

This is because every 'Next' pointer should be matched by a 'Previous'
(in the node where the 'Next' points) which points back.

   'Info-validate' also checks that all menu entries and
cross-references point to actual nodes.

   'Info-validate' requires a tag table and does not work with files
that have been split.  (The 'texinfo-format-buffer' command
automatically splits large files.)  In order to use 'Info-validate' on a
large file, you must run 'texinfo-format-buffer' with an argument so
that it does not split the Info file; and you must create a tag table
for the unsplit file.


File: texinfo.info,  Node: Unsplit,  Next: Tagifying,  Prev: Using Info-validate,  Up: Running Info-validate

F.6.2 Creating an Unsplit File
------------------------------

You can run 'Info-validate' only on a single Info file that has a tag
table.  The command will not work on the indirect subfiles that are
generated when a master file is split.  If you have a large file (longer
than 300,000 bytes or so), you need to run the 'texinfo-format-buffer'
or 'makeinfo-buffer' command in such a way that it does not create
indirect subfiles.  You will also need to create a tag table for the
Info file.  After you have done this, you can run 'Info-validate' and
look for badly referenced nodes.

   The first step is to create an unsplit Info file.  To prevent
'texinfo-format-buffer' from splitting a Texinfo file into smaller Info
files, give a prefix to the 'M-x texinfo-format-buffer' command:

     C-u M-x texinfo-format-buffer

or else

     C-u C-c C-e C-b

When you do this, Texinfo will not split the file and will not create a
tag table for it.


File: texinfo.info,  Node: Tagifying,  Next: Splitting,  Prev: Unsplit,  Up: Running Info-validate

F.6.3 Tagifying a File
----------------------

After creating an unsplit Info file, you must create a tag table for it.
Visit the Info file you wish to tagify and type:

     M-x Info-tagify

(Note the uppercase 'I' in 'Info-tagify'.)  This creates an Info file
with a tag table that you can validate.

   The third step is to validate the Info file:

     M-x Info-validate

(Note the uppercase 'I' in 'Info-validate'.)  In brief, the steps are:

     C-u M-x texinfo-format-buffer
     M-x Info-tagify
     M-x Info-validate

   After you have validated the node structure, you can rerun
'texinfo-format-buffer' in the normal way so it will construct a tag
table and split the file automatically, or you can make the tag table
and split the file manually.


File: texinfo.info,  Node: Splitting,  Prev: Tagifying,  Up: Running Info-validate

F.6.4 Splitting a File Manually
-------------------------------

You should split a large file or else let the 'texinfo-format-buffer' or
'makeinfo-buffer' command do it for you automatically.  (Generally you
will let one of the formatting commands do this job for you.  *Note
Creating an Info File::.)

   The split-off files are called the indirect subfiles.

   Info files are split to save memory.  With smaller files, Emacs does
not have make such a large buffer to hold the information.

   If an Info file has more than 30 nodes, you should also make a tag
table for it.  *Note Using Info-validate::, for information about
creating a tag table.  (Again, tag tables are usually created
automatically by the formatting command; you only need to create a tag
table yourself if you are doing the job manually.  Most likely, you will
do this for a large, unsplit file on which you have run
'Info-validate'.)

   Visit the Info file you wish to tagify and split and type the two
commands:

     M-x Info-tagify
     M-x Info-split

(Note that the 'I' in 'Info' is uppercase.)

   When you use the 'Info-split' command, the buffer is modified into a
(small) Info file which lists the indirect subfiles.  This file should
be saved in place of the original visited file.  The indirect subfiles
are written in the same directory the original file is in, with names
generated by appending '-' and a number to the original file name.

   The primary file still functions as an Info file, but it contains
just the tag table and a directory of subfiles.


File: texinfo.info,  Node: Info Format Specification,  Next: GNU Free Documentation License,  Prev: Catching Mistakes,  Up: Top

Appendix G Info Format Specification
************************************

Here we describe the technical details of the Info format.

   In this formal description, the characters '<>*()|=#' are used for
the language of the description itself.  Other characters are literal.
The formal constructs used are typical: '<...>' indicates a metavariable
name, '=' means definition, '*' repetition, '?' optional, '()' grouping,
'|' alternation, '#' comment.  Exception: '*' at the beginning of a line
is literal.

   In general, programs that read Info files should try to be
case-insensitive to keywords that occur in the file (for example, 'Tag
Table' and 'Tag table' should be equivalent) in order to support
Info-generating programs that use different capitalization.

   The sections in an Info file (such as nodes or tag tables) are
separated with a sequence:

     (^L)?^_(^L)?^J

That is, a 'CTRL-_' character followed by a newline, with optional
formfeed characters.  We refer to such sequences as <separator>.

   We specify literal parentheses (those that are part of the Info
format) with <lparen> and <rparen>, meaning the single characters '('
and ')' respectively.  We specify the 'CTRL-?' character (character
number 127) <del>.  Finally, the two-character sequence '^X' means the
single character 'CTRL-X', for any X.

   This format definition was written some 25 years after the Info
format was first devised.  So in the event of conflicts between this
definition and actual practice, practice wins.  It also assumes some
general knowledge of Texinfo; it is meant to be a guide for implementors
rather than a rigid technical standard.  We often refer back to other
parts of this manual for examples and definitions, rather than
redundantly spelling out every detail.

* Menu:

* General: Info Format General Layout.
* Text:    Info Format Text Constructs.


File: texinfo.info,  Node: Info Format General Layout,  Next: Info Format Text Constructs,  Up: Info Format Specification

G.1 Info Format General Layout
==============================

This section describes the overall layout of Info manuals.

* Menu:

* Whole:           Info Format Whole Manual. Split vs. nonsplit manuals.
* Preamble:        Info Format Preamble.
* Indirect:        Info Format Indirect Table.
* Tag table:       Info Format Tag Table.
* Local variables: Info Format Local Variables.
* Regular nodes:   Info Format Regular Nodes.


File: texinfo.info,  Node: Info Format Whole Manual,  Next: Info Format Preamble,  Up: Info Format General Layout

Info Format: A Whole Manual
---------------------------

To begin, an Info manual is either "nonsplit" (contained wholly within a
single file) or "split" (across several files).

   The syntax for a nonsplit manual is:

         <nonsplit info file> =
     <preamble>
     <node>*
     <tag table>?
     <local variables>?

   When split, there is a "main file", which contains only pointers to
the nodes given in other "subfiles".  The main file looks like this:

         <split info main file> =
     <preamble>
     <indirect table>
     <tag table>
     <local variables>?

   The subfiles in a split manual have the following syntax:

         <split info subfile> =
     <preamble>
     <node>*

   Note that the tag table is not optional for split files, as it is
used with the indirect table to deduce which subfile a particular node
is in.


File: texinfo.info,  Node: Info Format Preamble,  Next: Info Format Indirect Table,  Prev: Info Format Whole Manual,  Up: Info Format General Layout

Info Format: Preamble
---------------------

The <preamble> is text at the beginning of all output files.  It is not
intended to be visible by default in an Info viewer, but may be
displayed upon user request.

         <preamble> =
     <identification>       # "This is FILENAME, produced by ..."
     <copying text>         # Expansion of @copying text.
     <dir entries>          # Derived from @dircategory and @direntry.

These pieces are:

<identification line>
     An arbitrary string beginning the output file, followed by a blank
     line.

<copying text>
     The expansion of a '@copying' environment, if the manual has one
     (*note @copying::).

<dir entries>
     The result of any '@dircategory' and '@direntry' commands present
     in the manual (*note Installing Dir Entries::).


File: texinfo.info,  Node: Info Format Indirect Table,  Next: Info Format Tag Table,  Prev: Info Format Preamble,  Up: Info Format General Layout

Info Format: Indirect Table
---------------------------

         <indirect table> =
     <separator>
     Indirect:
     (<filename>: <bytepos>)*

   The indirect table is written to the main file in the case of split
output only.  It specifies, as a decimal integer, the starting byte
position (zero-based) that the first node of each subfile would have if
the subfiles were concatenated together in order, not including the
top-level file.  The first node of actual content is pointed to by the
first entry.

   As an example, suppose split output is generated for the GDB manual.
The top-level file 'gdb.info' will contain something like this:

     <separator>
     Indirect:
     gdb.info-1: 1878
     gdb.info-2: 295733
     ...

   This tells Info viewers that the first node of the manual occurs at
byte 1878 of the file 'gdb.info-1' (which would be after that file's
preamble.)  The first node in the 'gdb.info-2' subfile would start at
byte 295733 if 'gdb.info-2' were appended to 'gdb.info-1', including any
preamble sections in both files.

   Unfortunately, Info-creating programs such as 'makeinfo' have not
always implemented these rules perfectly, due to various bugs and
oversights.  Therefore, robust Info viewers should fall back to
searching "nearby" the given position for a node, instead of giving up
immediately if the position is not exactly at a node beginning.


File: texinfo.info,  Node: Info Format Tag Table,  Next: Info Format Local Variables,  Prev: Info Format Indirect Table,  Up: Info Format General Layout

Info Format: Tag Table
----------------------

         <tag table> =
     <separator>
     Tag Table:
     (<lparen>Indirect<rparen>)?
     (Node|Ref): <nodeid>^?<bytepos>
     <separator>
     End Tag Table

   The '(Indirect)' line appears in the case of split output only.

   The tag table specifies the starting byte position of each node and
anchor in the file.  In the case of split output, it is only written in
the main output file.

   Each line defines an identifier as either an anchor or a node, as
specified.  For example, 'Node: Top^?1647' says that the node named
'Top' starts at byte 1647 while 'Ref: Overview-Footnote-1^?30045' says
that the anchor named 'Overview-Footnote-1' starts at byte 30045.  It is
an error to define the same identifier both ways.

   In the case of nonsplit output, the byte positions simply refer to
the location in the output file.  In the case of split output, the byte
positions refer to an imaginary file created by concatenating all the
split files (but not the top-level file).  See the previous section.

   Here is an example:

     ^_
     Tag Table:
     Node: Top^?89
     Node: Ch1^?292
     ^_
     End Tag Table

This specifies a manual with two nodes, 'Top' and 'Ch1', at byte
positions 89 and 292 respectively.  Because the '(Indirect)' line is not
present, the manual is not split.

   Preamble sections or other non-node sections of files do not have a
tag table entry.


File: texinfo.info,  Node: Info Format Local Variables,  Next: Info Format Regular Nodes,  Prev: Info Format Tag Table,  Up: Info Format General Layout

Info Format: Local Variables
----------------------------

The local variables section is optional and is currently used to give
the encoding information.  It may be augmented in the future.

         <local variables> =
     <separator>
     Local Variables:
     coding: <encoding>
     End:

   *Note @documentencoding::.


File: texinfo.info,  Node: Info Format Regular Nodes,  Prev: Info Format Local Variables,  Up: Info Format General Layout

Info Format: Regular Nodes
--------------------------

Regular nodes look like this:

         <node> =
     <separator>
     File: <fn>, Node: <id1>, (Next: <id2>, )? (Prev: <id3>, )? Up: <id4>

     <general text, until the next ^_ or end-of-file>

At least one space or tab must be present after each colon and comma,
but any number of spaces are ignored.  The <id> node identifiers have
following format:

        <id> = (<lparen><infofile><rparen>)?(<del>?<nodename><del>?)?
     |  <id> = (<lparen><infofile><rparen>)?(<nodename>)?

   This <node> defines <id1> in file <fn>, which is typically either
'manualname' or 'manualname.info'.  No parenthesized <infofile>
component may appear within <id1>.

   Each of the identifiers after 'Next', 'Prev' and 'Up' refer to nodes
or anchors within a file.  These pointers normally refer within the same
file, but '(dir)' is often used to point to the top-level dir file.  If
an <infofile> component is used then the node name may be omitted, in
which case the node identifier refers to the 'Top' node within the
referenced file.

   The 'Next' and 'Prev' pointers are optional.  The 'Up' pointer is
technically also optional, although most likely this indicates a mistake
in the node structuring.  Conventionally, the nodes are arranged to form
a tree, but this is not a requirement of the format.

   Node names containing periods, commas, colons or parentheses
(including @-commands which produce any of these) can confuse Info
readers.  If it is necessary to refer to a node whose name contains any
of these, the <nodename> should be surrounded by a pair of <del>
characters.  There is support in 'makeinfo' for adding these characters
(*note INFO_SPECIAL_CHARS_QUOTE::); however, we don't recommend you make
use of this support until such time as Info-reading programs that
recognize this syntax are common.  *Note Node Line Requirements::.

   The use of non-ASCII characters in the names of nodes is permitted,
but can cause problems in cross-references between nodes in Info files
with different character encodings, and also when node names from many
different files are listed (for example, with the '--apropos' option to
the standalone Info browser), so we recommend avoiding them whenever
feasible.  For example, prefer the use of the ASCII apostrophe character
(') to Unicode directional quotes.

   The <general text> of the node can include the special constructs
described next.


File: texinfo.info,  Node: Info Format Text Constructs,  Prev: Info Format General Layout,  Up: Info Format Specification

G.2 Info Format Text Constructs
===============================

These special Info constructs can appear within the text of a node.

* Menu:

* Menu:  Info Format Menu.
* Image: Info Format Image.
* Printindex: Info Format Printindex.
* Xref:  Info Format Cross Reference.


File: texinfo.info,  Node: Info Format Menu,  Next: Info Format Image,  Up: Info Format Text Constructs

G.2.1 Info Format: Menu
-----------------------

Conventionally menus appear at the end of nodes, but the Info format
places no restrictions on their location.

         <menu> =
     * Menu:
     (<menu entry> | <menu comment>)*

   The parts of a <menu entry> are also described in *note Menu Parts::.
They have the same syntax as cross-references (*note Info Format Cross
Reference::).  Indices extend the menu format to specify the destination
line; *note Info Format Printindex::.

   A <menu comment> is any line not beginning with '*' that appears
either at the beginning of the menu or is separated from a menu entry by
one or more blank lines.  These comments are intended to be displayed as
part of the menu, as-is (*note Writing a Menu::).


File: texinfo.info,  Node: Info Format Image,  Next: Info Format Printindex,  Prev: Info Format Menu,  Up: Info Format Text Constructs

G.2.2 Info Format: Image
------------------------

The '@image' command results in the following special directive within
the Info file (*note Images::):

         <image> =
     ^@^H[image src="<image file>"
                 (text="<txt file contents>")?
                 (alt="<alt text>")?
     ^@^H]

   The line breaks and indentation in this description are editorial;
the whitespace between the different parts of the directive in Info
files is arbitrary.

   In the strings <image file>, <txt file contents> and <alt text>, '"'
is quoted as '\"' and '\' is quoted as '\\'.  The txt and alt
specifications are optional.

   The alt value serves the same purpose as in HTML: A prose description
of the image.  In text-only displays or speech systems, for example, the
alt value may be used instead of displaying the (typically graphical)
<image file>.

   The <txt file contents>, if present, should be taken as an ASCII
representation of the image, for possible use on a text-only display.

   The format does not prescribe the choice between displaying the
<image file>, the <alt text> or the <txt file contents>.


File: texinfo.info,  Node: Info Format Printindex,  Next: Info Format Cross Reference,  Prev: Info Format Image,  Up: Info Format Text Constructs

G.2.3 Info Format: Printindex
-----------------------------

Indices in Info format are generally written as a menu (*note
Indices::), but with an additional directive at the beginning marking
this as an index node:

         <printindex> =
     ^@^H[index^@^H]
     * Menu:

     <index entry>*

   The <index entry> items are similar to normal menu entries, but the
free-format description is replaced by the line number of where the
entries occurs in the text:

         <index entry> =
     * <entry text>: <entry node>. <lparen>line <lineno><rparen>

The <entry text> is the index term.  The <lineno> is an unsigned
integer, given relative to the start of the <entry node>.  There may be
arbitrary whitespace after the colon and period, as usual in menus, and
may be broken across lines.  Here is an example:

     ^@^H[index^@^H]
     * Menu:

     * thunder:           Weather Phenomena.             (line 5)

   This means that an index entry for 'thunder' appears at line 5 of the
node 'Weather Phenomena'.


File: texinfo.info,  Node: Info Format Cross Reference,  Prev: Info Format Printindex,  Up: Info Format Text Constructs

G.2.4 Info Format: Cross-reference
----------------------------------

A general cross-reference in Info format has one of the following two
forms:

         <cross-reference> =
       * (N|n)ote <id>::
     | * (N|n)ote <label>:<id>(.|,)

          <id> = (<lparen><infofile><rparen>)?(<del>?<nodename><del>?)?
     |    <id> = (<lparen><infofile><rparen>)?(<nodename>)?
         <label> = <del>?<label text><del>?

   No space should occur between the '*' character and the following 'N'
or 'n'.  '*Note' should be used at the start of a sentence, otherwise
'*note' should be used.  (Some Info readers, such as the one in Emacs,
can display '*Note' and '*note' as 'See' and 'see' respectively.)  In
both cases, <label text> is descriptive text.

   In both forms the <id> refers to a node or anchor, in the same way as
a reference in the node information line does (*note Info Format Regular
Nodes::).  The optional parenthesized '<infofile>' is the filename of
the manual being referenced, and the <nodename> is the node or anchor
within that manual,

   The second form has a descriptive label.  A cross-reference in this
form should usually be terminated with a comma or period, to make it
feasible to find the end of the <id>.

   If <label> contains a colon character (:), it should be surrounded
with a pair of <del> characters.  Likewise, if <nodename> contains
problematic characters (such as commas or periods), it should be
surrounded by a pair of <del> characters; then a terminating comma or
period is not needed.

   As with node names, this quoting mechanism has as of the time of
writing limited support in Info-reading programs; hence we do not
recommend using it until this changes.

   The format does not prescribe how to find other manuals to resolve
such references.

   Here are some examples:

     *note GNU Free Documentation License::
     *note Tag table: Info Format Tag Table, for details.
     *Note Overview: (make)Top.
     *Note ^?:^?: (bash)Bourne Shell Builtins.
     *Note alloca.h: (gnulib)^?alloca.h^?.

   The first shows a reference to a node in the current manual using the
short form.

   The second also refers to a node in the current manual, namely 'Info
Format Tag Table'; the 'Tag table' before the ':' is only a label on
this particular reference, and the 'for details.' is text belonging to
the sentence, not part of the reference.

   The third example refers to the node 'Top' in another manual, namely
'make', with 'Overview' being the label for this cross-reference.

   The fourth example shows a colon character being quoted in a label,
and the fifth example shows a period being quoted in a node name.

   *Note Cross References::.


File: texinfo.info,  Node: GNU Free Documentation License,  Next: Command and Variable Index,  Prev: Info Format Specification,  Up: Top

Appendix H GNU Free Documentation License
*****************************************

                     Version 1.3, 3 November 2008

     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
     <http://fsf.org/>

     Everyone is permitted to copy and distribute verbatim copies
     of this license document, but changing it is not allowed.

  0. PREAMBLE

     The purpose of this License is to make a manual, textbook, or other
     functional and useful document "free" in the sense of freedom: to
     assure everyone the effective freedom to copy and redistribute it,
     with or without modifying it, either commercially or
     noncommercially.  Secondarily, this License preserves for the
     author and publisher a way to get credit for their work, while not
     being considered responsible for modifications made by others.

     This License is a kind of "copyleft", which means that derivative
     works of the document must themselves be free in the same sense.
     It complements the GNU General Public License, which is a copyleft
     license designed for free software.

     We have designed this License in order to use it for manuals for
     free software, because free software needs free documentation: a
     free program should come with manuals providing the same freedoms
     that the software does.  But this License is not limited to
     software manuals; it can be used for any textual work, regardless
     of subject matter or whether it is published as a printed book.  We
     recommend this License principally for works whose purpose is
     instruction or reference.

  1. APPLICABILITY AND DEFINITIONS

     This License applies to any manual or other work, in any medium,
     that contains a notice placed by the copyright holder saying it can
     be distributed under the terms of this License.  Such a notice
     grants a world-wide, royalty-free license, unlimited in duration,
     to use that work under the conditions stated herein.  The
     "Document", below, refers to any such manual or work.  Any member
     of the public is a licensee, and is addressed as "you".  You accept
     the license if you copy, modify or distribute the work in a way
     requiring permission under copyright law.

     A "Modified Version" of the Document means any work containing the
     Document or a portion of it, either copied verbatim, or with
     modifications and/or translated into another language.

     A "Secondary Section" is a named appendix or a front-matter section
     of the Document that deals exclusively with the relationship of the
     publishers or authors of the Document to the Document's overall
     subject (or to related matters) and contains nothing that could
     fall directly within that overall subject.  (Thus, if the Document
     is in part a textbook of mathematics, a Secondary Section may not
     explain any mathematics.)  The relationship could be a matter of
     historical connection with the subject or with related matters, or
     of legal, commercial, philosophical, ethical or political position
     regarding them.

     The "Invariant Sections" are certain Secondary Sections whose
     titles are designated, as being those of Invariant Sections, in the
     notice that says that the Document is released under this License.
     If a section does not fit the above definition of Secondary then it
     is not allowed to be designated as Invariant.  The Document may
     contain zero Invariant Sections.  If the Document does not identify
     any Invariant Sections then there are none.

     The "Cover Texts" are certain short passages of text that are
     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
     that says that the Document is released under this License.  A
     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
     be at most 25 words.

     A "Transparent" copy of the Document means a machine-readable copy,
     represented in a format whose specification is available to the
     general public, that is suitable for revising the document
     straightforwardly with generic text editors or (for images composed
     of pixels) generic paint programs or (for drawings) some widely
     available drawing editor, and that is suitable for input to text
     formatters or for automatic translation to a variety of formats
     suitable for input to text formatters.  A copy made in an otherwise
     Transparent file format whose markup, or absence of markup, has
     been arranged to thwart or discourage subsequent modification by
     readers is not Transparent.  An image format is not Transparent if
     used for any substantial amount of text.  A copy that is not
     "Transparent" is called "Opaque".

     Examples of suitable formats for Transparent copies include plain
     ASCII without markup, Texinfo input format, LaTeX input format,
     SGML or XML using a publicly available DTD, and standard-conforming
     simple HTML, PostScript or PDF designed for human modification.
     Examples of transparent image formats include PNG, XCF and JPG.
     Opaque formats include proprietary formats that can be read and
     edited only by proprietary word processors, SGML or XML for which
     the DTD and/or processing tools are not generally available, and
     the machine-generated HTML, PostScript or PDF produced by some word
     processors for output purposes only.

     The "Title Page" means, for a printed book, the title page itself,
     plus such following pages as are needed to hold, legibly, the
     material this License requires to appear in the title page.  For
     works in formats which do not have any title page as such, "Title
     Page" means the text near the most prominent appearance of the
     work's title, preceding the beginning of the body of the text.

     The "publisher" means any person or entity that distributes copies
     of the Document to the public.

     A section "Entitled XYZ" means a named subunit of the Document
     whose title either is precisely XYZ or contains XYZ in parentheses
     following text that translates XYZ in another language.  (Here XYZ
     stands for a specific section name mentioned below, such as
     "Acknowledgements", "Dedications", "Endorsements", or "History".)
     To "Preserve the Title" of such a section when you modify the
     Document means that it remains a section "Entitled XYZ" according
     to this definition.

     The Document may include Warranty Disclaimers next to the notice
     which states that this License applies to the Document.  These
     Warranty Disclaimers are considered to be included by reference in
     this License, but only as regards disclaiming warranties: any other
     implication that these Warranty Disclaimers may have is void and
     has no effect on the meaning of this License.

  2. VERBATIM COPYING

     You may copy and distribute the Document in any medium, either
     commercially or noncommercially, provided that this License, the
     copyright notices, and the license notice saying this License
     applies to the Document are reproduced in all copies, and that you
     add no other conditions whatsoever to those of this License.  You
     may not use technical measures to obstruct or control the reading
     or further copying of the copies you make or distribute.  However,
     you may accept compensation in exchange for copies.  If you
     distribute a large enough number of copies you must also follow the
     conditions in section 3.

     You may also lend copies, under the same conditions stated above,
     and you may publicly display copies.

  3. COPYING IN QUANTITY

     If you publish printed copies (or copies in media that commonly
     have printed covers) of the Document, numbering more than 100, and
     the Document's license notice requires Cover Texts, you must
     enclose the copies in covers that carry, clearly and legibly, all
     these Cover Texts: Front-Cover Texts on the front cover, and
     Back-Cover Texts on the back cover.  Both covers must also clearly
     and legibly identify you as the publisher of these copies.  The
     front cover must present the full title with all words of the title
     equally prominent and visible.  You may add other material on the
     covers in addition.  Copying with changes limited to the covers, as
     long as they preserve the title of the Document and satisfy these
     conditions, can be treated as verbatim copying in other respects.

     If the required texts for either cover are too voluminous to fit
     legibly, you should put the first ones listed (as many as fit
     reasonably) on the actual cover, and continue the rest onto
     adjacent pages.

     If you publish or distribute Opaque copies of the Document
     numbering more than 100, you must either include a machine-readable
     Transparent copy along with each Opaque copy, or state in or with
     each Opaque copy a computer-network location from which the general
     network-using public has access to download using public-standard
     network protocols a complete Transparent copy of the Document, free
     of added material.  If you use the latter option, you must take
     reasonably prudent steps, when you begin distribution of Opaque
     copies in quantity, to ensure that this Transparent copy will
     remain thus accessible at the stated location until at least one
     year after the last time you distribute an Opaque copy (directly or
     through your agents or retailers) of that edition to the public.

     It is requested, but not required, that you contact the authors of
     the Document well before redistributing any large number of copies,
     to give them a chance to provide you with an updated version of the
     Document.

  4. MODIFICATIONS

     You may copy and distribute a Modified Version of the Document
     under the conditions of sections 2 and 3 above, provided that you
     release the Modified Version under precisely this License, with the
     Modified Version filling the role of the Document, thus licensing
     distribution and modification of the Modified Version to whoever
     possesses a copy of it.  In addition, you must do these things in
     the Modified Version:

       A. Use in the Title Page (and on the covers, if any) a title
          distinct from that of the Document, and from those of previous
          versions (which should, if there were any, be listed in the
          History section of the Document).  You may use the same title
          as a previous version if the original publisher of that
          version gives permission.

       B. List on the Title Page, as authors, one or more persons or
          entities responsible for authorship of the modifications in
          the Modified Version, together with at least five of the
          principal authors of the Document (all of its principal
          authors, if it has fewer than five), unless they release you
          from this requirement.

       C. State on the Title page the name of the publisher of the
          Modified Version, as the publisher.

       D. Preserve all the copyright notices of the Document.

       E. Add an appropriate copyright notice for your modifications
          adjacent to the other copyright notices.

       F. Include, immediately after the copyright notices, a license
          notice giving the public permission to use the Modified
          Version under the terms of this License, in the form shown in
          the Addendum below.

       G. Preserve in that license notice the full lists of Invariant
          Sections and required Cover Texts given in the Document's
          license notice.

       H. Include an unaltered copy of this License.

       I. Preserve the section Entitled "History", Preserve its Title,
          and add to it an item stating at least the title, year, new
          authors, and publisher of the Modified Version as given on the
          Title Page.  If there is no section Entitled "History" in the
          Document, create one stating the title, year, authors, and
          publisher of the Document as given on its Title Page, then add
          an item describing the Modified Version as stated in the
          previous sentence.

       J. Preserve the network location, if any, given in the Document
          for public access to a Transparent copy of the Document, and
          likewise the network locations given in the Document for
          previous versions it was based on.  These may be placed in the
          "History" section.  You may omit a network location for a work
          that was published at least four years before the Document
          itself, or if the original publisher of the version it refers
          to gives permission.

       K. For any section Entitled "Acknowledgements" or "Dedications",
          Preserve the Title of the section, and preserve in the section
          all the substance and tone of each of the contributor
          acknowledgements and/or dedications given therein.

       L. Preserve all the Invariant Sections of the Document, unaltered
          in their text and in their titles.  Section numbers or the
          equivalent are not considered part of the section titles.

       M. Delete any section Entitled "Endorsements".  Such a section
          may not be included in the Modified Version.

       N. Do not retitle any existing section to be Entitled
          "Endorsements" or to conflict in title with any Invariant
          Section.

       O. Preserve any Warranty Disclaimers.

     If the Modified Version includes new front-matter sections or
     appendices that qualify as Secondary Sections and contain no
     material copied from the Document, you may at your option designate
     some or all of these sections as invariant.  To do this, add their
     titles to the list of Invariant Sections in the Modified Version's
     license notice.  These titles must be distinct from any other
     section titles.

     You may add a section Entitled "Endorsements", provided it contains
     nothing but endorsements of your Modified Version by various
     parties--for example, statements of peer review or that the text
     has been approved by an organization as the authoritative
     definition of a standard.

     You may add a passage of up to five words as a Front-Cover Text,
     and a passage of up to 25 words as a Back-Cover Text, to the end of
     the list of Cover Texts in the Modified Version.  Only one passage
     of Front-Cover Text and one of Back-Cover Text may be added by (or
     through arrangements made by) any one entity.  If the Document
     already includes a cover text for the same cover, previously added
     by you or by arrangement made by the same entity you are acting on
     behalf of, you may not add another; but you may replace the old
     one, on explicit permission from the previous publisher that added
     the old one.

     The author(s) and publisher(s) of the Document do not by this
     License give permission to use their names for publicity for or to
     assert or imply endorsement of any Modified Version.

  5. COMBINING DOCUMENTS

     You may combine the Document with other documents released under
     this License, under the terms defined in section 4 above for
     modified versions, provided that you include in the combination all
     of the Invariant Sections of all of the original documents,
     unmodified, and list them all as Invariant Sections of your
     combined work in its license notice, and that you preserve all
     their Warranty Disclaimers.

     The combined work need only contain one copy of this License, and
     multiple identical Invariant Sections may be replaced with a single
     copy.  If there are multiple Invariant Sections with the same name
     but different contents, make the title of each such section unique
     by adding at the end of it, in parentheses, the name of the
     original author or publisher of that section if known, or else a
     unique number.  Make the same adjustment to the section titles in
     the list of Invariant Sections in the license notice of the
     combined work.

     In the combination, you must combine any sections Entitled
     "History" in the various original documents, forming one section
     Entitled "History"; likewise combine any sections Entitled
     "Acknowledgements", and any sections Entitled "Dedications".  You
     must delete all sections Entitled "Endorsements."

  6. COLLECTIONS OF DOCUMENTS

     You may make a collection consisting of the Document and other
     documents released under this License, and replace the individual
     copies of this License in the various documents with a single copy
     that is included in the collection, provided that you follow the
     rules of this License for verbatim copying of each of the documents
     in all other respects.

     You may extract a single document from such a collection, and
     distribute it individually under this License, provided you insert
     a copy of this License into the extracted document, and follow this
     License in all other respects regarding verbatim copying of that
     document.

  7. AGGREGATION WITH INDEPENDENT WORKS

     A compilation of the Document or its derivatives with other
     separate and independent documents or works, in or on a volume of a
     storage or distribution medium, is called an "aggregate" if the
     copyright resulting from the compilation is not used to limit the
     legal rights of the compilation's users beyond what the individual
     works permit.  When the Document is included in an aggregate, this
     License does not apply to the other works in the aggregate which
     are not themselves derivative works of the Document.

     If the Cover Text requirement of section 3 is applicable to these
     copies of the Document, then if the Document is less than one half
     of the entire aggregate, the Document's Cover Texts may be placed
     on covers that bracket the Document within the aggregate, or the
     electronic equivalent of covers if the Document is in electronic
     form.  Otherwise they must appear on printed covers that bracket
     the whole aggregate.

  8. TRANSLATION

     Translation is considered a kind of modification, so you may
     distribute translations of the Document under the terms of section
     4.  Replacing Invariant Sections with translations requires special
     permission from their copyright holders, but you may include
     translations of some or all Invariant Sections in addition to the
     original versions of these Invariant Sections.  You may include a
     translation of this License, and all the license notices in the
     Document, and any Warranty Disclaimers, provided that you also
     include the original English version of this License and the
     original versions of those notices and disclaimers.  In case of a
     disagreement between the translation and the original version of
     this License or a notice or disclaimer, the original version will
     prevail.

     If a section in the Document is Entitled "Acknowledgements",
     "Dedications", or "History", the requirement (section 4) to
     Preserve its Title (section 1) will typically require changing the
     actual title.

  9. TERMINATION

     You may not copy, modify, sublicense, or distribute the Document
     except as expressly provided under this License.  Any attempt
     otherwise to copy, modify, sublicense, or distribute it is void,
     and will automatically terminate your rights under this License.

     However, if you cease all violation of this License, then your
     license from a particular copyright holder is reinstated (a)
     provisionally, unless and until the copyright holder explicitly and
     finally terminates your license, and (b) permanently, if the
     copyright holder fails to notify you of the violation by some
     reasonable means prior to 60 days after the cessation.

     Moreover, your license from a particular copyright holder is
     reinstated permanently if the copyright holder notifies you of the
     violation by some reasonable means, this is the first time you have
     received notice of violation of this License (for any work) from
     that copyright holder, and you cure the violation prior to 30 days
     after your receipt of the notice.

     Termination of your rights under this section does not terminate
     the licenses of parties who have received copies or rights from you
     under this License.  If your rights have been terminated and not
     permanently reinstated, receipt of a copy of some or all of the
     same material does not give you any rights to use it.

  10. FUTURE REVISIONS OF THIS LICENSE

     The Free Software Foundation may publish new, revised versions of
     the GNU Free Documentation License from time to time.  Such new
     versions will be similar in spirit to the present version, but may
     differ in detail to address new problems or concerns.  See
     <http://www.gnu.org/copyleft/>.

     Each version of the License is given a distinguishing version
     number.  If the Document specifies that a particular numbered
     version of this License "or any later version" applies to it, you
     have the option of following the terms and conditions either of
     that specified version or of any later version that has been
     published (not as a draft) by the Free Software Foundation.  If the
     Document does not specify a version number of this License, you may
     choose any version ever published (not as a draft) by the Free
     Software Foundation.  If the Document specifies that a proxy can
     decide which future versions of this License can be used, that
     proxy's public statement of acceptance of a version permanently
     authorizes you to choose that version for the Document.

  11. RELICENSING

     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
     World Wide Web server that publishes copyrightable works and also
     provides prominent facilities for anybody to edit those works.  A
     public wiki that anybody can edit is an example of such a server.
     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
     site means any set of copyrightable works thus published on the MMC
     site.

     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
     license published by Creative Commons Corporation, a not-for-profit
     corporation with a principal place of business in San Francisco,
     California, as well as future copyleft versions of that license
     published by that same organization.

     "Incorporate" means to publish or republish a Document, in whole or
     in part, as part of another Document.

     An MMC is "eligible for relicensing" if it is licensed under this
     License, and if all works that were first published under this
     License somewhere other than this MMC, and subsequently
     incorporated in whole or in part into the MMC, (1) had no cover
     texts or invariant sections, and (2) were thus incorporated prior
     to November 1, 2008.

     The operator of an MMC Site may republish an MMC contained in the
     site under CC-BY-SA on the same site at any time before August 1,
     2009, provided the MMC is eligible for relicensing.

ADDENDUM: How to use this License for your documents
====================================================

To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and license
notices just after the title page:

       Copyright (C)  YEAR  YOUR NAME.
       Permission is granted to copy, distribute and/or modify this document
       under the terms of the GNU Free Documentation License, Version 1.3
       or any later version published by the Free Software Foundation;
       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
       Texts.  A copy of the license is included in the section entitled ``GNU
       Free Documentation License''.

   If you have Invariant Sections, Front-Cover Texts and Back-Cover
Texts, replace the "with...Texts." line with this:

         with the Invariant Sections being LIST THEIR TITLES, with
         the Front-Cover Texts being LIST, and with the Back-Cover Texts
         being LIST.

   If you have Invariant Sections without Cover Texts, or some other
combination of the three, merge those two alternatives to suit the
situation.

   If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of free
software license, such as the GNU General Public License, to permit
their use in free software.


File: texinfo.info,  Node: Command and Variable Index,  Next: General Index,  Prev: GNU Free Documentation License,  Up: Top

Command and Variable Index
**************************

This is an alphabetical list of all the @-commands, assorted Emacs Lisp
functions, and several variables.  To make the list easier to use, the
commands are listed without their preceding '@'.

 [index ]
* Menu:

* ! (end of sentence):                   Ending a Sentence.   (line   6)
* " (umlaut accent):                     Inserting Accents.   (line  28)
* ' (acute accent):                      Inserting Accents.   (line  28)
* * (force line break):                  Line Breaks.         (line   6)
* , (cedilla accent):                    Inserting Accents.   (line  28)
* - (discretionary hyphen):              @- @hyphenation.     (line   6)
* - (in image alt string):               Image Syntax.        (line  55)
* . (end of sentence):                   Ending a Sentence.   (line   6)
* / (allow line break):                  Line Breaks.         (line   6)
* ::                                     Not Ending a Sentence.
                                                              (line   9)
* <colon> (suppress end-of-sentence space): Not Ending a Sentence.
                                                              (line   9)
* <newline>:                             Multiple Spaces.     (line   6)
* <space>:                               Multiple Spaces.     (line   6)
* <tab>:                                 Multiple Spaces.     (line   6)
* = (macron accent):                     Inserting Accents.   (line  28)
* ? (end of sentence):                   Ending a Sentence.   (line   6)
* @ (literal @):                         Inserting an Atsign. (line   6)
* \ (literal \ in @math):                Inserting Math.      (line  50)
* \backslash:                            Inserting a Backslash.
                                                              (line  20)
* \emergencystretch:                     Overfull hboxes.     (line  31)
* \gdef within @tex:                     Raw Formatter Commands.
                                                              (line  22)
* \globaldefs within @tex:               Raw Formatter Commands.
                                                              (line  22)
* \input (raw TeX startup):              Minimum.             (line  20)
* \linkcolor:                            PDF Colors.          (line  12)
* \mag (raw TeX magnification):          Cropmarks and Magnification.
                                                              (line  24)
* \mathopsup:                            Inserting Math.      (line  21)
* \urefurlonlylinktrue:                  @url PDF Output Format.
                                                              (line  12)
* \urlcolor:                             PDF Colors.          (line  12)
* \usebracesinindexestrue:               Details of texindex. (line  17)
* ^ (circumflex accent):                 Inserting Accents.   (line  28)
* ` (grave accent):                      Inserting Accents.   (line  28)
* { (literal {):                         Inserting Braces.    (line   6)
* } (literal }):                         Inserting Braces.    (line   6)
* ~ (tilde accent):                      Inserting Accents.   (line  28)
* aa:                                    Inserting Accents.   (line  50)
* AA:                                    Inserting Accents.   (line  50)
* abbr:                                  @abbr.               (line   6)
* acronym:                               @acronym.            (line   6)
* ae:                                    Inserting Accents.   (line  50)
* AE:                                    Inserting Accents.   (line  50)
* afivepaper:                            A4 Paper.            (line   6)
* afourlatex:                            A4 Paper.            (line  22)
* afourpaper:                            A4 Paper.            (line   6)
* afourwide:                             A4 Paper.            (line  22)
* alias:                                 @alias.              (line   6)
* allowcodebreaks:                       @allowcodebreaks.    (line   6)
* anchor:                                @anchor.             (line   6)
* appendix:                              @unnumbered @appendix.
                                                              (line   6)
* appendixsec:                           @unnumberedsec @appendixsec @heading.
                                                              (line   6)
* appendixsec <1>:                       @unnumberedsec @appendixsec @heading.
                                                              (line  21)
* appendixsection:                       @unnumberedsec @appendixsec @heading.
                                                              (line  21)
* appendixsubsec:                        @unnumberedsubsec @appendixsubsec @subheading.
                                                              (line   6)
* appendixsubsubsec:                     @subsubsection.      (line   6)
* apply:                                 Sample Function Definition.
                                                              (line  12)
* arrow:                                 Click Sequences.     (line  17)
* asis:                                  @table.              (line  18)
* atchar{} (literal @):                  Inserting an Atsign. (line   6)
* author:                                @title @subtitle @author.
                                                              (line   6)
* b (bold font):                         Fonts.               (line  29)
* backslashchar:                         Inserting a Backslash.
                                                              (line   6)
* bullet:                                @bullet.             (line   6)
* bye:                                   Ending a File.       (line   6)
* bye <1>:                               Ending a File.       (line  17)
* c:                                     Comments.            (line   6)
* caption:                               @caption @shortcaption.
                                                              (line   6)
* cartouche:                             @cartouche.          (line   6)
* center:                                @titlefont @center @sp.
                                                              (line   6)
* centerchap:                            @unnumbered @appendix.
                                                              (line  16)
* chapheading:                           @majorheading @chapheading.
                                                              (line   6)
* chapter:                               @chapter.            (line   6)
* cindex:                                Predefined Indices.  (line  10)
* cite:                                  @cite.               (line   6)
* clear:                                 @set @value.         (line   6)
* click:                                 Click Sequences.     (line  17)
* clicksequence:                         Click Sequences.     (line   6)
* clickstyle:                            Click Sequences.     (line  20)
* code:                                  @code.               (line   6)
* codequotebacktick:                     Inserting Quote Characters.
                                                              (line  26)
* codequoteundirected:                   Inserting Quote Characters.
                                                              (line  22)
* columnfractions:                       Multitable Column Widths.
                                                              (line  11)
* comma:                                 Inserting a Comma.   (line   6)
* command:                               @command.            (line   6)
* comment:                               Comments.            (line   6)
* complete_tree_nodes_menus:             Other Customization Variables.
                                                              (line 270)
* contents:                              Contents.            (line   6)
* copying:                               @copying.            (line   6)
* copyright:                             @copying.            (line  32)
* copyright <1>:                         @copyright.          (line   6)
* cropmarks:                             Cropmarks and Magnification.
                                                              (line   6)
* debugcount:                            Customization Variables and Options.
                                                              (line  56)
* debugtree:                             Customization Variables and Options.
                                                              (line  61)
* defcodeindex:                          New Indices.         (line   6)
* defcv:                                 Object-Oriented Variables.
                                                              (line  10)
* defcvx:                                @deffnx.             (line  24)
* deffn:                                 Functions Commands.  (line   9)
* deffnx:                                @deffnx.             (line   6)
* defindex:                              New Indices.         (line   6)
* definfoenclose:                        @definfoenclose.     (line   6)
* defivar:                               Object-Oriented Variables.
                                                              (line  46)
* defivarx:                              @deffnx.             (line  24)
* defmac:                                Functions Commands.  (line  57)
* defmacx:                               @deffnx.             (line  24)
* defmethod:                             Object-Oriented Methods.
                                                              (line  59)
* defmethodx:                            @deffnx.             (line  24)
* defop:                                 Object-Oriented Methods.
                                                              (line  11)
* defopt:                                Variables Commands.  (line  55)
* defoptx:                               @deffnx.             (line  24)
* defopx:                                @deffnx.             (line  24)
* defspec:                               Functions Commands.  (line  62)
* defspecx:                              @deffnx.             (line  24)
* deftp:                                 Data Types.          (line   8)
* deftpx:                                @deffnx.             (line  24)
* deftypecv:                             Object-Oriented Variables.
                                                              (line  27)
* deftypecvx:                            @deffnx.             (line  24)
* deftypefn:                             Typed Functions.     (line  10)
* deftypefnnewline:                      Typed Functions.     (line  84)
* deftypefnx:                            @deffnx.             (line  24)
* deftypefun:                            Typed Functions.     (line  74)
* deftypefunx:                           @deffnx.             (line  24)
* deftypeivar:                           Object-Oriented Variables.
                                                              (line  62)
* deftypeivarx:                          @deffnx.             (line  24)
* deftypemethod:                         Object-Oriented Methods.
                                                              (line  80)
* deftypemethodx:                        @deffnx.             (line  24)
* deftypeop:                             Object-Oriented Methods.
                                                              (line  51)
* deftypeopx:                            @deffnx.             (line  24)
* deftypevar:                            Typed Variables.     (line  40)
* deftypevarx:                           @deffnx.             (line  24)
* deftypevr:                             Typed Variables.     (line  12)
* deftypevrx:                            @deffnx.             (line  24)
* defun:                                 Functions Commands.  (line  47)
* defunx:                                @deffnx.             (line  24)
* defvar:                                Variables Commands.  (line  37)
* defvarx:                               @deffnx.             (line  24)
* defvr:                                 Variables Commands.  (line   8)
* defvrx:                                @deffnx.             (line  24)
* DEL (comment character):               Comments.            (line  20)
* detailmenu:                            Master Menu Parts.   (line  19)
* detailmenu <1>:                        makeinfo Pointer Creation.
                                                              (line  31)
* dfn:                                   @dfn.                (line   6)
* dh:                                    Inserting Accents.   (line  50)
* DH:                                    Inserting Accents.   (line  50)
* dircategory:                           Installing Dir Entries.
                                                              (line  11)
* direntry:                              Installing Dir Entries.
                                                              (line  11)
* display:                               @display.            (line   6)
* dmn:                                   @dmn.                (line   6)
* docbook:                               Raw Formatter Commands.
                                                              (line  61)
* docbook <1>:                           Customization Variables and Options.
                                                              (line  43)
* documentdescription:                   @documentdescription.
                                                              (line   6)
* documentencoding:                      @documentencoding.   (line   6)
* documentlanguage:                      @documentlanguage.   (line   6)
* dotaccent:                             Inserting Accents.   (line  28)
* dotless:                               Inserting Accents.   (line  50)
* dots:                                  @dots.               (line   6)
* dvi:                                   Customization Variables and Options.
                                                              (line  44)
* dvipdf:                                Customization Variables and Options.
                                                              (line  45)
* email:                                 @email.              (line   6)
* emph:                                  @emph @strong.       (line   6)
* end:                                   Quotations and Examples.
                                                              (line  10)
* end <1>:                               Introducing Lists.   (line  20)
* enddots:                               @dots.               (line   6)
* enumerate:                             @enumerate.          (line   6)
* env:                                   @env.                (line   6)
* equiv:                                 @equiv.              (line   6)
* error:                                 @error.              (line   6)
* errormsg:                              Conditional Commands.
                                                              (line  68)
* errormsg, and line numbers in TeX:     #line and TeX.       (line  23)
* euro:                                  @euro.               (line   6)
* evenfooting:                           Custom Headings.     (line  53)
* evenfootingmarks:                      Custom Headings.     (line 132)
* evenheading:                           Custom Headings.     (line  53)
* evenheadingmarks:                      Custom Headings.     (line 132)
* everyfooting:                          Custom Headings.     (line  44)
* everyfootingmarks:                     Custom Headings.     (line 122)
* everyheading:                          Custom Headings.     (line  44)
* everyheadingmarks:                     Custom Headings.     (line 122)
* example:                               @example.            (line   6)
* exampleindent:                         @exampleindent.      (line   6)
* exclamdown:                            Inserting Accents.   (line  50)
* exdent:                                @exdent.             (line   6)
* expansion:                             @expansion.          (line   6)
* file:                                  @file.               (line   6)
* fill_gaps_in_sectioning:               Other Customization Variables.
                                                              (line 274)
* finalout:                              Overfull hboxes.     (line  46)
* findex:                                Predefined Indices.  (line  12)
* firstparagraphindent:                  @firstparagraphindent.
                                                              (line   6)
* float:                                 @float.              (line   6)
* flushleft:                             @flushleft @flushright.
                                                              (line   6)
* flushright:                            @flushleft @flushright.
                                                              (line   6)
* fn-name:                               Def Cmd Continuation Lines.
                                                              (line  18)
* fonttextsize:                          Fonts.               (line   6)
* foobar:                                Optional Arguments.  (line  19)
* foobar <1>:                            Typed Functions.     (line  27)
* footnote:                              Footnotes.           (line   6)
* footnotestyle:                         Footnote Styles.     (line  46)
* format:                                @format.             (line   6)
* forward-word:                          Def Cmd Template.    (line  34)
* frenchspacing:                         @frenchspacing.      (line   6)
* ftable:                                @ftable @vtable.     (line   6)
* geq:                                   @geq @leq.           (line   6)
* group:                                 @group.              (line   6)
* guillemetleft:                         Inserting Quotation Marks.
                                                              (line  44)
* guillemetright:                        Inserting Quotation Marks.
                                                              (line  44)
* guillemotleft:                         Inserting Quotation Marks.
                                                              (line  44)
* guillemotright:                        Inserting Quotation Marks.
                                                              (line  44)
* guilsinglleft:                         Inserting Quotation Marks.
                                                              (line  44)
* guilsinglright:                        Inserting Quotation Marks.
                                                              (line  44)
* H (Hungarian umlaut accent):           Inserting Accents.   (line  28)
* hashchar{} (literal #):                Inserting a Hashsign.
                                                              (line   6)
* hbox:                                  Overfull hboxes.     (line  14)
* heading:                               @unnumberedsec @appendixsec @heading.
                                                              (line   6)
* headings:                              @headings.           (line   6)
* headitem:                              Multitable Rows.     (line  12)
* headitemfont:                          Multitable Rows.     (line  17)
* headword:                              @definfoenclose.     (line  58)
* html:                                  Raw Formatter Commands.
                                                              (line  41)
* html <1>:                              Customization Variables and Options.
                                                              (line  46)
* hyphenation:                           @- @hyphenation.     (line   6)
* i (italic font):                       Fonts.               (line  32)
* ifclear:                               @ifset @ifclear.     (line  48)
* ifcommanddefined:                      Testing for Texinfo Commands.
                                                              (line   6)
* ifcommandnotdefined:                   Testing for Texinfo Commands.
                                                              (line   6)
* ifdocbook:                             Conditional Commands.
                                                              (line  14)
* ifdocbook <1>:                         Raw Formatter Commands.
                                                              (line  61)
* ifhtml:                                Conditional Commands.
                                                              (line  14)
* ifhtml <1>:                            Raw Formatter Commands.
                                                              (line  41)
* ifinfo:                                Conditional Commands.
                                                              (line   9)
* ifnotdocbook:                          Conditional Not Commands.
                                                              (line   6)
* ifnothtml:                             Conditional Not Commands.
                                                              (line   6)
* ifnotinfo:                             Conditional Not Commands.
                                                              (line   6)
* ifnotplaintext:                        Conditional Not Commands.
                                                              (line   6)
* ifnottex:                              Conditional Not Commands.
                                                              (line   6)
* ifnotxml:                              Conditional Not Commands.
                                                              (line   6)
* ifplaintext:                           Conditional Commands.
                                                              (line  14)
* ifset:                                 @ifset @ifclear.     (line   6)
* iftex:                                 Conditional Commands.
                                                              (line  14)
* ifxml:                                 Conditional Commands.
                                                              (line  14)
* ifxml <1>:                             Raw Formatter Commands.
                                                              (line  45)
* ignore:                                Comments.            (line  27)
* image:                                 Images.              (line   6)
* include:                               Using Include Files. (line   6)
* indent:                                @indent.             (line   6)
* indentedblock:                         @indentedblock.      (line   6)
* indent_menu_descriptions:              Other Customization Variables.
                                                              (line 279)
* indicateurl:                           @indicateurl.        (line   6)
* info:                                  Customization Variables and Options.
                                                              (line  47)
* Info-validate:                         Running Info-validate.
                                                              (line   6)
* inforef:                               @inforef.            (line   6)
* inlinefmt:                             Inline Conditionals. (line   6)
* inlinefmtifelse:                       Inline Conditionals. (line   6)
* inlineifclear:                         @inlineifset @inlineifclear.
                                                              (line   6)
* inlineifset:                           @inlineifset @inlineifclear.
                                                              (line   6)
* inlineraw:                             Inline Conditionals. (line   6)
* insertcopying:                         @insertcopying.      (line   6)
* insert_nodes_for_sectioning_commands:  Other Customization Variables.
                                                              (line 283)
* isearch-backward:                      @deffnx.             (line  21)
* isearch-forward:                       @deffnx.             (line  20)
* item:                                  @itemize.            (line  20)
* item <1>:                              @table.              (line  30)
* item <2>:                              Multitable Rows.     (line   6)
* itemize:                               @itemize.            (line   6)
* itemx:                                 @itemx.              (line   6)
* kbd:                                   @kbd.                (line   6)
* kbdinputstyle:                         @kbd.                (line  20)
* key:                                   @key.                (line   6)
* kindex:                                Predefined Indices.  (line  15)
* l:                                     Inserting Accents.   (line  50)
* L:                                     Inserting Accents.   (line  50)
* LaTeX:                                 @TeX @LaTeX.         (line   6)
* lbracechar{} (literal {):              Inserting Braces.    (line   6)
* leq:                                   @geq @leq.           (line   6)
* lisp:                                  @lisp.               (line   6)
* listoffloats:                          @listoffloats.       (line   6)
* lowersections:                         Raise/lower sections.
                                                              (line   6)
* macro:                                 Defining Macros.     (line   6)
* majorheading:                          @majorheading @chapheading.
                                                              (line   6)
* makeinfo-buffer:                       makeinfo in Emacs.   (line  16)
* makeinfo-kill-job:                     makeinfo in Emacs.   (line  37)
* makeinfo-recenter-output-buffer:       makeinfo in Emacs.   (line  42)
* makeinfo-region:                       makeinfo in Emacs.   (line  12)
* math:                                  Inserting Math.      (line   6)
* menu:                                  Menus.               (line   6)
* minus:                                 @minus.              (line   6)
* move_index_entries_after_items:        Other Customization Variables.
                                                              (line 287)
* multitable:                            Multi-column Tables. (line   6)
* need:                                  @need.               (line   6)
* next-error:                            makeinfo in Emacs.   (line  26)
* node:                                  Writing a Node.      (line   6)
* noindent:                              @noindent.           (line   6)
* novalidate:                            Formatting Partial Documents.
                                                              (line   6)
* o:                                     Inserting Accents.   (line  50)
* O:                                     Inserting Accents.   (line  50)
* occur:                                 Using occur.         (line   6)
* occur-mode-goto-occurrence:            Showing the Structure.
                                                              (line  21)
* oddfooting:                            Custom Headings.     (line  53)
* oddfootingmarks:                       Custom Headings.     (line 132)
* oddheading:                            Custom Headings.     (line  53)
* oddheadingmarks:                       Custom Headings.     (line 132)
* oe:                                    Inserting Accents.   (line  50)
* OE:                                    Inserting Accents.   (line  50)
* ogonek:                                Inserting Accents.   (line  28)
* option:                                @option.             (line   6)
* ordf:                                  Inserting Accents.   (line  50)
* ordm:                                  Inserting Accents.   (line  50)
* page:                                  @page.               (line   6)
* page, within @titlepage:               @titlepage.          (line  17)
* pagesizes:                             @pagesizes.          (line   6)
* paragraphindent:                       @paragraphindent.    (line   6)
* parse:                                 Customization Variables and Options.
                                                              (line  66)
* part:                                  @part.               (line   6)
* pdf:                                   Customization Variables and Options.
                                                              (line  48)
* phoo:                                  @definfoenclose.     (line  35)
* pindex:                                Predefined Indices.  (line  17)
* plaintexinfo:                          Customization Variables and Options.
                                                              (line  69)
* plaintext:                             Customization Variables and Options.
                                                              (line  49)
* point:                                 @point.              (line   6)
* pounds:                                @pounds.             (line   6)
* print:                                 @print.              (line   6)
* printindex:                            Printing Indices & Menus.
                                                              (line  23)
* ps:                                    Customization Variables and Options.
                                                              (line  50)
* pxref:                                 @pxref.              (line   6)
* questiondown:                          Inserting Accents.   (line  50)
* quotation:                             @quotation.          (line   6)
* quotedblbase:                          Inserting Quotation Marks.
                                                              (line  44)
* quotedblleft:                          Inserting Quotation Marks.
                                                              (line  44)
* quotedblright:                         Inserting Quotation Marks.
                                                              (line  44)
* quoteleft:                             Inserting Quotation Marks.
                                                              (line  44)
* quoteright:                            Inserting Quotation Marks.
                                                              (line  44)
* quotesinglbase:                        Inserting Quotation Marks.
                                                              (line  44)
* r (roman font):                        Fonts.               (line  35)
* raggedright:                           @raggedright.        (line   6)
* raisesections:                         Raise/lower sections.
                                                              (line   6)
* rawtext:                               Customization Variables and Options.
                                                              (line  75)
* rbracechar{} (literal }):              Inserting Braces.    (line   6)
* ref:                                   @ref.                (line   6)
* refill:                                Command List.        (line 928)
* regenerate_master_menu:                Other Customization Variables.
                                                              (line 293)
* registeredsymbol:                      @registeredsymbol.   (line   6)
* result:                                @result.             (line   6)
* ringaccent:                            Inserting Accents.   (line  28)
* rmacro:                                Defining Macros.     (line  44)
* samp:                                  @samp.               (line   6)
* sansserif (sans serif font):           Fonts.               (line  39)
* sc (small caps font):                  Smallcaps.           (line   6)
* section:                               @section.            (line   6)
* set:                                   @set @value.         (line   6)
* setchapternewpage:                     @setchapternewpage.  (line   6)
* setcontentsaftertitlepage:             Contents.            (line  51)
* setfilename:                           @setfilename.        (line   6)
* setshortcontentsaftertitlepage:        Contents.            (line  51)
* settitle:                              @settitle.           (line   6)
* shortcaption:                          @caption @shortcaption.
                                                              (line   6)
* shortcontents:                         Contents.            (line   6)
* shorttitlepage:                        @titlepage.          (line  46)
* simple_menu:                           Other Customization Variables.
                                                              (line 298)
* slanted (slanted font):                Fonts.               (line  42)
* smallbook:                             @smallbook.          (line   6)
* smalldisplay:                          @display.            (line  15)
* smallexample:                          @small....           (line   6)
* smallformat:                           @format.             (line  15)
* smallformat <1>:                       @small....           (line   6)
* smallindentedblock:                    @indentedblock.      (line  21)
* smalllisp:                             @small....           (line   6)
* smallquotation:                        @quotation.          (line  71)
* smallquotation <1>:                    @small....           (line   6)
* sortas:                                Indexing Commands.   (line  43)
* sp (line spacing):                     @sp.                 (line   6)
* sp (titlepage line spacing):           @titlefont @center @sp.
                                                              (line   6)
* ss:                                    Inserting Accents.   (line  50)
* strong:                                @emph @strong.       (line   6)
* structure:                             Customization Variables and Options.
                                                              (line  81)
* sub:                                   Inserting Subscripts and Superscripts.
                                                              (line   6)
* subheading:                            @unnumberedsubsec @appendixsubsec @subheading.
                                                              (line   6)
* subsection:                            @subsection.         (line   6)
* subsubheading:                         @subsubsection.      (line   6)
* subsubsection:                         @subsubsection.      (line   6)
* subtitle:                              @title @subtitle @author.
                                                              (line   6)
* summarycontents:                       Contents.            (line   6)
* sup:                                   Inserting Subscripts and Superscripts.
                                                              (line   6)
* syncodeindex:                          @syncodeindex.       (line   6)
* synindex:                              @synindex.           (line   6)
* t (typewriter font):                   Fonts.               (line  45)
* tab:                                   Multitable Rows.     (line   6)
* table:                                 Two-column Tables.   (line   6)
* TeX:                                   @TeX @LaTeX.         (line   6)
* tex:                                   Raw Formatter Commands.
                                                              (line  14)
* texinfo-all-menus-update:              Updating Commands.   (line 112)
* texinfo-every-node-update:             Updating Commands.   (line 107)
* texinfo-format-buffer:                 texinfo-format commands.
                                                              (line  23)
* texinfo-format-buffer <1>:             Info Formatting.     (line  22)
* texinfo-format-region:                 texinfo-format commands.
                                                              (line  19)
* texinfo-format-region <1>:             Info Formatting.     (line  13)
* texinfo-indent-menu-description:       Other Updating Commands.
                                                              (line  45)
* texinfo-insert-@code:                  Inserting.           (line  15)
* texinfo-insert-@dfn:                   Inserting.           (line  19)
* texinfo-insert-@end:                   Inserting.           (line  23)
* texinfo-insert-@example:               Inserting.           (line  62)
* texinfo-insert-@item:                  Inserting.           (line  30)
* texinfo-insert-@kbd:                   Inserting.           (line  35)
* texinfo-insert-@node:                  Inserting.           (line  39)
* texinfo-insert-@noindent:              Inserting.           (line  44)
* texinfo-insert-@samp:                  Inserting.           (line  49)
* texinfo-insert-@table:                 Inserting.           (line  53)
* texinfo-insert-@var:                   Inserting.           (line  58)
* texinfo-insert-braces:                 Inserting.           (line  67)
* texinfo-insert-node-lines:             Other Updating Commands.
                                                              (line  10)
* texinfo-make-menu:                     Updating Commands.   (line  93)
* texinfo-master-menu:                   Updating Commands.   (line  55)
* texinfo-multiple-files-update:         texinfo-multiple-files-update.
                                                              (line   6)
* texinfo-multiple-files-update (in brief): Other Updating Commands.
                                                              (line  34)
* texinfo-sequential-node-update:        Other Updating Commands.
                                                              (line  54)
* texinfo-show-structure:                Showing the Structure.
                                                              (line  17)
* texinfo-show-structure <1>:            Using texinfo-show-structure.
                                                              (line   6)
* texinfo-start-menu-description:        Inserting.           (line  94)
* texinfo-tex-buffer:                    Printing.            (line  21)
* texinfo-tex-print:                     Printing.            (line  42)
* texinfo-tex-region:                    Printing.            (line  27)
* texinfo-update-node:                   Updating Commands.   (line  83)
* Texinfo::Parser module:                Reference Implementation.
                                                              (line  31)
* texinfosxml:                           Customization Variables and Options.
                                                              (line  85)
* textcontent:                           Customization Variables and Options.
                                                              (line  89)
* textdegree:                            @textdegree.         (line   6)
* th:                                    Inserting Accents.   (line  50)
* TH:                                    Inserting Accents.   (line  50)
* thischapter:                           Custom Headings.     (line  86)
* thischaptername:                       Custom Headings.     (line  79)
* thischapternum:                        Custom Headings.     (line  82)
* thisfile:                              Custom Headings.     (line  94)
* thispage:                              Custom Headings.     (line  66)
* thissection:                           Custom Headings.     (line  75)
* thissectionname:                       Custom Headings.     (line  69)
* thissectionnum:                        Custom Headings.     (line  72)
* thistitle:                             Custom Headings.     (line  90)
* tie (unbreakable interword space):     @tie.                (line   6)
* tieaccent:                             Inserting Accents.   (line  28)
* tindex:                                Predefined Indices.  (line  19)
* title:                                 @title @subtitle @author.
                                                              (line   6)
* titlefont:                             @titlefont @center @sp.
                                                              (line   6)
* titlepage:                             @titlepage.          (line   6)
* today:                                 Custom Headings.     (line 102)
* top:                                   The Top Node.        (line  12)
* top <1>:                               @top Command.        (line   6)
* U:                                     Inserting Unicode.   (line   6)
* u (breve accent):                      Inserting Accents.   (line  28)
* ubaraccent:                            Inserting Accents.   (line  28)
* udotaccent:                            Inserting Accents.   (line  28)
* unmacro:                               Defining Macros.     (line  56)
* unnumbered:                            @unnumbered @appendix.
                                                              (line   6)
* unnumberedsec:                         @unnumberedsec @appendixsec @heading.
                                                              (line   6)
* unnumberedsubsec:                      @unnumberedsubsec @appendixsubsec @subheading.
                                                              (line   6)
* unnumberedsubsubsec:                   @subsubsection.      (line   6)
* up-list:                               Inserting.           (line  72)
* uref:                                  @url.                (line   6)
* urefbreakstyle:                        URL Line Breaking.   (line  15)
* url:                                   @url.                (line  13)
* v (caron):                             Inserting Accents.   (line  28)
* validatemenus:                         Writing a Menu.      (line  38)
* value:                                 @set @value.         (line   6)
* var:                                   @var.                (line   6)
* verb:                                  @verb.               (line   6)
* verbatim:                              @verbatim.           (line   6)
* verbatiminclude:                       @verbatiminclude.    (line   6)
* vindex:                                Predefined Indices.  (line  22)
* vskip TeX vertical skip:               Copyright.           (line  12)
* vtable:                                @ftable @vtable.     (line   6)
* w:                                     @w.                  (line   6)
* xml:                                   Raw Formatter Commands.
                                                              (line  45)
* xml <1>:                               Customization Variables and Options.
                                                              (line  51)
* xref:                                  @xref.               (line   6)
* xrefautomaticsectiontitle:             Three Arguments.     (line  56)


File: texinfo.info,  Node: General Index,  Prev: Command and Variable Index,  Up: Top

General Index
*************

 [index ]
* Menu:

* !:                                     Inserting Accents.   (line  50)
* " (undirected double quote character): Inserting Quotation Marks.
                                                              (line  44)
* #line directive:                       #line Directive.     (line   6)
* #line directives, not processing with TeX: #line and TeX.   (line   6)
* #line syntax details:                  #line Syntax Details.
                                                              (line   6)
* $Id:                                   GNU Sample Texts.    (line  22)
* $Id expansion, preventing:             @w.                  (line  27)
* &#xHEX;, output from @U:               Inserting Unicode.   (line  28)
* ':                                     Inserting Quotation Marks.
                                                              (line  44)
* '':                                    Inserting Quotation Marks.
                                                              (line  44)
* (dir) as Up node of Top node:          First Node.          (line  14)
* , (single low-9 quotation mark):       Inserting Quotation Marks.
                                                              (line  44)
* ,, (double low-9 quotation mark):      Inserting Quotation Marks.
                                                              (line  44)
* -, breakpoint within @code:            @allowcodebreaks.    (line   6)
* --add-once, for install-info:          Invoking install-info.
                                                              (line  33)
* --align=COLUMN, for install-info:      Invoking install-info.
                                                              (line  37)
* --append-new-sections, for install-info: Invoking install-info.
                                                              (line  43)
* --calign=COLUMN, for install-info:     Invoking install-info.
                                                              (line  47)
* --command, for texi2dvi:               Format with texi2dvi.
                                                              (line  48)
* --commands-in-node-names:              Invoking texi2any.   (line  42)
* --conf-dir=PATH:                       Invoking texi2any.   (line  48)
* --css-include:                         Invoking texi2any.   (line  55)
* --css-ref:                             Invoking texi2any.   (line  61)
* --debug, for install-info:             Invoking install-info.
                                                              (line  55)
* --delete, for install-info:            Invoking install-info.
                                                              (line  58)
* --description=TEXT, for install-info:  Invoking install-info.
                                                              (line  64)
* --dir-file=NAME, for install-info:     Invoking install-info.
                                                              (line  69)
* --disable-encoding:                    Invoking texi2any.   (line  77)
* --docbook:                             Invoking texi2any.   (line  84)
* --document-language:                   Invoking texi2any.   (line  87)
* --dry-run, for install-info:           Invoking install-info.
                                                              (line  73)
* --dvi:                                 Invoking texi2any.   (line  93)
* --dvipdf:                              Invoking texi2any.   (line  97)
* --dvipdf, for texi2dvi:                Format with texi2dvi.
                                                              (line  32)
* --enable-encoding:                     Invoking texi2any.   (line  77)
* --entry=TEXT, for install-info:        Invoking install-info.
                                                              (line  76)
* --error-limit=LIMIT:                   Invoking texi2any.   (line 102)
* --fill-column=WIDTH:                   Invoking texi2any.   (line 107)
* --footnote-style=STYLE:                Invoking texi2any.   (line 116)
* --force:                               Invoking texi2any.   (line 133)
* --help, for texi2any:                  Invoking texi2any.   (line 138)
* --help, for texindex:                  Invoking install-info.
                                                              (line  83)
* --html:                                Invoking texi2any.   (line 142)
* --ifdocbook:                           Invoking texi2any.   (line 157)
* --ifhtml:                              Invoking texi2any.   (line 158)
* --ifinfo:                              Invoking texi2any.   (line 159)
* --ifplaintext:                         Invoking texi2any.   (line 160)
* --iftex:                               Invoking texi2any.   (line 161)
* --ifxml:                               Invoking texi2any.   (line 162)
* --info:                                Invoking texi2any.   (line 168)
* --info-dir=DIR, for install-info:      Invoking install-info.
                                                              (line  91)
* --info-file=FILE, for install-info:    Invoking install-info.
                                                              (line  87)
* --infodir=DIR, for install-info:       Invoking install-info.
                                                              (line  95)
* --init-file=FILE:                      Invoking texi2any.   (line 175)
* --internal-links=FILE:                 Invoking texi2any.   (line 183)
* --item=TEXT, for install-info:         Invoking install-info.
                                                              (line  98)
* --keep-old, for install-info:          Invoking install-info.
                                                              (line 102)
* --language, for texi2dvi:              Format with texi2dvi.
                                                              (line  42)
* --macro-expand=FILE:                   Invoking texi2any.   (line 192)
* --max-width=COLUMN, for install-info:  Invoking install-info.
                                                              (line 106)
* --maxwidth=COLUMN, for install-info:   Invoking install-info.
                                                              (line 110)
* --menuentry=TEXT, for install-info:    Invoking install-info.
                                                              (line 113)
* --name=TEXT, for install-info:         Invoking install-info.
                                                              (line 116)
* --no-headers:                          Invoking texi2any.   (line 197)
* --no-headers <1>:                      Other Customization Variables.
                                                              (line 197)
* --no-ifdocbook:                        Invoking texi2any.   (line 210)
* --no-ifhtml:                           Invoking texi2any.   (line 211)
* --no-ifinfo:                           Invoking texi2any.   (line 212)
* --no-ifplaintext:                      Invoking texi2any.   (line 213)
* --no-iftex:                            Invoking texi2any.   (line 214)
* --no-ifxml:                            Invoking texi2any.   (line 215)
* --no-indent, for install-info:         Invoking install-info.
                                                              (line 127)
* --no-node-files:                       Invoking texi2any.   (line 223)
* --no-number-footnotes:                 Invoking texi2any.   (line 237)
* --no-number-sections:                  Invoking texi2any.   (line 243)
* --no-pointer-validate:                 Invoking texi2any.   (line 250)
* --no-split:                            Invoking texi2any.   (line 339)
* --no-validate:                         Invoking texi2any.   (line 250)
* --no-warn:                             Invoking texi2any.   (line 257)
* --node-files:                          Invoking texi2any.   (line 223)
* --node-files, and HTML cross-references: HTML Xref Configuration.
                                                              (line  84)
* --number-sections:                     Invoking texi2any.   (line 243)
* --output=FILE:                         Invoking texi2any.   (line 261)
* --outputindent:                        Invoking texi2any.   (line 283)
* --paragraph-indent=INDENT:             Invoking texi2any.   (line 292)
* --pdf:                                 Invoking texi2any.   (line 311)
* --pdf, for texi2dvi:                   Format with texi2dvi.
                                                              (line  25)
* --plaintext:                           Invoking texi2any.   (line 315)
* --ps:                                  Invoking texi2any.   (line 325)
* --ps, for texi2dvi:                    Format with texi2dvi.
                                                              (line  38)
* --quiet, for install-info:             Invoking install-info.
                                                              (line 131)
* --regex=REGEX, for install-info:       Invoking install-info.
                                                              (line 168)
* --remove, for install-info:            Invoking install-info.
                                                              (line 134)
* --remove-exactly, for install-info:    Invoking install-info.
                                                              (line 137)
* --section REGEX SEC, for install-info: Invoking install-info.
                                                              (line 149)
* --section=SEC, for install-info:       Invoking install-info.
                                                              (line 141)
* --set-customization-variable VAR=VALUE: Invoking texi2any.  (line 330)
* --silent, for install-info:            Invoking install-info.
                                                              (line 131)
* --split-size=NUM:                      Invoking texi2any.   (line 363)
* --split=HOW:                           Invoking texi2any.   (line 339)
* --test, for install-info:              Invoking install-info.
                                                              (line 174)
* --transliterate-file-names:            Invoking texi2any.   (line 368)
* --verbose:                             Invoking texi2any.   (line 377)
* --version, for install-info:           Invoking install-info.
                                                              (line 177)
* --version, for texi2any:               Invoking texi2any.   (line 383)
* --xml:                                 Invoking texi2any.   (line 390)
* --Xopt STR:                            Invoking texi2any.   (line 386)
* -c VAR=VALUE:                          Invoking texi2any.   (line 330)
* -D VAR:                                Invoking texi2any.   (line  67)
* -E FILE:                               Invoking texi2any.   (line 192)
* -e LIMIT:                              Invoking texi2any.   (line 102)
* -F:                                    Invoking texi2any.   (line 133)
* -f WIDTH:                              Invoking texi2any.   (line 107)
* -h:                                    Invoking texi2any.   (line 138)
* -I PATH:                               Invoking texi2any.   (line 148)
* -o FILE:                               Invoking texi2any.   (line 261)
* -p INDENT:                             Invoking texi2any.   (line 292)
* -P PATH:                               Invoking texi2any.   (line 287)
* -s STYLE:                              Invoking texi2any.   (line 116)
* -V:                                    Invoking texi2any.   (line 383)
* 8-bit characters, in HTML cross-references: HTML Xref 8-bit Character Expansion.
                                                              (line   6)
* <:                                     Inserting Quotation Marks.
                                                              (line  44)
* <<:                                    Inserting Quotation Marks.
                                                              (line  44)
* <abbr> and <abbrev> tags:              @abbr.               (line  22)
* <acknowledgements> Docbook tag:        @unnumbered @appendix.
                                                              (line  26)
* <acronym> tag:                         @acronym.            (line  19)
* <blockquote> HTML tag:                 @quotation.          (line  47)
* <body> text, customizing:              HTML Customization Variables.
                                                              (line  55)
* <caution> Docbook tag:                 @quotation.          (line  47)
* <chapter> Docbook tag:                 @unnumbered @appendix.
                                                              (line  26)
* <colophon> Docbook tag:                @unnumbered @appendix.
                                                              (line  26)
* <dedication> Docbook tag:              @unnumbered @appendix.
                                                              (line  26)
* <head> HTML tag, and <link>:           HTML Customization Variables.
                                                              (line 269)
* <important> Docbook tag:               @quotation.          (line  47)
* <lineannotation> Docbook tag:          Fonts.               (line  51)
* <link> HTML tag, in <head>:            HTML Customization Variables.
                                                              (line 269)
* <meta> HTML tag, and charset specification: @documentencoding.
                                                              (line  54)
* <meta> HTML tag, and document description: @documentdescription.
                                                              (line   6)
* <note> Docbook tag:                    @quotation.          (line  47)
* <preface> Docbook tag:                 @unnumbered @appendix.
                                                              (line  26)
* <small> tag:                           Smallcaps.           (line  21)
* <thead> HTML/XML tag:                  Multitable Rows.     (line  12)
* <tip> Docbook tag:                     @quotation.          (line  47)
* <title> Docbook tag:                   @unnumbered @appendix.
                                                              (line  26)
* <title> HTML tag:                      @settitle.           (line  20)
* <URL...> convention, not used:         @url Examples.       (line  51)
* <warning> Docbook tag:                 @quotation.          (line  47)
* >:                                     Inserting Quotation Marks.
                                                              (line  44)
* >>:                                    Inserting Quotation Marks.
                                                              (line  44)
* ?:                                     Inserting Accents.   (line  50)
* @ as continuation in definition commands: Def Cmd Continuation Lines.
                                                              (line   6)
* @-command list:                        Command List.        (line   6)
* @-command syntax:                      Command Syntax.      (line   6)
* @-commands:                            Conventions.         (line  16)
* @-commands in node names:              Node Line Requirements.
                                                              (line  17)
* @-commands, customization variables for: Customization Variables for @-Commands.
                                                              (line   6)
* @import specifications, in CSS files:  HTML CSS.            (line  36)
* @include file sample:                  Sample Include File. (line   6)
* @menu parts:                           Menu Parts.          (line   6)
* @node line writing:                    Writing a Node.      (line   6)
* @url, examples of using:               @url Examples.       (line   6)
* @w, for blank items:                   @itemize.            (line  10)
* \input source line ignored:            @setfilename.        (line  19)
* \openout line in log file:             Format with texi2dvi.
                                                              (line 106)
* ^@^H for images in Info:               Image Syntax.        (line  75)
* _, breakpoint within @code:            @allowcodebreaks.    (line   6)
* ' <1>:                                 Inserting Quotation Marks.
                                                              (line  44)
* '' <1>:                                Inserting Quotation Marks.
                                                              (line  44)
* a:                                     Inserting Accents.   (line  50)
* A4 paper, printing on:                 A4 Paper.            (line   6)
* A5 paper, printing on:                 A4 Paper.            (line   6)
* aa:                                    Inserting Accents.   (line  50)
* AA:                                    Inserting Accents.   (line  50)
* Abbreviations for keys:                @key.                (line  20)
* Abbreviations, tagging:                @abbr.               (line   6)
* Abstract of document:                  @documentdescription.
                                                              (line   6)
* Abstract syntax tree representation of documents: Reference Implementation.
                                                              (line  17)
* Accents, inserting:                    Inserting Accents.   (line   6)
* accesskey, customization variable for: HTML Customization Variables.
                                                              (line 261)
* accesskey, in HTML output of menus:    Writing a Menu.      (line  44)
* accesskey, in HTML output of nodes:    Texinfo Document Structure.
                                                              (line  20)
* Acronyms, tagging:                     @acronym.            (line   6)
* Acute accent:                          Inserting Accents.   (line  28)
* Adding a new Info file:                New Info File.       (line   6)
* Additional output formats:             Adding Output Formats.
                                                              (line   6)
* Advice on writing entries:             Index Entries.       (line   6)
* ae:                                    Inserting Accents.   (line  50)
* AE:                                    Inserting Accents.   (line  50)
* after, value for @urefbreakstyle:      URL Line Breaking.   (line  24)
* AFTER_ABOUT:                           HTML Customization Variables.
                                                              (line  18)
* AFTER_BODY_OPEN:                       HTML Customization Variables.
                                                              (line  14)
* AFTER_OVERVIEW:                        HTML Customization Variables.
                                                              (line  23)
* AFTER_TOC_LINES:                       HTML Customization Variables.
                                                              (line  24)
* Aliases, command:                      @alias.              (line   6)
* All-permissive copying license:        All-permissive Copying License.
                                                              (line   6)
* Allow line break:                      Line Breaks.         (line   6)
* Alphabetical @-command list:           Command List.        (line   6)
* Alt attribute for images:              Image Syntax.        (line  55)
* Anchors:                               @anchor.             (line   6)
* Angle quotation marks:                 Inserting Quotation Marks.
                                                              (line  44)
* Another Info directory:                Other Info Directories.
                                                              (line   6)
* Arguments, repeated and optional:      Optional Arguments.  (line   6)
* ASCII text output with --plaintext:    Invoking texi2any.   (line 315)
* ASCII, source document portability using: Inserting Unicode.
                                                              (line  15)
* Aspect ratio of images:                Image Scaling.       (line   6)
* At sign, inserting:                    Inserting an Atsign. (line   6)
* Auk, bird species:                     Inserting Quotation Marks.
                                                              (line  61)
* autoexec.bat:                          Other Info Directories.
                                                              (line  58)
* automake, and version info:            GNU Sample Texts.    (line  37)
* Automatic pointer creation with makeinfo: makeinfo Pointer Creation.
                                                              (line   6)
* Automatic quoting of commas for some macros: Invoking Macros.
                                                              (line  44)
* Automatically insert nodes, menus:     Updating Nodes and Menus.
                                                              (line   6)
* Auxiliary files, omitting:             Formatting Partial Documents.
                                                              (line   6)
* AVOID_MENU_REDUNDANCY:                 HTML Customization Variables.
                                                              (line  10)
* B5 paper, printing on:                 @pagesizes.          (line  16)
* Back-end output formats:               Output Formats.      (line   6)
* Backslash in macros:                   Defining Macros.     (line  37)
* Backslash, and macros:                 Invoking Macros.     (line  23)
* Backslash, in macro arguments:         Invoking Macros.     (line  85)
* Backslash, inserting:                  Inserting a Backslash.
                                                              (line   6)
* backtick:                              Inserting Quote Characters.
                                                              (line  26)
* Badly referenced nodes:                Running Info-validate.
                                                              (line   6)
* BASEFILENAME_LENGTH:                   HTML Customization Variables.
                                                              (line  34)
* BASEFILENAME_LENGTH <1>:               HTML Xref Link Basics.
                                                              (line  45)
* Bastard title page:                    @titlepage.          (line  46)
* Batch formatting for Info:             Batch Formatting.    (line   6)
* Beebe, Nelson:                         Output Formats.      (line  57)
* before, value for @urefbreakstyle:     URL Line Breaking.   (line  24)
* BEFORE_OVERVIEW:                       HTML Customization Variables.
                                                              (line  39)
* BEFORE_TOC_LINES:                      HTML Customization Variables.
                                                              (line  40)
* Beginning a Texinfo file:              Beginning and Ending a File.
                                                              (line   6)
* Beginning line of a Texinfo file:      First Line.          (line   6)
* Berry, Karl:                           History.             (line   6)
* Big points:                            Image Scaling.       (line  22)
* BIG_RULE:                              HTML Customization Variables.
                                                              (line  50)
* Black rectangle in hardcopy:           Overfull hboxes.     (line  41)
* Blank lines:                           @sp.                 (line   6)
* Body of a macro:                       Defining Macros.     (line  27)
* BODYTEXT:                              HTML Customization Variables.
                                                              (line  54)
* Bold font:                             Fonts.               (line  29)
* Bolio:                                 History.             (line  34)
* Book characteristics, printed:         Printed Books.       (line   6)
* Book, printing small:                  @smallbook.          (line   6)
* border-pattern:                        Object-Oriented Variables.
                                                              (line  21)
* border-pattern of Window:              Object-Oriented Variables.
                                                              (line  40)
* border-pattern of Window <1>:          Object-Oriented Variables.
                                                              (line  56)
* border-pattern of Window <2>:          Object-Oriented Variables.
                                                              (line  75)
* BoTeX:                                 History.             (line  34)
* Box with rounded corners:              @cartouche.          (line   6)
* Box, ugly black in hardcopy:           Overfull hboxes.     (line  41)
* Brace-delimited conditional text:      Inline Conditionals. (line   6)
* Brace-delimited flag conditionals:     @inlineifset @inlineifclear.
                                                              (line   6)
* Braces and argument syntax:            Command Syntax.      (line  57)
* Braces, in index entries:              Details of texindex. (line   6)
* Braces, in macro arguments:            Invoking Macros.     (line  85)
* Braces, inserting:                     Inserting Braces.    (line   6)
* Braces, when to use:                   Conventions.         (line  21)
* Breakpoints within urls:               URL Line Breaking.   (line   6)
* Breaks in a line:                      Line Breaks.         (line   6)
* Breaks, within @code:                  @allowcodebreaks.    (line   6)
* Breve accent:                          Inserting Accents.   (line  28)
* Buffer formatting and printing:        Printing.            (line   6)
* Bugs, reporting:                       Reporting Bugs.      (line   6)
* Bzipped dir files, reading:            Invoking install-info.
                                                              (line  23)
* Capitalization of index entries:       Index Entries.       (line   6)
* Captions, for floats:                  @caption @shortcaption.
                                                              (line   6)
* Caron:                                 Inserting Accents.   (line  28)
* Cascading Style Sheets, and HTML output: HTML CSS.          (line   6)
* Case in node name:                     Node Line Requirements.
                                                              (line  73)
* Case, not altering in @code:           @code.               (line  19)
* CASE_INSENSITIVE_FILENAMES:            HTML Customization Variables.
                                                              (line  59)
* Catching errors with Info formatting:  Debugging with Info. (line   6)
* Catching errors with TeX formatting:   Debugging with TeX.  (line   6)
* Catching mistakes:                     Catching Mistakes.   (line   6)
* Catcode for comments in TeX:           Comments.            (line  20)
* Categories, choosing:                  Installing Dir Entries.
                                                              (line  54)
* Category codes, of plain TeX:          Raw Formatter Commands.
                                                              (line  14)
* Caveats for macro usage:               Macro Details.       (line   6)
* Cedilla accent:                        Inserting Accents.   (line  28)
* Centimeters:                           Image Scaling.       (line  26)
* Chapter structuring:                   Chapter Structuring. (line   6)
* Chapters, formatting one at a time:    Formatting Partial Documents.
                                                              (line   6)
* CHAPTER_HEADER_LEVEL:                  HTML Customization Variables.
                                                              (line  63)
* Character set, declaring:              @documentencoding.   (line   6)
* Characteristics, printed books or manuals: Printed Books.   (line   6)
* Characters, basic input:               Conventions.         (line   6)
* Characters, invalid in node name:      Node Line Requirements.
                                                              (line  43)
* Chassell, Robert J.:                   History.             (line   6)
* Check accent:                          Inserting Accents.   (line  28)
* Checking for badly referenced nodes:   Running Info-validate.
                                                              (line   6)
* Checking for Texinfo commands:         Testing for Texinfo Commands.
                                                              (line   6)
* Checklist for bug reports:             Reporting Bugs.      (line  11)
* CHECK_HTMLXREF:                        HTML Customization Variables.
                                                              (line  67)
* Ciceros:                               Image Scaling.       (line  32)
* Circumflex accent:                     Inserting Accents.   (line  28)
* Click sequences:                       Click Sequences.     (line   6)
* CLOSE_QUOTE_SYMBOL:                    Other Customization Variables.
                                                              (line  10)
* Closing punctuation, and sentence ending: Ending a Sentence.
                                                              (line  29)
* CM-Super fonts:                        Inserting Quotation Marks.
                                                              (line  37)
* CM-Super fonts, installing:            Preparing for TeX.   (line  30)
* Code point of Unicode character, inserting by: Inserting Unicode.
                                                              (line   6)
* code, value for @kbdinputstyle:        @kbd.                (line  26)
* Collapsing whitespace around continuations: Def Cmd Continuation Lines.
                                                              (line  28)
* Colon in node name:                    Node Line Requirements.
                                                              (line  43)
* Colon, last in INFOPATH:               Other Info Directories.
                                                              (line  70)
* Colored links, in PDF output:          PDF Colors.          (line   6)
* Column widths, defining for multitables: Multitable Column Widths.
                                                              (line   6)
* Combining indices:                     Combining Indices.   (line   6)
* Comma after cross-reference:           Cross Reference Parts.
                                                              (line  80)
* Comma in node name:                    Node Line Requirements.
                                                              (line  43)
* Comma, in macro arguments:             Invoking Macros.     (line  38)
* Comma, inserting:                      Inserting a Comma.   (line   6)
* Command aliases:                       @alias.              (line   6)
* Command definitions:                   Sample Function Definition.
                                                              (line   6)
* Command names, indicating:             @command.            (line   6)
* Command syntax:                        Command Syntax.      (line   6)
* Command-line options of texi2html:     texi2html.           (line  45)
* Commands in node names:                Node Line Requirements.
                                                              (line  17)
* Commands to insert special characters: Special Characters.  (line   6)
* Commands using raw TeX:                Raw Formatter Commands.
                                                              (line   6)
* Commands, inserting them:              Inserting.           (line   6)
* Commands, testing for Texinfo:         Testing for Texinfo Commands.
                                                              (line   6)
* Comments:                              Comments.            (line   6)
* Comments, in CSS files:                HTML CSS.            (line  42)
* compatibility, with texi2html:         Other Customization Variables.
                                                              (line 223)
* Compile command for formatting:        Compile-Command.     (line   6)
* COMPLEX_FORMAT_IN_TABLE:               HTML Customization Variables.
                                                              (line  72)
* Compressed dir files, reading:         Invoking install-info.
                                                              (line  23)
* Computer Modern fonts:                 @documentencoding.   (line  65)
* Conditional commands, inline:          Inline Conditionals. (line   6)
* Conditionally visible text:            Conditionals.        (line   6)
* Conditionals, nested:                  Conditional Nesting. (line   6)
* Conditions for copying Texinfo:        Copying Conditions.  (line   6)
* Configuration, for HTML cross-manual references: HTML Xref Configuration.
                                                              (line   6)
* Cons, Lionel:                          History.             (line  54)
* Cons, Lionel <1>:                      texi2html.           (line   6)
* Contents, after title page:            Contents.            (line  51)
* Contents, table of:                    Contents.            (line   6)
* Contents-like outline of file structure: Showing the Structure.
                                                              (line   6)
* Contexts, of @-commands:               Command Contexts.    (line   6)
* Continuation lines in definition commands: Def Cmd Continuation Lines.
                                                              (line   6)
* Control keys, specifying:              @key.                (line  20)
* Controlling line breaks:               Line Breaks.         (line   6)
* Conventions for writing definitions:   Def Cmd Conventions. (line   6)
* Conventions, syntactic:                Conventions.         (line   6)
* Copying conditions:                    Copying Conditions.  (line   6)
* Copying Permissions:                   Document Permissions.
                                                              (line   6)
* Copying text, including:               @insertcopying.      (line   6)
* Copyright holder for FSF works:        @copying.            (line  51)
* Copyright page:                        Copyright.           (line   6)
* Copyright symbol:                      @copyright.          (line   6)
* Copyright word, always in English:     @copying.            (line  42)
* Correcting mistakes:                   Catching Mistakes.   (line   6)
* Country codes:                         @documentlanguage.   (line  53)
* cp (concept) index:                    Predefined Indices.  (line  10)
* CPP_LINE_DIRECTIVES:                   #line Directive.     (line  15)
* CPP_LINE_DIRECTIVES <1>:               Other Customization Variables.
                                                              (line  15)
* Create nodes, menus automatically:     Updating Nodes and Menus.
                                                              (line   6)
* Creating an Info file:                 Creating an Info File.
                                                              (line   6)
* Creating an unsplit file:              Unsplit.             (line   6)
* Creating index entries:                Indexing Commands.   (line   6)
* Creating pointers with makeinfo:       makeinfo Pointer Creation.
                                                              (line   6)
* Critical editions:                     Footnote Commands.   (line  44)
* Cropmarks for printing:                Cropmarks and Magnification.
                                                              (line   6)
* Cross-reference configuration, for HTML: HTML Xref Configuration.
                                                              (line   6)
* Cross-reference parts:                 Cross Reference Parts.
                                                              (line   6)
* Cross-reference targets, arbitrary:    @anchor.             (line   6)
* Cross-references:                      Cross References.    (line   6)
* Cross-references using @inforef:       @inforef.            (line   6)
* Cross-references using @pxref:         @pxref.              (line   6)
* Cross-references using @ref:           @ref.                (line   6)
* Cross-references using @xref:          @xref.               (line   6)
* Cross-references, in HTML output:      HTML Xref.           (line   6)
* Cross-references, in Info format:      Info Format Cross Reference.
                                                              (line   6)
* .cshrc initialization file:            Preparing for TeX.   (line   6)
* CSS, and HTML output:                  HTML CSS.            (line   6)
* CSS_LINES:                             HTML Customization Variables.
                                                              (line  76)
* CTRL-l:                                Conventions.         (line  45)
* Custom page sizes:                     @pagesizes.          (line   6)
* Customization variables for @-commands: Customization Variables for @-Commands.
                                                              (line   6)
* Customization variables for options:   Customization Variables and Options.
                                                              (line   6)
* Customize Emacs package (Development/Docs/Texinfo): Texinfo Mode Printing.
                                                              (line  92)
* Customized highlighting:               @definfoenclose.     (line   6)
* Customizing of TeX for Texinfo:        Preparing for TeX.   (line  40)
* CVS $Id:                               GNU Sample Texts.    (line  22)
* d:                                     Inserting Accents.   (line  50)
* D:                                     Inserting Accents.   (line  50)
* Dash, breakpoint within @code:         @allowcodebreaks.    (line   6)
* Dashes in source:                      Conventions.         (line  35)
* DATE_IN_HEADER:                        HTML Customization Variables.
                                                              (line  80)
* DEBUG:                                 Other Customization Variables.
                                                              (line  19)
* debugging document, with tree representation: Customization Variables and Options.
                                                              (line  62)
* Debugging the Texinfo structure:       Catching Mistakes.   (line   6)
* Debugging with Info formatting:        Debugging with Info. (line   6)
* Debugging with TeX formatting:         Debugging with TeX.  (line   6)
* Default font:                          Fonts.               (line  35)
* DEFAULT_RULE:                          HTML Customization Variables.
                                                              (line  89)
* Defining indexing entries:             Indexing Commands.   (line   6)
* Defining macros:                       Defining Macros.     (line   6)
* Defining new indices:                  New Indices.         (line   6)
* Defining new Texinfo commands:         Defining New Texinfo Commands.
                                                              (line   6)
* Definition command headings, continuing: Def Cmd Continuation Lines.
                                                              (line   6)
* Definition commands:                   Definition Commands. (line   6)
* Definition conventions:                Def Cmd Conventions. (line   6)
* Definition lists, typesetting:         @table.              (line   6)
* Definition of Info format:             Info Format Specification.
                                                              (line   6)
* Definition template:                   Def Cmd Template.    (line   6)
* Definitions grouped together:          @deffnx.             (line   6)
* DEF_TABLE:                             HTML Customization Variables.
                                                              (line  84)
* Degree symbol:                         @textdegree.         (line   6)
* Delimiter character, for verbatim:     @verb.               (line   6)
* Depth of text area:                    @pagesizes.          (line   6)
* Description for menu, start:           Inserting.           (line  94)
* Description of document:               @documentdescription.
                                                              (line   6)
* Detail menu:                           makeinfo Pointer Creation.
                                                              (line  31)
* Detailed menu:                         Master Menu Parts.   (line  19)
* Details of macro usage:                Macro Details.       (line   6)
* detexinfo:                             Customization Variables and Options.
                                                              (line  90)
* Dido^t points:                         Image Scaling.       (line  30)
* Different cross-reference commands:    Cross Reference Commands.
                                                              (line   6)
* Dimension formatting:                  @dmn.                (line   6)
* Dimensions and image sizes:            Image Scaling.       (line  14)
* Dir categories, choosing:              Installing Dir Entries.
                                                              (line  54)
* dir directory for Info installation:   Installing an Info File.
                                                              (line   6)
* dir file listing:                      New Info File.       (line   6)
* dir file, creating your own:           Other Info Directories.
                                                              (line  82)
* dir files and Info directories:        Other Info Directories.
                                                              (line   6)
* Dir files, compressed:                 Invoking install-info.
                                                              (line  23)
* dir, created by install-info:          Invoking install-info.
                                                              (line  20)
* Display formatting:                    @display.            (line   6)
* Displayed equation, in plain TeX:      Raw Formatter Commands.
                                                              (line  29)
* Displayed equations:                   Inserting Math.      (line  57)
* distinct, value for @kbdinputstyle:    @kbd.                (line  26)
* Distorting images:                     Image Scaling.       (line   6)
* Docbook and prefatory sections:        @unnumbered @appendix.
                                                              (line  21)
* Docbook output, overview:              Output Formats.      (line  70)
* Docbook, including raw:                Raw Formatter Commands.
                                                              (line  61)
* DOCTYPE:                               Other Customization Variables.
                                                              (line  22)
* Document description:                  @documentdescription.
                                                              (line   6)
* Document input encoding:               @documentencoding.   (line   6)
* Document language, declaring:          @documentlanguage.   (line   6)
* Document Permissions:                  Document Permissions.
                                                              (line   6)
* Document strings, internationalization of: Internationalization of Document Strings.
                                                              (line   6)
* Document strings, translation of:      @documentlanguage.   (line  22)
* Document structure, of Texinfo:        Texinfo Document Structure.
                                                              (line   6)
* Document title, specifying:            @settitle.           (line   6)
* Documentation identification:          GNU Sample Texts.    (line  22)
* documentlanguage:                      Customization Variables and Options.
                                                              (line  12)
* documentlanguage customization variable: Internationalization of Document Strings.
                                                              (line   6)
* Dot accent:                            Inserting Accents.   (line  28)
* Dotless i, j:                          Inserting Accents.   (line  50)
* Dots, inserting:                       @dots.               (line   6)
* Double angle quotation marks:          Inserting Quotation Marks.
                                                              (line  44)
* Double guillemets:                     Inserting Quotation Marks.
                                                              (line  44)
* Double left-pointing angle quotation mark: Inserting Quotation Marks.
                                                              (line  44)
* Double low-9 quotation mark:           Inserting Quotation Marks.
                                                              (line  44)
* Double quotation marks:                Inserting Quotation Marks.
                                                              (line  44)
* Double right-pointing angle quotation mark: Inserting Quotation Marks.
                                                              (line  44)
* Double structure, of Texinfo documents: Texinfo Document Structure.
                                                              (line   6)
* Double-colon menu entries:             Less Cluttered Menu Entry.
                                                              (line   6)
* DO_ABOUT:                              HTML Customization Variables.
                                                              (line  94)
* DTD, for Texinfo XML:                  Output Formats.      (line  77)
* Dumas, Patrice:                        History.             (line  54)
* Dumas, Patrice <1>:                    HTML Xref.           (line  21)
* DUMP_TEXI:                             Other Customization Variables.
                                                              (line  29)
* DUMP_TREE:                             Other Customization Variables.
                                                              (line  35)
* DVI file:                              Format with tex/texindex.
                                                              (line   6)
* DVI output, overview:                  Output Formats.      (line  37)
* DVI, output in:                        Format with texi2dvi.
                                                              (line   6)
* dvipdfmx:                              Format with texi2dvi.
                                                              (line  32)
* dvips:                                 Output Formats.      (line  37)
* dvips <1>:                             Format with texi2dvi.
                                                              (line  38)
* EC fonts:                              Inserting Quotation Marks.
                                                              (line  30)
* EC fonts, installing:                  Preparing for TeX.   (line  30)
* Ellipsis, inserting:                   @dots.               (line   6)
* Em dash, compared to minus sign:       @minus.              (line   6)
* Em dash, producing:                    Conventions.         (line  35)
* Emacs:                                 Texinfo Mode.        (line   6)
* Emacs shell, format, print from:       Within Emacs.        (line   6)
* Emacs-W3:                              Output Formats.      (line  23)
* Emphasizing text:                      Emphasis.            (line   6)
* Emphasizing text, font for:            @emph @strong.       (line   6)
* En dash, producing:                    Conventions.         (line  35)
* enable:                                Typed Variables.     (line  31)
* ENABLE_ENCODING:                       Customization Variables and Options.
                                                              (line  10)
* ENABLE_ENCODING_USE_ENTITY:            Other Customization Variables.
                                                              (line  39)
* Encoding, declaring:                   @documentencoding.   (line   6)
* End node footnote style:               Footnote Styles.     (line   9)
* End of header line:                    End of Header.       (line   6)
* End titlepage starts headings:         Heading Generation.  (line   6)
* Ending a Sentence:                     Ending a Sentence.   (line   6)
* Ending a Texinfo file:                 Ending a File.       (line   6)
* Entity reference in HTML et al.:       Inserting Unicode.   (line  28)
* Entries for an index:                  Indexing Commands.   (line   6)
* Entries, making index:                 Index Entries.       (line   6)
* Enumeration:                           @enumerate.          (line   6)
* Environment indentation:               @exampleindent.      (line   6)
* Environment variable INFOPATH:         Other Info Directories.
                                                              (line  35)
* Environment variable TEXINFO_OUTPUT_FORMAT: Invoking texi2any.
                                                              (line 392)
* Environment variable TEXINPUTS:        Preparing for TeX.   (line  49)
* eps image format:                      Image Syntax.        (line  13)
* epsf.tex:                              Image Scaling.       (line  41)
* epsf.tex, installing:                  Preparing for TeX.   (line  26)
* Equation, displayed, in plain TeX:     Raw Formatter Commands.
                                                              (line  29)
* Equations, displayed:                  Inserting Math.      (line  57)
* Equivalence, indicating:               @equiv.              (line   6)
* Error message, indicating:             @error.              (line   6)
* Error messages, line numbers in:       External Macro Processors.
                                                              (line  20)
* Errors, parsing:                       makeinfo in Emacs.   (line  26)
* ERROR_LIMIT:                           Customization Variables and Options.
                                                              (line  13)
* Es-zet:                                Inserting Accents.   (line  50)
* Escaping to HTML:                      HTML Translation.    (line  66)
* etex:                                  Format with texi2dvi.
                                                              (line  99)
* Eth:                                   Inserting Accents.   (line  50)
* Euro font:                             @euro.               (line  22)
* Euro font, installing:                 Preparing for TeX.   (line  34)
* Euro symbol, and encodings:            @documentencoding.   (line  24)
* Euro symbol, producing:                @euro.               (line   6)
* European A4 paper:                     A4 Paper.            (line   6)
* European Computer Modern fonts:        Inserting Quotation Marks.
                                                              (line  30)
* European Computer Modern fonts, installing: Preparing for TeX.
                                                              (line  30)
* Evaluation glyph:                      @result.             (line   6)
* Example beginning of Texinfo file:     Sample Beginning.    (line   6)
* Example indentation:                   @exampleindent.      (line   6)
* Example menu:                          Menu Example.        (line   6)
* example, value for @kbdinputstyle:     @kbd.                (line  26)
* Examples in smaller fonts:             @small....           (line   6)
* Examples of using texi2any:            Reference Implementation.
                                                              (line  31)
* Examples, formatting them:             @example.            (line   6)
* Examples, glyphs for:                  Glyphs for Programming.
                                                              (line   6)
* Expanding macros:                      Invoking Macros.     (line   6)
* Expansion of 8-bit characters in HTML cross-references: HTML Xref 8-bit Character Expansion.
                                                              (line   6)
* Expansion of macros, contexts for:     Macro Details.       (line   6)
* Expansion, indicating:                 @expansion.          (line   6)
* expansion, of node names in HTML cross-references: HTML Xref Node Name Expansion.
                                                              (line   6)
* Expressions in a program, indicating:  @code.               (line  10)
* EXTENSION:                             Other Customization Variables.
                                                              (line  50)
* External macro processors:             External Macro Processors.
                                                              (line   6)
* EXTERNAL_CROSSREF_SPLIT:               Other Customization Variables.
                                                              (line  44)
* EXTERNAL_DIR:                          HTML Customization Variables.
                                                              (line  98)
* EXTRA_HEAD:                            HTML Customization Variables.
                                                              (line 103)
* Family names, in all capitals:         @acronym.            (line  33)
* Features of Texinfo, adapting to:      Testing for Texinfo Commands.
                                                              (line   6)
* Feminine ordinal:                      Inserting Accents.   (line  50)
* feymr10:                               @euro.               (line  22)
* feymr10, installing:                   Preparing for TeX.   (line  34)
* File beginning:                        Beginning and Ending a File.
                                                              (line   6)
* File ending:                           Ending a File.       (line   6)
* File name collision:                   @setfilename.        (line  40)
* File sectioning structure, showing:    Showing the Structure.
                                                              (line   6)
* filename recorder for TeX:             Format with texi2dvi.
                                                              (line 106)
* FILLCOLUMN:                            Customization Variables and Options.
                                                              (line  14)
* filll TeX dimension:                   Copyright.           (line  12)
* Final output:                          Overfull hboxes.     (line   6)
* Finding badly referenced nodes:        Running Info-validate.
                                                              (line   6)
* Fine-tuning, and hyphenation:          @- @hyphenation.     (line   6)
* First line of a Texinfo file:          First Line.          (line   6)
* First node:                            First Node.          (line   6)
* First paragraph, suppressing indentation of: @firstparagraphindent.
                                                              (line   6)
* Fixed-width font:                      Fonts.               (line  45)
* FIX_TEXINFO:                           Other Customization Variables.
                                                              (line  54)
* Flag conditionals, brace-delimited:    @inlineifset @inlineifclear.
                                                              (line   6)
* Float environment:                     @float.              (line   6)
* Floating accents, inserting:           Inserting Accents.   (line   6)
* Floating, not yet implemented:         Floats.              (line  10)
* Floats, in general:                    Floats.              (line   6)
* Floats, list of:                       @listoffloats.       (line   6)
* Floats, making unnumbered:             @float.              (line  39)
* Floats, numbering of:                  @float.              (line  46)
* Flooding:                              @pxref.              (line  14)
* fn (function) index:                   Predefined Indices.  (line  12)
* Font for multitable heading rows:      Multitable Rows.     (line  17)
* Font size, reducing:                   Fonts.               (line   6)
* Fonts for indices:                     @syncodeindex.       (line  47)
* Fonts for printing:                    Fonts.               (line   6)
* Footings:                              Headings.            (line   6)
* Footnote styles, in HTML:              HTML Translation.    (line  61)
* Footnotes:                             Footnotes.           (line   6)
* footnotestyle:                         Customization Variables and Options.
                                                              (line  15)
* FOOTNOTE_END_HEADER_LEVEL:             HTML Customization Variables.
                                                              (line 107)
* FOOTNOTE_SEPARATE_HEADER_LEVEL:        HTML Customization Variables.
                                                              (line 112)
* FORCE:                                 Customization Variables and Options.
                                                              (line  16)
* Force line break:                      Line Breaks.         (line   6)
* Forcing indentation:                   @indent.             (line   6)
* Forcing line and page breaks:          Breaks.              (line   6)
* Form feed characters:                  Conventions.         (line  45)
* Format a dimension:                    @dmn.                (line   6)
* Format and print hardcopy:             Hardcopy.            (line   6)
* Format and print in Texinfo mode:      Texinfo Mode Printing.
                                                              (line   6)
* Format with the compile command:       Compile-Command.     (line   6)
* Format, print from Emacs shell:        Within Emacs.        (line   6)
* Formats for images:                    Image Syntax.        (line  10)
* Formatting a file for Info:            Creating an Info File.
                                                              (line   6)
* Formatting commands:                   Conventions.         (line  16)
* Formatting examples:                   @example.            (line   6)
* Formatting for Info:                   Info Formatting.     (line   6)
* Formatting for printing:               Printing.            (line   6)
* Formatting headings and footings:      Headings.            (line   6)
* Formatting partial documents:          Formatting Partial Documents.
                                                              (line   6)
* Formatting requirements:               Requirements Summary.
                                                              (line   6)
* Formatting with tex and texindex:      Format with tex/texindex.
                                                              (line   6)
* Formulas, mathematical:                Inserting Math.      (line   6)
* Four- and five argument forms of cross-references: Four and Five Arguments.
                                                              (line   6)
* Fox, Brian:                            History.             (line   6)
* FRAMES:                                HTML Customization Variables.
                                                              (line 117)
* FRAMESET_DOCTYPE:                      HTML Customization Variables.
                                                              (line 122)
* Free Documentation License, including entire: GNU Sample Texts.
                                                              (line  56)
* Free software:                         Copying Conditions.  (line   6)
* Free Software Directory:               Installing Dir Entries.
                                                              (line  54)
* French quotation marks:                Inserting Quotation Marks.
                                                              (line  44)
* French spacing:                        @frenchspacing.      (line   6)
* Frequently used commands, inserting:   Inserting.           (line   6)
* Frontmatter, text in:                  Beginning and Ending a File.
                                                              (line  13)
* Full texts, GNU:                       GNU Sample Texts.    (line   6)
* Function definitions:                  Sample Function Definition.
                                                              (line   6)
* Functions, in typed languages:         Typed Functions.     (line   6)
* Future of Texinfo implementations:     Reference Implementation.
                                                              (line  39)
* General syntactic conventions:         Conventions.         (line   6)
* Generating HTML:                       Generating HTML.     (line   6)
* Generating menus with indices:         Printing Indices & Menus.
                                                              (line   6)
* Generating page headings:              Heading Generation.  (line   6)
* Generating plain text files with --no-headers: Invoking texi2any.
                                                              (line 197)
* Generating plain text files with --plaintext: Invoking texi2any.
                                                              (line 315)
* German quotation marks:                Inserting Quotation Marks.
                                                              (line  44)
* German S:                              Inserting Accents.   (line  50)
* Global Document Commands:              Global Document Commands.
                                                              (line   6)
* Globbing:                              Format with tex/texindex.
                                                              (line  30)
* Glyphs for programming:                Glyphs for Programming.
                                                              (line   6)
* Glyphs for text:                       Glyphs for Text.     (line   6)
* GNU Emacs:                             Texinfo Mode.        (line   6)
* GNU Emacs shell, format, print from:   Within Emacs.        (line   6)
* GNU Free Documentation License, including entire: GNU Sample Texts.
                                                              (line  56)
* GNU sample texts:                      GNU Sample Texts.    (line   6)
* Going to other Info files' nodes:      Other Info Files.    (line   6)
* Grave accent:                          Inserting Accents.   (line  28)
* grave accent, standalone:              Inserting Quote Characters.
                                                              (line  26)
* Grave accent, vs. left quote:          Inserting Quotation Marks.
                                                              (line  16)
* Group (hold text together vertically): @group.              (line   6)
* Grouping two definitions together:     @deffnx.             (line   6)
* GUI click sequence:                    Click Sequences.     (line   6)
* Guillemets:                            Inserting Quotation Marks.
                                                              (line  44)
* Guillemots:                            Inserting Quotation Marks.
                                                              (line  44)
* Hacek accent:                          Inserting Accents.   (line  28)
* Hardcopy, printing it:                 Hardcopy.            (line   6)
* Hash sign, inserting:                  Inserting a Hashsign.
                                                              (line   6)
* hbox, overfull:                        Overfull hboxes.     (line   6)
* Header for Texinfo files:              Texinfo File Header. (line   6)
* Header of a Texinfo file:              First Line.          (line   6)
* HEADERS:                               Customization Variables and Options.
                                                              (line  19)
* HEADER_IN_TABLE:                       HTML Customization Variables.
                                                              (line 126)
* Heading row, in table:                 Multitable Rows.     (line  12)
* Headings:                              Headings.            (line   6)
* Headings, indentation after:           @firstparagraphindent.
                                                              (line   6)
* Headings, page, begin to appear:       Heading Generation.  (line   6)
* Height of images:                      Image Scaling.       (line   6)
* Height of text area:                   @pagesizes.          (line   6)
* help2man:                              Adding Output Formats.
                                                              (line  41)
* Hierarchical documents, and menus:     Writing a Menu.      (line  29)
* Highlighting text:                     Indicating.          (line   6)
* Highlighting, customized:              @definfoenclose.     (line   6)
* Hints:                                 Tips.                (line   8)
* History of Texinfo:                    History.             (line  25)
* Holder of copyright for FSF works:     @copying.            (line  51)
* Holding text together vertically:      @group.              (line   6)
* href, producing HTML:                  @url.                (line   6)
* HTML cross-reference 8-bit character expansion: HTML Xref 8-bit Character Expansion.
                                                              (line   6)
* HTML cross-reference command expansion: HTML Xref Command Expansion.
                                                              (line   6)
* HTML cross-reference configuration:    HTML Xref Configuration.
                                                              (line   6)
* HTML cross-reference link basics:      HTML Xref Link Basics.
                                                              (line   6)
* HTML cross-reference link preservation: HTML Xref Link Preservation.
                                                              (line   6)
* HTML cross-reference mismatch:         HTML Xref Mismatch.  (line   6)
* HTML cross-reference node name expansion: HTML Xref Node Name Expansion.
                                                              (line   6)
* HTML cross-references:                 HTML Xref.           (line   6)
* HTML output, and encodings:            @documentencoding.   (line  54)
* HTML output, browser compatibility of: HTML Translation.    (line   6)
* HTML output, overview:                 Output Formats.      (line  23)
* HTML output, split:                    HTML Splitting.      (line   6)
* HTML translation:                      HTML Translation.    (line   6)
* HTML, and CSS:                         HTML CSS.            (line   6)
* HTML, including raw:                   Raw Formatter Commands.
                                                              (line  41)
* html32.pm:                             HTML Translation.    (line  12)
* htmlxref.cnf:                          HTML Xref Configuration.
                                                              (line   6)
* http-equiv, and charset specification: @documentencoding.   (line  54)
* Hungarian umlaut accent:               Inserting Accents.   (line  28)
* Hurricanes:                            @ref.                (line  12)
* Hyphen, breakpoint within @code:       @allowcodebreaks.    (line   6)
* Hyphen, compared to minus:             @minus.              (line   6)
* Hyphenation patterns, language-dependent: @documentlanguage.
                                                              (line  41)
* Hyphenation, helping TeX do:           @- @hyphenation.     (line   6)
* Hyphenation, preventing:               @w.                  (line  23)
* Hyphens in source, two or three in a row: Conventions.      (line  35)
* i (dotless i):                         Inserting Accents.   (line  50)
* I18n, of document strings:             Internationalization of Document Strings.
                                                              (line   6)
* Icelandic:                             Inserting Accents.   (line  50)
* ICONS:                                 HTML Customization Variables.
                                                              (line 130)
* Identification of documentation:       GNU Sample Texts.    (line  22)
* If text conditionally visible:         Conditionals.        (line   6)
* Ignored before @setfilename:           @setfilename.        (line  19)
* Ignored text:                          Comments.            (line  27)
* IGNORE_BEFORE_SETFILENAME:             Other Customization Variables.
                                                              (line  61)
* IGNORE_SPACE_AFTER_BRACED_COMMAND_NAME: Other Customization Variables.
                                                              (line  65)
* Image formats:                         Image Syntax.        (line  10)
* Images, alternate text for:            Image Syntax.        (line  55)
* Images, in Info format:                Info Format Image.   (line   6)
* Images, inserting:                     Images.              (line   6)
* Images, scaling:                       Image Scaling.       (line   6)
* IMAGE_LINK_PREFIX:                     HTML Customization Variables.
                                                              (line 133)
* Implementation, texi2any as reference: Reference Implementation.
                                                              (line   6)
* Implicit pointer creation with makeinfo: makeinfo Pointer Creation.
                                                              (line   6)
* Inches:                                Image Scaling.       (line  24)
* Include file sample:                   Sample Include File. (line   6)
* Include files:                         Include Files.       (line   6)
* Include files requirements:            Include Files Requirements.
                                                              (line   6)
* Include files, and section levels:     Raise/lower sections.
                                                              (line  16)
* Including a file verbatim:             @verbatiminclude.    (line   6)
* Including permissions text:            @insertcopying.      (line   6)
* Indentation undoing:                   @exdent.             (line   6)
* Indentation, forcing:                  @indent.             (line   6)
* Indentation, omitting:                 @noindent.           (line   6)
* Indented text block:                   @indentedblock.      (line   6)
* Indenting environments:                @exampleindent.      (line   6)
* Indenting paragraphs, control of:      @paragraphindent.    (line   6)
* Indenting, suppressing of first paragraph: @firstparagraphindent.
                                                              (line   6)
* Index entries:                         Indexing Commands.   (line   6)
* Index entries, advice on writing:      Index Entries.       (line   6)
* Index entries, making:                 Index Entries.       (line   6)
* Index file names:                      Format with tex/texindex.
                                                              (line  23)
* Index font types:                      Indexing Commands.   (line  37)
* index sorting:                         Indexing Commands.   (line  43)
* Indexing table entries automatically:  @ftable @vtable.     (line   6)
* INDEX_ENTRY_COLON:                     Other Customization Variables.
                                                              (line  69)
* INDEX_SPECIAL_CHARS_WARNING:           Other Customization Variables.
                                                              (line  73)
* Indicating commands, definitions, etc.: Indicating.         (line   6)
* Indicating evaluation:                 @result.             (line   6)
* Indices:                               Indices.             (line   6)
* Indices, combining them:               Combining Indices.   (line   6)
* Indices, defining new:                 New Indices.         (line   6)
* Indices, in Info format:               Info Format Printindex.
                                                              (line   6)
* Indices, printing and menus:           Printing Indices & Menus.
                                                              (line   6)
* Indices, sorting:                      Hardcopy.            (line   6)
* Indices, two letter names:             @syncodeindex.       (line  17)
* Indirect subfiles:                     Tag and Split Files. (line  11)
* Indirect table, in Info format:        Info Format Indirect Table.
                                                              (line   6)
* Info batch formatting:                 Batch Formatting.    (line   6)
* Info file installation:                Installing an Info File.
                                                              (line   6)
* Info file name, choosing:              @setfilename.        (line  40)
* Info file, listing a new:              New Info File.       (line   6)
* Info file, splitting manually:         Splitting.           (line   6)
* Info files:                            Info Files.          (line   6)
* Info format specification:             Info Format Specification.
                                                              (line   6)
* Info format text constructs:           Info Format Text Constructs.
                                                              (line   6)
* Info format, and menus:                Menu Location.       (line  10)
* Info formatting:                       Info Formatting.     (line   6)
* Info installed in another directory:   Other Info Directories.
                                                              (line   6)
* Info nodes, in Info format:            Info Format Regular Nodes.
                                                              (line   6)
* Info output, and encoding:             @documentencoding.   (line  41)
* Info output, overview:                 Output Formats.      (line  10)
* Info validating a large file:          Using Info-validate. (line   6)
* Info, creating an online file:         Creating an Info File.
                                                              (line   6)
* Info; other files' nodes:              Other Info Files.    (line   6)
* INFOPATH:                              Other Info Directories.
                                                              (line  35)
* INFO_SPECIAL_CHARS_QUOTE:              Other Customization Variables.
                                                              (line  78)
* INFO_SPECIAL_CHARS_WARNING:            Other Customization Variables.
                                                              (line  85)
* Initialization file for TeX input:     Preparing for TeX.   (line   6)
* Inline conditionals:                   Inline Conditionals. (line   6)
* INLINE_CONTENTS:                       HTML Customization Variables.
                                                              (line 137)
* INLINE_CSS_STYLE:                      HTML Customization Variables.
                                                              (line 142)
* INLINE_INSERTCOPYING:                  Other Customization Variables.
                                                              (line  92)
* Input encoding, declaring:             @documentencoding.   (line   6)
* INPUT_ENCODING_NAME:                   Other Customization Variables.
                                                              (line  97)
* INPUT_PERL_ENCODING:                   Other Customization Variables.
                                                              (line 103)
* Insert nodes, menus automatically:     Updating Nodes and Menus.
                                                              (line   6)
* Inserting #:                           Inserting a Hashsign.
                                                              (line   6)
* Inserting @ (literal @):               Inserting an Atsign. (line   6)
* Inserting accents:                     Inserting Accents.   (line   6)
* Inserting dots:                        @dots.               (line   6)
* Inserting ellipsis:                    @dots.               (line   6)
* Inserting frequently used commands:    Inserting.           (line   6)
* Inserting indentation:                 @indent.             (line   6)
* Inserting quotation marks:             Inserting Quotation Marks.
                                                              (line   6)
* Inserting quote characters:            Inserting Quote Characters.
                                                              (line   6)
* Inserting space:                       Inserting Space.     (line   6)
* Inserting special characters and symbols: Insertions.       (line   6)
* INSTALL file, generating:              Invoking texi2any.   (line 315)
* install-info:                          Invoking install-info.
                                                              (line   6)
* Installing an Info file:               Installing an Info File.
                                                              (line   6)
* Installing Info in another directory:  Other Info Directories.
                                                              (line   6)
* Internal links, of HTML:               Invoking texi2any.   (line 183)
* INTERNAL_LINKS:                        Customization Variables and Options.
                                                              (line  17)
* Internationalization:                  Internationalization.
                                                              (line   6)
* Internationalization of document strings: Internationalization of Document Strings.
                                                              (line   6)
* Introduction to Texinfo:               Overview.            (line   6)
* Invalid characters in node names:      Node Line Requirements.
                                                              (line  43)
* Invoking macros:                       Invoking Macros.     (line   6)
* Invoking nodes, including in dir file: Installing Dir Entries.
                                                              (line  71)
* Invoking pod2texi:                     Invoking pod2texi.   (line   6)
* ISO 3166 country codes:                @documentlanguage.   (line  53)
* ISO 639-2 language codes:              @documentlanguage.   (line  53)
* ISO 8859-1:                            Inserting Quotation Marks.
                                                              (line  24)
* ISO 8859-15:                           Inserting Quotation Marks.
                                                              (line  24)
* ISO 8859-15, and Euro:                 @euro.               (line  14)
* Italic font:                           Fonts.               (line  32)
* Itemization:                           @itemize.            (line   6)
* j (dotless j):                         Inserting Accents.   (line  50)
* jpeg image format:                     Image Syntax.        (line  16)
* KEEP_TOP_EXTERNAL_REF:                 HTML Customization Variables.
                                                              (line 146)
* Keyboard input:                        @kbd.                (line   6)
* Keys, recommended names:               @key.                (line  20)
* Keyword expansion, preventing:         @w.                  (line  27)
* Keywords, indicating:                  @code.               (line  10)
* Knuth, Donald:                         Printed Books.       (line   6)
* ky (keystroke) index:                  Predefined Indices.  (line  15)
* /l:                                    Inserting Accents.   (line  50)
* /L:                                    Inserting Accents.   (line  50)
* L2H:                                   HTML Customization Variables.
                                                              (line 151)
* L2H_CLEAN:                             HTML Customization Variables.
                                                              (line 155)
* L2H_FILE:                              HTML Customization Variables.
                                                              (line 159)
* L2H_HTML_VERSION:                      HTML Customization Variables.
                                                              (line 163)
* L2H_L2H:                               HTML Customization Variables.
                                                              (line 167)
* L2H_SKIP:                              HTML Customization Variables.
                                                              (line 171)
* L2H_TMP:                               HTML Customization Variables.
                                                              (line 179)
* lang, HTML attribute:                  HTML Customization Variables.
                                                              (line  55)
* Language codes:                        @documentlanguage.   (line  53)
* Language, declaring:                   @documentlanguage.   (line   6)
* Larger or smaller pages:               Cropmarks and Magnification.
                                                              (line  24)
* LaTeX logo:                            @TeX @LaTeX.         (line   6)
* LaTeX, processing with texi2dvi:       Format with texi2dvi.
                                                              (line  42)
* Latin 1:                               Inserting Quotation Marks.
                                                              (line  24)
* Latin 9:                               Inserting Quotation Marks.
                                                              (line  24)
* Latin 9, and Euro:                     @euro.               (line  14)
* Left quotation marks:                  Inserting Quotation Marks.
                                                              (line  44)
* Left-pointing angle quotation marks:   Inserting Quotation Marks.
                                                              (line  44)
* Legal paper, printing on:              @pagesizes.          (line  16)
* Length of file names:                  @setfilename.        (line  40)
* Less cluttered menu entry:             Less Cluttered Menu Entry.
                                                              (line   6)
* libintl-perl Gettext implementation:   Internationalization of Document Strings.
                                                              (line  12)
* Libre software:                        Copying Conditions.  (line   6)
* License for all-permissive copying:    All-permissive Copying License.
                                                              (line   6)
* License for verbatim copying:          Verbatim Copying License.
                                                              (line   6)
* Limited scope of Texinfo:              Overview.            (line  29)
* Line breaking, and urls:               URL Line Breaking.   (line   6)
* Line breaks, awkward:                  Breaks.              (line   6)
* Line breaks, controlling:              Line Breaks.         (line   6)
* Line breaks, preventing:               @w.                  (line   6)
* Line length, column widths as fraction of: Multitable Column Widths.
                                                              (line  11)
* Line numbers, in error messages:       External Macro Processors.
                                                              (line  20)
* Line spacing:                          @sp.                 (line   6)
* Links, coloring in PDF output:         PDF Colors.          (line   6)
* Links, preserving to renamed nodes:    HTML Xref Link Preservation.
                                                              (line   6)
* Lisp example:                          @lisp.               (line   6)
* Lisp examples in smaller fonts:        @small....           (line   6)
* List of @-commands:                    Command List.        (line   6)
* List of floats:                        @listoffloats.       (line   6)
* Listing a new Info file:               New Info File.       (line   6)
* Lists and tables, making:              Lists and Tables.    (line   6)
* Literate programming:                  Printed Books.       (line  30)
* Literate programming, with Texinfo and awk: Details of texindex.
                                                              (line  37)
* Local variable section, in Info format: Info Format Local Variables.
                                                              (line   6)
* Local variables:                       Compile-Command.     (line   6)
* Local Variables section, for encoding: @documentencoding.   (line  41)
* Locale, declaring:                     @documentlanguage.   (line   6)
* Location of menus:                     Menu Location.       (line   6)
* Logos, TeX:                            @TeX @LaTeX.         (line   6)
* Longest nodes, finding:                Other Customization Variables.
                                                              (line 201)
* Looking for badly referenced nodes:    Running Info-validate.
                                                              (line   6)
* Lowering and raising sections:         Raise/lower sections.
                                                              (line   6)
* lpr (DVI print command):               Print with lpr.      (line   6)
* lpr-d, replacements on MS-DOS/MS-Windows: Print with lpr.   (line  26)
* Lynx:                                  Output Formats.      (line  23)
* Lzip-compressed dir files, reading:    Invoking install-info.
                                                              (line  23)
* LZMA-compressed dir files, reading:    Invoking install-info.
                                                              (line  23)
* Macro definitions, programming-language: Sample Function Definition.
                                                              (line   6)
* Macro definitions, Texinfo:            Defining Macros.     (line   6)
* Macro details:                         Macro Details.       (line   6)
* Macro expansion, contexts for:         Macro Details.       (line   6)
* Macro expansion, indicating:           @expansion.          (line   6)
* Macro invocation:                      Invoking Macros.     (line   6)
* Macro names, valid characters in:      Defining Macros.     (line  16)
* Macro processors, external:            External Macro Processors.
                                                              (line   6)
* Macron accent:                         Inserting Accents.   (line  28)
* Macros:                                Defining New Texinfo Commands.
                                                              (line   6)
* Macros, undefining:                    Defining Macros.     (line  56)
* MACRO_BODY_IGNORES_LEADING_SPACE:      Other Customization Variables.
                                                              (line 108)
* MACRO_EXPAND:                          Customization Variables and Options.
                                                              (line  18)
* Magnified printing:                    Cropmarks and Magnification.
                                                              (line  24)
* Mailto link:                           @email.              (line  10)
* makeinfo:                              Invoking texi2any.   (line   6)
* makeinfo inside Emacs:                 makeinfo in Emacs.   (line   6)
* makeinfo options:                      Invoking texi2any.   (line  18)
* Making a printed manual:               Hardcopy.            (line   6)
* Making a tag table automatically:      Tag and Split Files. (line   6)
* Making a tag table manually:           Unsplit.             (line  26)
* Making cross-references:               Cross References.    (line   6)
* Making line and page breaks:           Breaks.              (line   6)
* Making lists and tables:               Lists and Tables.    (line   6)
* Man page output, not supported:        Adding Output Formats.
                                                              (line  31)
* Man page, reference to:                @url.                (line  21)
* Manual characteristics, printed:       Printed Books.       (line   6)
* Manual, referring to as a whole:       Referring to a Manual as a Whole.
                                                              (line   6)
* MANUAL-noderename.cnf:                 HTML Xref Link Preservation.
                                                              (line   6)
* Margins on page, not controllable:     @pagesizes.          (line  21)
* Marking text within a paragraph:       Marking Text.        (line   6)
* Marking words and phrases:             Marking Text.        (line   6)
* Masculine ordinal:                     Inserting Accents.   (line  50)
* Master menu:                           Master Menu Parts.   (line   6)
* Math italic font:                      Inserting Subscripts and Superscripts.
                                                              (line  17)
* Mathematical expressions, inserting:   Inserting Math.      (line   6)
* MathML, not used:                      Inserting Math.      (line  15)
* MAX_HEADER_LEVEL:                      HTML Customization Variables.
                                                              (line 186)
* MAX_MACRO_CALL_NESTING:                Other Customization Variables.
                                                              (line 113)
* Menu description, start:               Inserting.           (line  94)
* Menu entries with two colons:          Less Cluttered Menu Entry.
                                                              (line   6)
* Menu example:                          Menu Example.        (line   6)
* Menu location:                         Menu Location.       (line   6)
* Menu parts:                            Menu Parts.          (line   6)
* Menu writing:                          Writing a Menu.      (line   6)
* Menu, master:                          Master Menu Parts.   (line   6)
* Menus:                                 Menus.               (line   6)
* Menus generated with indices:          Printing Indices & Menus.
                                                              (line   6)
* Menus, automatically generating:       Writing a Menu.      (line  38)
* Menus, in Info format:                 Info Format Menu.    (line   6)
* Menus, omitting with --no-headers:     Invoking texi2any.   (line 197)
* Menus, omitting with --plaintext:      Invoking texi2any.   (line 315)
* MENU_ENTRY_COLON:                      Other Customization Variables.
                                                              (line 118)
* MENU_SYMBOL:                           HTML Customization Variables.
                                                              (line 191)
* META key:                              @key.                (line  44)
* Meta keys, specifying:                 @key.                (line  20)
* Meta-syntactic chars for arguments:    Optional Arguments.  (line   6)
* Methods, object-oriented:              Object-Oriented Methods.
                                                              (line   6)
* Millimeters:                           Image Scaling.       (line  28)
* Mils, argument to @need:               @need.               (line   6)
* Minimal requirements for formatting:   Requirements Summary.
                                                              (line   6)
* Minimal Texinfo file (requirements):   Minimum.             (line   6)
* Minus sign:                            @minus.              (line   6)
* Mismatched HTML cross-reference source and target: HTML Xref Mismatch.
                                                              (line   6)
* Mistakes, catching:                    Catching Mistakes.   (line   6)
* Mode, using Texinfo:                   Texinfo Mode.        (line   6)
* MONOLITHIC:                            HTML Customization Variables.
                                                              (line 195)
* monolithic manuals, for HTML cross-references: HTML Xref Configuration.
                                                              (line  65)
* Monospace font:                        Fonts.               (line  45)
* Mozilla:                               Output Formats.      (line  23)
* Multiple dashes in source:             Conventions.         (line  35)
* Multiple spaces:                       Multiple Spaces.     (line   6)
* Multitable column widths:              Multitable Column Widths.
                                                              (line   6)
* Multitable rows:                       Multitable Rows.     (line   6)
* Must have in Texinfo file:             Minimum.             (line   6)
* Names for indices:                     @syncodeindex.       (line  17)
* Names of index files:                  Format with tex/texindex.
                                                              (line  23)
* Names of macros, valid characters of:  Defining Macros.     (line  16)
* Names recommended for keys:            @key.                (line  20)
* NASA, as acronym:                      @acronym.            (line   6)
* Navigation bar, in HTML output:        HTML Translation.    (line  53)
* Navigation links, omitting:            Invoking texi2any.   (line 204)
* Navigation panel, bottom of page:      HTML Customization Variables.
                                                              (line 280)
* Need space at page bottom:             @need.               (line   6)
* Nested footnotes:                      Footnote Commands.   (line  44)
* Nesting conditionals:                  Conditional Nesting. (line   6)
* New index defining:                    New Indices.         (line   6)
* New Info file, listing it in dir file: New Info File.       (line   6)
* New Texinfo commands, defining:        Defining New Texinfo Commands.
                                                              (line   6)
* Newlines, avoiding in conditionals:    Inline Conditionals. (line   6)
* NEWS file for Texinfo:                 Testing for Texinfo Commands.
                                                              (line  24)
* Next node of Top node:                 First Node.          (line  42)
* Node line requirements:                Node Line Requirements.
                                                              (line   6)
* Node line writing:                     Writing a Node.      (line   6)
* node name expansion, in HTML cross-references: HTML Xref Node Name Expansion.
                                                              (line   6)
* Node names must be unique:             Node Line Requirements.
                                                              (line   8)
* Node names, choosing:                  Node Names.          (line   6)
* Node names, invalid characters in:     Node Line Requirements.
                                                              (line  43)
* Node renaming, and preserving links:   HTML Xref Link Preservation.
                                                              (line   6)
* Node separators, omitting with --no-headers: Invoking texi2any.
                                                              (line 197)
* Node separators, omitting with --plaintext: Invoking texi2any.
                                                              (line 315)
* Node, defined:                         Nodes.               (line   6)
* Node, 'Top':                           The Top Node.        (line   6)
* noderename.cnf:                        HTML Xref Link Preservation.
                                                              (line   6)
* Nodes in other Info files:             Other Info Files.    (line   6)
* Nodes, catching mistakes:              Catching Mistakes.   (line   6)
* Nodes, checking for badly referenced:  Running Info-validate.
                                                              (line   6)
* Nodes, deleting or renaming:           @anchor.             (line  40)
* NODE_FILENAMES:                        Other Customization Variables.
                                                              (line 127)
* NODE_FILES:                            Customization Variables and Options.
                                                              (line  24)
* NODE_FILE_EXTENSION:                   HTML Customization Variables.
                                                              (line 202)
* NODE_NAME_IN_INDEX:                    Other Customization Variables.
                                                              (line 132)
* NODE_NAME_IN_MENU:                     Other Customization Variables.
                                                              (line 136)
* Non-breakable space, fixed:            @w.                  (line   8)
* Non-breakable space, variable:         @tie.                (line   6)
* none, value for @urefbreakstyle:       URL Line Breaking.   (line  24)
* Nonsplit manuals, Info format of:      Info Format Whole Manual.
                                                              (line   6)
* Normalization Form C, Unicode:         HTML Xref 8-bit Character Expansion.
                                                              (line  45)
* Not ending a sentence:                 Not Ending a Sentence.
                                                              (line   6)
* novalidate:                            Customization Variables and Options.
                                                              (line  21)
* NO_CSS:                                HTML Customization Variables.
                                                              (line 199)
* NO_USE_SETFILENAME:                    Other Customization Variables.
                                                              (line 122)
* NO_WARN:                               Customization Variables and Options.
                                                              (line  20)
* Number sign, inserting:                Inserting a Hashsign.
                                                              (line  10)
* Numbering of floats:                   @float.              (line  46)
* NUMBER_FOOTNOTES:                      Customization Variables and Options.
                                                              (line  22)
* NUMBER_SECTIONS:                       Customization Variables and Options.
                                                              (line  23)
* /o:                                    Inserting Accents.   (line  50)
* /O:                                    Inserting Accents.   (line  50)
* o:                                     Inserting Accents.   (line  50)
* O'Dea, Brendan:                        Adding Output Formats.
                                                              (line  41)
* Object-oriented programming:           Abstract Objects.    (line   6)
* Oblique font:                          Fonts.               (line  42)
* Obtaining TeX:                         Obtaining TeX.       (line   6)
* Occurrences, listing with @occur:      Using occur.         (line   6)
* Octotherp, inserting:                  Inserting a Hashsign.
                                                              (line  10)
* oe:                                    Inserting Accents.   (line  50)
* OE:                                    Inserting Accents.   (line  50)
* Ogonek diacritic:                      Inserting Accents.   (line  28)
* Old nodes, preserving links to:        HTML Xref Link Preservation.
                                                              (line   6)
* Omitting indentation:                  @noindent.           (line   6)
* One-argument form of cross-references: One Argument.        (line   6)
* OPEN_QUOTE_SYMBOL:                     Other Customization Variables.
                                                              (line 140)
* Optional and repeated arguments:       Optional Arguments.  (line   6)
* Options for makeinfo:                  Invoking texi2any.   (line  18)
* Options for texi2any:                  Invoking texi2any.   (line  18)
* Options of texi2html:                  texi2html.           (line  45)
* Options, customization variables for:  Customization Variables and Options.
                                                              (line   6)
* Ordinals, Romance:                     Inserting Accents.   (line  50)
* Ordinary TeX commands, using:          Raw Formatter Commands.
                                                              (line   6)
* Orphans, preventing:                   @need.               (line  18)
* Other Info files' nodes:               Other Info Files.    (line   6)
* OUT:                                   Customization Variables and Options.
                                                              (line  25)
* OUTFILE:                               Customization Variables and Options.
                                                              (line  25)
* Outline of file structure, showing:    Showing the Structure.
                                                              (line   6)
* Output document strings, internationalization of: Internationalization of Document Strings.
                                                              (line   6)
* Output file name, required:            @setfilename.        (line   6)
* Output file splitting:                 Invoking texi2any.   (line 339)
* Output formats:                        Output Formats.      (line   6)
* Output formats, supporting more:       Adding Output Formats.
                                                              (line   9)
* Output, in PDF:                        PDF Output.          (line   6)
* Output, printed through texi2any:      texi2any Printed Output.
                                                              (line   6)
* Outputting HTML:                       Generating HTML.     (line   6)
* OUTPUT_ENCODING_NAME:                  Other Customization Variables.
                                                              (line 150)
* Overfull hboxes:                       Overfull hboxes.     (line   6)
* Overview of Texinfo:                   Overview.            (line   6)
* OVERVIEW_LINK_TO_TOC:                  Other Customization Variables.
                                                              (line 161)
* Owner of copyright for FSF works:      @copying.            (line  51)
* PACKAGE:                               Other Customization Variables.
                                                              (line 165)
* PACKAGE_AND_VERSION:                   Other Customization Variables.
                                                              (line 167)
* PACKAGE_NAME:                          Other Customization Variables.
                                                              (line 169)
* PACKAGE_URL:                           Other Customization Variables.
                                                              (line 168)
* PACKAGE_VERSION:                       Other Customization Variables.
                                                              (line 166)
* Page breaks, awkward:                  Breaks.              (line   6)
* Page breaks, forcing:                  @page.               (line   6)
* Page delimiter in Texinfo mode:        Showing the Structure.
                                                              (line  40)
* Page headings:                         Headings.            (line   6)
* Page numbering:                        Headings.            (line   6)
* Page sizes for books:                  @smallbook.          (line   6)
* Page sizes, customized:                @pagesizes.          (line   6)
* page-delimiter:                        Showing the Structure.
                                                              (line  40)
* Pages, starting odd:                   @setchapternewpage.  (line   6)
* Paper size, A4:                        A4 Paper.            (line   6)
* Paragraph indentation control:         @paragraphindent.    (line   6)
* Paragraph, marking text within:        Marking Text.        (line   6)
* paragraphindent:                       Customization Variables and Options.
                                                              (line  26)
* Parameters to macros:                  Defining Macros.     (line  32)
* Parentheses in node name:              Node Line Requirements.
                                                              (line  43)
* Parsing errors:                        makeinfo in Emacs.   (line  26)
* Part of file formatting and printing:  Printing.            (line   6)
* Part pages:                            @part.               (line   6)
* Partial documents, formatting:         Formatting Partial Documents.
                                                              (line   6)
* Parts of a cross-reference:            Cross Reference Parts.
                                                              (line   6)
* Parts of a master menu:                Master Menu Parts.   (line   6)
* Parts of a menu:                       Menu Parts.          (line   6)
* Patches, contributing:                 Reporting Bugs.      (line  31)
* PCL file, for printing:                Print with lpr.      (line  21)
* pdf image inclusions:                  Image Syntax.        (line  16)
* PDF output:                            PDF Output.          (line   6)
* PDF output of urls:                    @url PDF Output Format.
                                                              (line   6)
* PDF output, overview:                  Output Formats.      (line  57)
* pdfetex:                               Format with texi2dvi.
                                                              (line  99)
* pdftex:                                PDF Output.          (line   6)
* pdftex, and images:                    Image Syntax.        (line  16)
* pdftexi2dvi:                           Format with texi2dvi.
                                                              (line  25)
* Period in node name:                   Node Line Requirements.
                                                              (line  43)
* Periods, inserting:                    Not Ending a Sentence.
                                                              (line   6)
* Perl format strings for translation:   Internationalization of Document Strings.
                                                              (line  21)
* Perl POD, converting to Texinfo:       Invoking pod2texi.   (line   6)
* Permissions text, including:           @insertcopying.      (line   6)
* Permissions, printed:                  Copyright.           (line   6)
* pg (program) index:                    Predefined Indices.  (line  17)
* Picas:                                 Image Scaling.       (line  20)
* Pictures, inserting:                   Images.              (line   6)
* Pinard, Franc,ois:                     History.             (line  15)
* Plain TeX:                             Raw Formatter Commands.
                                                              (line   6)
* Plain text output with --plaintext:    Invoking texi2any.   (line 315)
* Plain text output, overview:           Output Formats.      (line  19)
* png image format:                      Image Syntax.        (line  16)
* POD, converting to Texinfo:            Invoking pod2texi.   (line   6)
* pod2texi:                              Invoking pod2texi.   (line   6)
* Point, indicating in a buffer:         @point.              (line   6)
* Pointer creation with makeinfo:        makeinfo Pointer Creation.
                                                              (line   6)
* Pointer validation with makeinfo:      Pointer Validation.  (line   6)
* Pointer validation, suppressing:       Formatting Partial Documents.
                                                              (line   6)
* Pointer validation, suppressing from command line: Invoking texi2any.
                                                              (line 250)
* Points (dimension):                    Image Scaling.       (line  18)
* PostScript output, overview:           Output Formats.      (line  49)
* Pounds symbol:                         @pounds.             (line   6)
* Preamble, in Info format:              Info Format Preamble.
                                                              (line   6)
* Predefined names for indices:          @syncodeindex.       (line  17)
* Preface, etc., and Docbook:            @unnumbered @appendix.
                                                              (line  21)
* PREFIX:                                Other Customization Variables.
                                                              (line 175)
* Preparing for TeX:                     Preparing for TeX.   (line   6)
* Preserving HTML links to old nodes:    HTML Xref Link Preservation.
                                                              (line   6)
* Prev node of Top node:                 First Node.          (line  39)
* Preventing first paragraph indentation: @firstparagraphindent.
                                                              (line   6)
* Preventing line and page breaks:       Breaks.              (line   6)
* PRE_ABOUT:                             HTML Customization Variables.
                                                              (line 206)
* PRE_BODY_CLOSE:                        HTML Customization Variables.
                                                              (line 213)
* Print and format in Texinfo mode:      Texinfo Mode Printing.
                                                              (line   6)
* Print, format from Emacs shell:        Within Emacs.        (line   6)
* Printed book and manual characteristics: Printed Books.     (line   6)
* Printed output, indicating:            @print.              (line   6)
* Printed output, through texi2any:      texi2any Printed Output.
                                                              (line   6)
* Printed permissions:                   Copyright.           (line   6)
* Printing a region or buffer:           Printing.            (line   6)
* Printing an index:                     Printing Indices & Menus.
                                                              (line   6)
* Printing cost, reducing:               Fonts.               (line  13)
* Printing cropmarks:                    Cropmarks and Magnification.
                                                              (line   6)
* Printing DVI files, on MS-DOS/MS-Windows: Print with lpr.   (line  26)
* Printing hardcopy:                     Hardcopy.            (line   6)
* Problems, catching:                    Catching Mistakes.   (line   6)
* .profile initialization file:          Preparing for TeX.   (line   6)
* PROGRAM:                               Other Customization Variables.
                                                              (line 183)
* Program names, indicating:             @command.            (line   6)
* Programming, glyphs for:               Glyphs for Programming.
                                                              (line   6)
* PROGRAM_NAME_IN_FOOTER:                HTML Customization Variables.
                                                              (line 217)
* Pronunciation of Texinfo:              Overview.            (line  38)
* Prototype row, column widths defined by: Multitable Column Widths.
                                                              (line  22)
* Quotation characters (''), in source:  Inserting Quotation Marks.
                                                              (line   6)
* Quotation marks, French:               Inserting Quotation Marks.
                                                              (line  44)
* Quotation marks, German:               Inserting Quotation Marks.
                                                              (line  44)
* Quotation marks, inserting:            Inserting Quotation Marks.
                                                              (line   6)
* Quotations:                            @quotation.          (line   6)
* Quotations in smaller fonts:           @small....           (line   6)
* Quote characters, inserting:           Inserting Quote Characters.
                                                              (line   6)
* Quoting, automatic for some macros:    Invoking Macros.     (line  44)
* Ragged left, without filling:          @flushleft @flushright.
                                                              (line   6)
* Ragged right, with filling:            @raggedright.        (line   6)
* Ragged right, without filling:         @flushleft @flushright.
                                                              (line   6)
* Raising and lowering sections:         Raise/lower sections.
                                                              (line   6)
* Raw formatter commands:                Raw Formatter Commands.
                                                              (line   6)
* Raw HTML:                              HTML Translation.    (line  66)
* raw text output:                       Customization Variables and Options.
                                                              (line  76)
* RCS $Id:                               GNU Sample Texts.    (line  22)
* Recommended names for keys:            @key.                (line  20)
* Rectangle, black in hardcopy:          Overfull hboxes.     (line  41)
* Recursive macro invocations:           Defining Macros.     (line  44)
* Reducing font size:                    Fonts.               (line   6)
* Reference implementation:              Reference Implementation.
                                                              (line   6)
* Reference to @-commands:               Command List.        (line   6)
* References:                            Cross References.    (line   6)
* References using @inforef:             @inforef.            (line   6)
* References using @pxref:               @pxref.              (line   6)
* References using @ref:                 @ref.                (line   6)
* References using @xref:                @xref.               (line   6)
* Referring to an entire manual:         Referring to a Manual as a Whole.
                                                              (line   6)
* Referring to other Info files:         Other Info Files.    (line   6)
* Region formatting and printing:        Printing.            (line   6)
* Region printing in Texinfo mode:       Texinfo Mode Printing.
                                                              (line   6)
* Registered symbol:                     @registeredsymbol.   (line   6)
* Regular expression, for #line:         #line Syntax Details.
                                                              (line   6)
* Reid, Brian:                           History.             (line  28)
* RENAMED_NODES_FILE:                    Other Customization Variables.
                                                              (line 187)
* RENAMED_NODES_FILE <1>:                HTML Xref Link Preservation.
                                                              (line  12)
* RENAMED_NODES_REDIRECTIONS:            Other Customization Variables.
                                                              (line 192)
* Renaming nodes, and preserving links:  HTML Xref Link Preservation.
                                                              (line   6)
* Repeated and optional arguments:       Optional Arguments.  (line   6)
* Reporting bugs:                        Reporting Bugs.      (line   6)
* Required in Texinfo file:              Minimum.             (line   6)
* Requirements for formatting:           Requirements Summary.
                                                              (line   6)
* Requirements for include files:        Include Files Requirements.
                                                              (line   6)
* Requirements for updating commands:    Updating Requirements.
                                                              (line   6)
* Reserved words, indicating:            @code.               (line  10)
* Restrictions on node names:            Node Line Requirements.
                                                              (line   6)
* Result of an expression:               @result.             (line   6)
* Return type, own line for:             Typed Functions.     (line  84)
* RGB color specification.:              PDF Colors.          (line  21)
* ridt.eps:                              Image Scaling.       (line  36)
* Right quotation marks:                 Inserting Quotation Marks.
                                                              (line  44)
* Right-pointing angle quotation marks:  Inserting Quotation Marks.
                                                              (line  44)
* Ring accent:                           Inserting Accents.   (line  28)
* Robbins, Arnold:                       Details of texindex. (line  37)
* Roman font:                            Fonts.               (line  35)
* Romance ordinals:                      Inserting Accents.   (line  50)
* Rounded rectangles, around text:       @cartouche.          (line   6)
* Rows, of a multitable:                 Multitable Rows.     (line   6)
* Running an Info formatter:             Info Formatting.     (line   6)
* Running macros:                        Invoking Macros.     (line   6)
* Running makeinfo in Emacs:             makeinfo in Emacs.   (line   6)
* S-expressions, output format:          Customization Variables and Options.
                                                              (line  86)
* Sample @include file:                  Sample Include File. (line   6)
* Sample function definition:            Sample Function Definition.
                                                              (line   6)
* Sample Texinfo file, no comments:      Short Sample Texinfo File.
                                                              (line   6)
* Sample Texinfo file, with comments:    Short Sample.        (line   6)
* Sample Texinfo files:                  Sample Texinfo Files.
                                                              (line   6)
* Sample texts, GNU:                     GNU Sample Texts.    (line   6)
* Sans serif font:                       Fonts.               (line  39)
* Scaled points:                         Image Scaling.       (line  34)
* Scaling images:                        Image Scaling.       (line   6)
* Schwab, Andreas:                       History.             (line  15)
* Scribe:                                History.             (line  28)
* Sea surges:                            @ref.                (line  28)
* Sectioning:                            Chapter Structuring. (line   6)
* Sectioning structure of a file, showing: Showing the Structure.
                                                              (line   6)
* Sections, raising and lowering:        Raise/lower sections.
                                                              (line   6)
* Semantic markup:                       Overview.            (line  19)
* Sentence ending punctuation:           Ending a Sentence.   (line   6)
* Sentence non-ending punctuation:       Not Ending a Sentence.
                                                              (line   6)
* Sentences, spacing after:              @frenchspacing.      (line   6)
* Separate footnote style:               Footnote Styles.     (line  21)
* Sequence of clicks:                    Click Sequences.     (line   6)
* SGML-tools output format:              Adding Output Formats.
                                                              (line   9)
* Sharp S:                               Inserting Accents.   (line  50)
* Sharp sign (not), inserting:           Inserting a Hashsign.
                                                              (line  10)
* Shell formatting with tex and texindex: Format with tex/texindex.
                                                              (line   6)
* Shell printing, on MS-DOS/MS-Windows:  Print with lpr.      (line  26)
* Shell, format, print from:             Within Emacs.        (line   6)
* Shell, running makeinfo in:            makeinfo in Emacs.   (line   6)
* Short captions, for lists of floats:   @caption @shortcaption.
                                                              (line   6)
* Short table of contents:               Contents.            (line   6)
* SHORTEXTN:                             HTML Customization Variables.
                                                              (line 221)
* Showing the sectioning structure of a file: Showing the Structure.
                                                              (line   6)
* Showing the structure of a file:       Using texinfo-show-structure.
                                                              (line   6)
* SHOW_MENU:                             Customization Variables and Options.
                                                              (line  19)
* SHOW_MENU <1>:                         Other Customization Variables.
                                                              (line 196)
* SHOW_TITLE:                            HTML Customization Variables.
                                                              (line 224)
* Shrubbery:                             @ifset @ifclear.     (line  21)
* SILENT:                                Customization Variables and Options.
                                                              (line  27)
* SIMPLE_MENU:                           HTML Customization Variables.
                                                              (line 228)
* Single angle quotation marks:          Inserting Quotation Marks.
                                                              (line  44)
* Single guillemets:                     Inserting Quotation Marks.
                                                              (line  44)
* Single left-pointing angle quotation mark: Inserting Quotation Marks.
                                                              (line  44)
* Single low-9 quotation mark:           Inserting Quotation Marks.
                                                              (line  44)
* Single quotation marks:                Inserting Quotation Marks.
                                                              (line  44)
* Single right-pointing angle quotation mark: Inserting Quotation Marks.
                                                              (line  44)
* Site-wide Texinfo configuration file:  Preparing for TeX.   (line  40)
* Size of printed book:                  @smallbook.          (line   6)
* Slanted font:                          Fonts.               (line  42)
* Slanted typewriter font, for @kbd:     @kbd.                (line  15)
* Small book size:                       @smallbook.          (line   6)
* Small caps font:                       Smallcaps.           (line   6)
* Small examples:                        @small....           (line   6)
* Small verbatim:                        @verbatim.           (line  45)
* Smaller fonts:                         Fonts.               (line   6)
* sort keys for index entries:           Indexing Commands.   (line  43)
* Sort string, incorrect |:              Details of texindex. (line  24)
* Sorting indices:                       Hardcopy.            (line   6)
* Sorting nodes by size:                 Other Customization Variables.
                                                              (line 201)
* SORT_ELEMENT_COUNT:                    Other Customization Variables.
                                                              (line 200)
* SORT_ELEMENT_COUNT_WORDS:              Other Customization Variables.
                                                              (line 208)
* Source file format:                    Overview.            (line  19)
* Source files, characters used:         Conventions.         (line   9)
* Space, after sentences:                @frenchspacing.      (line   6)
* Space, inserting horizontal:           Multiple Spaces.     (line   6)
* Space, inserting vertical:             @sp.                 (line   6)
* Spaces in macros:                      Defining Macros.     (line  40)
* Spaces in node name:                   Node Line Requirements.
                                                              (line  75)
* Spaces, in menus:                      Writing a Menu.      (line  20)
* Spacing, at ends of sentences:         Ending a Sentence.   (line   6)
* Spacing, in the middle of sentences:   Not Ending a Sentence.
                                                              (line   6)
* Spacing, inserting:                    Inserting Space.     (line   6)
* Special characters, inserting:         Special Characters.  (line   6)
* Special displays:                      Special Displays.    (line   6)
* Special insertions:                    Insertions.          (line   6)
* Specification of Info format:          Info Format Specification.
                                                              (line   6)
* Specifying index entries:              Indexing Commands.   (line   6)
* spell checking:                        Customization Variables and Options.
                                                              (line  90)
* Spelling of Texinfo:                   Overview.            (line  38)
* SPLIT:                                 Customization Variables and Options.
                                                              (line  28)
* Split HTML output:                     HTML Splitting.      (line   6)
* split manuals, for HTML cross-references: HTML Xref Configuration.
                                                              (line  68)
* Split manuals, Info format of:         Info Format Whole Manual.
                                                              (line   6)
* Splitting an Info file manually:       Splitting.           (line   6)
* Splitting of output files:             Invoking texi2any.   (line 339)
* SPLIT_SIZE:                            Customization Variables and Options.
                                                              (line  29)
* ss:                                    Inserting Accents.   (line  50)
* Stallman, Richard M.:                  History.             (line   6)
* Start of header line:                  Start of Header.     (line   6)
* Starting chapters:                     @setchapternewpage.  (line   6)
* stripping Texinfo commands:            Customization Variables and Options.
                                                              (line  90)
* Structure of a file, showing:          Showing the Structure.
                                                              (line   6)
* Structure, catching mistakes in:       Catching Mistakes.   (line   6)
* Structure, of Texinfo documents:       Texinfo Document Structure.
                                                              (line   6)
* Structuring of chapters:               Chapter Structuring. (line   6)
* SUBDIR:                                Customization Variables and Options.
                                                              (line  25)
* Subscripts and superscripts, text:     Inserting Subscripts and Superscripts.
                                                              (line   6)
* Subsection-like commands:              @unnumberedsubsec @appendixsubsec @subheading.
                                                              (line   6)
* Subsub sectioning commands:            @subsubsection.      (line   6)
* Suggestions for Texinfo, making:       Reporting Bugs.      (line   6)
* Summary of document:                   @documentdescription.
                                                              (line   6)
* Suppressing first paragraph indentation: @firstparagraphindent.
                                                              (line   6)
* Suppressing indentation:               @noindent.           (line   6)
* SVG images, used in Docbook:           Image Syntax.        (line  30)
* SXML output:                           Customization Variables and Options.
                                                              (line  86)
* Syntactic conventions:                 Conventions.         (line   6)
* Syntactic tokens, indicating:          @code.               (line   6)
* Syntax details, #line:                 #line Syntax Details.
                                                              (line   6)
* Syntax tree representation of documents: Reference Implementation.
                                                              (line  17)
* Syntax, of @-commands:                 Command Syntax.      (line   6)
* Syntax, optional & repeated arguments: Optional Arguments.  (line   6)
* SystemLiteral:                         Other Customization Variables.
                                                              (line  23)
* Table of contents:                     Contents.            (line   6)
* Table of contents, after title page:   Contents.            (line  51)
* Table of contents, for floats:         @listoffloats.       (line   6)
* Tables and lists, making:              Lists and Tables.    (line   6)
* Tables with indexing:                  @ftable @vtable.     (line   6)
* Tables, making multi-column:           Multi-column Tables. (line   6)
* Tables, making two-column:             Two-column Tables.   (line   6)
* Tabs; don't use!:                      Conventions.         (line  73)
* Tag table, in Info format:             Info Format Tag Table.
                                                              (line   6)
* Tag table, making automatically:       Tag and Split Files. (line   6)
* Tag table, making manually:            Unsplit.             (line  26)
* Targets for cross-references, arbitrary: @anchor.           (line   6)
* Template for a definition:             Def Cmd Template.    (line   6)
* TEST:                                  Other Customization Variables.
                                                              (line 212)
* Testing for Texinfo commands:          Testing for Texinfo Commands.
                                                              (line   6)
* Tests, of Texinfo language:            Reference Implementation.
                                                              (line  27)
* TeX and #line directives:              #line and TeX.       (line   6)
* TeX commands, using ordinary:          Raw Formatter Commands.
                                                              (line   6)
* TeX index sorting:                     Hardcopy.            (line   6)
* TeX input initialization:              Preparing for TeX.   (line   6)
* TeX logo:                              @TeX @LaTeX.         (line   6)
* TeX, how to obtain:                    Obtaining TeX.       (line   6)
* texi-elements-by-size:                 Other Customization Variables.
                                                              (line 201)
* texi2any:                              Invoking texi2any.   (line   6)
* texi2any options:                      Invoking texi2any.   (line  18)
* texi2any, as reference implementation: Reference Implementation.
                                                              (line   6)
* TEXI2DVI:                              Other Customization Variables.
                                                              (line 218)
* texi2dvi (shell script):               Format with texi2dvi.
                                                              (line   6)
* texi2html:                             texi2html.           (line   6)
* TEXI2HTML:                             Other Customization Variables.
                                                              (line 222)
* texi2oldapi.texi, for texi2any:        texi2html.           (line  73)
* texindex:                              Format with tex/texindex.
                                                              (line  16)
* Texinfo commands, defining new:        Defining New Texinfo Commands.
                                                              (line   6)
* Texinfo commands, testing for:         Testing for Texinfo Commands.
                                                              (line   6)
* Texinfo document structure:            Texinfo Document Structure.
                                                              (line   6)
* Texinfo file beginning:                Beginning and Ending a File.
                                                              (line   6)
* Texinfo file ending:                   Ending a File.       (line   6)
* Texinfo file header:                   Texinfo File Header. (line   6)
* Texinfo file minimum:                  Minimum.             (line   6)
* Texinfo file sectioning structure, showing: Showing the Structure.
                                                              (line   6)
* Texinfo history:                       History.             (line  25)
* Texinfo language tests:                Reference Implementation.
                                                              (line  27)
* Texinfo mode:                          Texinfo Mode.        (line   6)
* Texinfo overview:                      Overview.            (line   6)
* Texinfo parsers, discouraging more:    Adding Output Formats.
                                                              (line  23)
* Texinfo printed book characteristics:  Printed Books.       (line   6)
* Texinfo requires @setfilename:         @setfilename.        (line   6)
* Texinfo XML output, overview:          Output Formats.      (line  77)
* Texinfo, and literate programming:     Details of texindex. (line  37)
* Texinfo, introduction to:              Overview.            (line   6)
* texinfo-bright-colors.css:             HTML CSS.            (line  26)
* texinfo.cnf installation:              Preparing for TeX.   (line  40)
* texinfo.dtd:                           Output Formats.      (line  77)
* texinfo.tex, installing:               Preparing for TeX.   (line  19)
* TEXINFO_COLUMN_FOR_DESCRIPTION:        Other Customization Variables.
                                                              (line 226)
* texinfo_document Gettext domain:       Internationalization of Document Strings.
                                                              (line  21)
* TEXINFO_DTD_VERSION:                   Other Customization Variables.
                                                              (line 231)
* TEXINFO_OUTPUT_FORMAT:                 Invoking texi2any.   (line 392)
* TEXINFO_OUTPUT_FORMAT <1>:             Customization Variables and Options.
                                                              (line  38)
* TEXINPUTS:                             Preparing for TeX.   (line  49)
* texiwebjr:                             Details of texindex. (line  37)
* text constructs, Info format:          Info Format Text Constructs.
                                                              (line   6)
* Text width and height:                 @pagesizes.          (line   6)
* Text, conditionally visible:           Conditionals.        (line   6)
* Text, marking up:                      Marking Text.        (line   6)
* Text::Unidecode:                       Other Customization Variables.
                                                              (line 332)
* TEXTCONTENT_COMMENT:                   Other Customization Variables.
                                                              (line 235)
* Textual glyphs:                        Glyphs for Text.     (line   6)
* th:                                    Inserting Accents.   (line  50)
* TH:                                    Inserting Accents.   (line  50)
* Thin space between number, dimension:  @dmn.                (line   6)
* Thorn:                                 Inserting Accents.   (line  50)
* Three-argument form of cross-references: Three Arguments.   (line   6)
* ti.twjr:                               Details of texindex. (line  37)
* Tie-after accent:                      Inserting Accents.   (line  28)
* Tied space:                            @tie.                (line   6)
* Tilde accent:                          Inserting Accents.   (line  28)
* time-stamp.el:                         GNU Sample Texts.    (line  37)
* Tips:                                  Tips.                (line   8)
* Title page:                            @titlepage.          (line   6)
* Title page, bastard:                   @titlepage.          (line  46)
* Titlepage end starts headings:         Heading Generation.  (line   6)
* TOC_LINKS:                             HTML Customization Variables.
                                                              (line 233)
* Top node:                              The Top Node.        (line   6)
* Top node example:                      Top Node Example.    (line   6)
* Top node is first:                     First Node.          (line   6)
* TOP_FILE:                              HTML Customization Variables.
                                                              (line 237)
* TOP_NODE_FILE:                         HTML Customization Variables.
                                                              (line 243)
* TOP_NODE_FILE_TARGET:                  HTML Customization Variables.
                                                              (line 247)
* TOP_NODE_UP:                           Other Customization Variables.
                                                              (line 240)
* TOP_NODE_UP_URL:                       HTML Customization Variables.
                                                              (line 251)
* tp (data type) index:                  Predefined Indices.  (line  19)
* Translating strings in output documents: Internationalization of Document Strings.
                                                              (line   6)
* TRANSLITERATE_FILE_NAMES:              Customization Variables and Options.
                                                              (line  30)
* Transliteration of 8-bit characters in HTML cross-references: HTML Xref 8-bit Character Expansion.
                                                              (line   6)
* Tree representation of documents:      Reference Implementation.
                                                              (line  17)
* tree representation, for debugging:    Customization Variables and Options.
                                                              (line  62)
* Tree structuring:                      Tree Structuring.    (line   6)
* TREE_TRANSFORMATIONS:                  Other Customization Variables.
                                                              (line 245)
* Two letter names for indices:          @syncodeindex.       (line  17)
* Two named items for @table:            @itemx.              (line   6)
* Two part menu entry:                   Less Cluttered Menu Entry.
                                                              (line   6)
* Two 'First' Lines for @deffn:          @deffnx.             (line   6)
* Two-argument form of cross-references: Two Arguments.       (line   6)
* txi-CC.tex:                            @documentlanguage.   (line  29)
* txicodequotebacktick, obsolete variable: Inserting Quote Characters.
                                                              (line  36)
* txicodequoteundirected, obsolete variable: Inserting Quote Characters.
                                                              (line  36)
* txicommandconditionals:                Testing for Texinfo Commands.
                                                              (line  29)
* txiindexatsignignore:                  Indexing Commands.   (line  48)
* txiindexbackslashignore:               Indexing Commands.   (line  48)
* txiindexhyphenignore:                  Indexing Commands.   (line  48)
* txiindexlessthanignore:                Indexing Commands.   (line  48)
* txixml2texi:                           Output Formats.      (line  77)
* Typed functions:                       Typed Functions.     (line   6)
* Typed variables:                       Typed Variables.     (line   6)
* Typewriter font:                       Fonts.               (line  45)
* Ugly black rectangles in hardcopy:     Overfull hboxes.     (line  41)
* Umlaut accent:                         Inserting Accents.   (line  28)
* Unbreakable space, fixed:              @w.                  (line   8)
* Unbreakable space, variable:           @tie.                (line   6)
* Uncluttered menu entry:                Less Cluttered Menu Entry.
                                                              (line   6)
* Undefining macros:                     Defining Macros.     (line  56)
* Underbar accent:                       Inserting Accents.   (line  28)
* Underdot accent:                       Inserting Accents.   (line  28)
* Underscore, breakpoint within @code:   @allowcodebreaks.    (line   6)
* undirected single quote:               Inserting Quote Characters.
                                                              (line  22)
* Unicode and TeX:                       Inserting Unicode.   (line  19)
* Unicode character, inserting:          Inserting Unicode.   (line   6)
* Unicode quotation characters:          Inserting Quotation Marks.
                                                              (line  16)
* Uniform resource locator, indicating:  @indicateurl.        (line   6)
* Uniform resource locator, referring to: @url.               (line   6)
* Unique index entries:                  Index Entries.       (line  25)
* Unique node names requirement:         Node Line Requirements.
                                                              (line   8)
* Unnumbered float, creating:            @float.              (line  39)
* Unprocessed text:                      Comments.            (line  27)
* Unsplit file creation:                 Unsplit.             (line   6)
* Up node of Top node:                   First Node.          (line  14)
* UPDATED Automake variable:             GNU Sample Texts.    (line  37)
* Updating nodes and menus:              Updating Nodes and Menus.
                                                              (line   6)
* Updating requirements:                 Updating Requirements.
                                                              (line   6)
* URI syntax for Info:                   Info Files.          (line  35)
* URL, examples of displaying:           @url Examples.       (line   6)
* URL, indicating:                       @indicateurl.        (line   6)
* URL, referring to:                     @url.                (line   6)
* URLs, coloring in PDF output:          PDF Colors.          (line   6)
* URLs, PDF output of:                   @url PDF Output Format.
                                                              (line   6)
* us-ascii encoding, and translations:   Internationalization of Document Strings.
                                                              (line  43)
* Usage tips:                            Tips.                (line   8)
* User input:                            @kbd.                (line  15)
* User options, marking:                 Variables Commands.  (line  56)
* User-defined Texinfo commands:         Defining New Texinfo Commands.
                                                              (line   6)
* USE_ACCESSKEY:                         HTML Customization Variables.
                                                              (line 260)
* USE_ISO:                               HTML Customization Variables.
                                                              (line 263)
* USE_LINKS:                             HTML Customization Variables.
                                                              (line 268)
* USE_NODES:                             Other Customization Variables.
                                                              (line 303)
* USE_NODE_TARGET:                       Other Customization Variables.
                                                              (line 308)
* USE_NUMERIC_ENTITY:                    Other Customization Variables.
                                                              (line 312)
* USE_REL_REV:                           HTML Customization Variables.
                                                              (line 272)
* USE_SETFILENAME_EXTENSION:             Other Customization Variables.
                                                              (line 322)
* USE_TITLEPAGE_FOR_TITLE:               Other Customization Variables.
                                                              (line 327)
* USE_UNIDECODE:                         Other Customization Variables.
                                                              (line 331)
* USE_UP_NODE_FOR_ELEMENT_UP:            Other Customization Variables.
                                                              (line 317)
* Using Info-validate:                   Using Info-validate. (line   6)
* Using Texinfo in general:              Overview.            (line   6)
* UTF-8:                                 Inserting Quotation Marks.
                                                              (line  24)
* UTF-8, output from @U:                 Inserting Unicode.   (line  35)
* Validating a large file:               Using Info-validate. (line   6)
* Validation of pointers:                Pointer Validation.  (line   6)
* Value of an expression, indicating:    @result.             (line   6)
* Variables, in typed languages:         Typed Variables.     (line   6)
* Variables, object-oriented:            Object-Oriented Variables.
                                                              (line   6)
* Verbatim copying license:              Verbatim Copying License.
                                                              (line   6)
* Verbatim environment:                  @verbatim.           (line   6)
* Verbatim in-line text:                 @verb.               (line   6)
* Verbatim, include file:                @verbatiminclude.    (line   6)
* Verbatim, small:                       @verbatim.           (line  45)
* VERBOSE:                               Customization Variables and Options.
                                                              (line  31)
* VERSION Automake variable:             GNU Sample Texts.    (line  37)
* Version control keywords, preventing expansion of: @w.      (line  27)
* Version number, for install-info:      Invoking install-info.
                                                              (line 177)
* Versions of Texinfo, adapting to:      Testing for Texinfo Commands.
                                                              (line   6)
* Vertically holding text together:      @group.              (line   6)
* VERTICAL_HEAD_NAVIGATION:              HTML Customization Variables.
                                                              (line 275)
* Visibility of conditional text:        Conditionals.        (line   6)
* Visualizing Texinfo CSS:               HTML CSS.            (line  26)
* vr (variable) index:                   Predefined Indices.  (line  22)
* W3 consortium:                         Output Formats.      (line  23)
* Weinberg, Zack:                        History.             (line  15)
* Weisshaus, Melissa:                    History.             (line  15)
* White space in node name:              Node Line Requirements.
                                                              (line  75)
* Whitespace in macros:                  Defining Macros.     (line  40)
* Whitespace, collapsed around continuations: Def Cmd Continuation Lines.
                                                              (line  28)
* Whitespace, controlling in conditionals: Inline Conditionals.
                                                              (line   6)
* Whitespace, inserting:                 Multiple Spaces.     (line   6)
* Whole manual, in Info format:          Info Format Whole Manual.
                                                              (line   6)
* Width of images:                       Image Scaling.       (line   6)
* Width of text area:                    @pagesizes.          (line   6)
* Widths, defining multitable column:    Multitable Column Widths.
                                                              (line   6)
* Wildcards:                             Format with tex/texindex.
                                                              (line  30)
* word counting:                         Customization Variables and Options.
                                                              (line  90)
* Words and phrases, marking them:       Marking Text.        (line   6)
* WORDS_IN_PAGE:                         HTML Customization Variables.
                                                              (line 279)
* Writing a menu:                        Writing a Menu.      (line   6)
* Writing an @node line:                 Writing a Node.      (line   6)
* Writing index entries:                 Index Entries.       (line   6)
* xdvi:                                  Output Formats.      (line  37)
* XML Docbook output, overview:          Output Formats.      (line  70)
* XML Texinfo output, overview:          Output Formats.      (line  77)
* XML, including raw:                    Raw Formatter Commands.
                                                              (line  45)
* XPM image format:                      Image Syntax.        (line  41)
* XREF_USE_FLOAT_LABEL:                  HTML Customization Variables.
                                                              (line 286)
* XREF_USE_NODE_NAME_ARG:                HTML Customization Variables.
                                                              (line 291)
* XZ-compressed dir files, reading:      Invoking install-info.
                                                              (line  23)
* Years, in copyright line:              @copying.            (line  46)
* Zaretskii, Eli:                        History.             (line  15)
* Zuhn, David D.:                        History.             (line  15)

