\input texinfo    @c -*-texinfo-*-
@comment %**start of header
@setfilename makeinfo.info
@set VERSION 1.61
@paragraphindent none
@comment %**start of header
@comment $Id: makeinfo.texi,v 1.1.1.1 1997/08/21 22:58:08 jason Exp $

@ifinfo
@format
START-INFO-DIR-ENTRY
* makeinfo: (makeinfo).          Making info files from texinfo files.
END-INFO-DIR-ENTRY
@end format
@end ifinfo

@dircategory Texinfo documentation system
@direntry
* makeinfo: (makeinfo).         Convert Texinfo source to Info or plain ASCII.
@end direntry

@ifinfo
This file is an extract from the @cite{Texinfo} manual.@*
It documents Makeinfo, a program that converts Texinfo
files into Info files.  

Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.

Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
are preserved on all copies.

@ignore
Permission is granted to process this file through TeX and print the
results, provided the printed document carries copying permission
notice identical to this one except for the removal of this paragraph
(this paragraph not being relevant to the printed manual).

@end ignore
Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the entire
resulting derived work is distributed under the terms of a permission
notice identical to this one.

Permission is granted to copy and distribute translations of this manual
into another language, under the above conditions for modified versions,
except that this permission notice may be stated in a translation approved
by the Free Software Foundation.
@end ifinfo

@titlepage
@title GNU Makeinfo
@author Brian J. Fox and Robert J. Chassell

@page
@vskip 0pt plus 1filll
Copyright @copyright{} 1992, 1993, 1994, 1995 Free Software Foundation, Inc.

Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
are preserved on all copies.

Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the entire
resulting derived work is distributed under the terms of a permission
notice identical to this one.

Permission is granted to copy and distribute translations of this manual
into another language, under the above conditions for modified versions,
except that this permission notice may be stated in a translation approved
by the Free Software Foundation.
@end titlepage

@node Top
@chapter What is @code{makeinfo}?

@iftex
This file documents the use of the @code{makeinfo} program, versions
@value{VERSION} and later.  It is an extract from the @cite{Texinfo} manual.
@end iftex

@code{makeinfo} is a program for converting @dfn{Texinfo} files into @dfn{Info}
files.  Texinfo is a documentation system that uses a single source file to
produce both on-line information and printed output.

You can read the on-line information using Info; type @code{info} to
learn about Info.
@ifinfo
@xref{Top, Texinfo, Overview of Texinfo, Texinfo, Texinfo},
@end ifinfo
@iftex
See the @cite{Texinfo} manual,
@end iftex
to learn about the Texinfo documentation system.

@menu
* Formatting Control::          Controlling the width of lines, paragraph
                                indentation, and other similar formatting.

* Options::                     Command line options which control the
                                behaviour of Makeinfo.

* Pointer Validation::          How Makeinfo can help you to track node
                                references through complex Texinfo files.

* Index::                       Index of Concepts.
@end menu

@c Removed this for 3.8 until it's time to rewrite it.
@c * The Macro Facility::          Makeinfo allows the use of @dfn{macros}.

@node Formatting Control
@section Controlling Paragraph Formats

Without any special options, @code{makeinfo} @dfn{fills} the paragraphs that
it outputs to an Info file.  Filling is the process of breaking and connecting
lines so that lines are the same length as or shorter than the number
specified as the fill column.  Lines are broken between words.  With
@code{makeinfo}, you can control:

@itemize @bullet
@item
The width of each paragraph (the @dfn{fill-column}).
@item
The amount of indentation that the first line of 
each paragraph receives (the @dfn{paragraph-indentation}).
@end itemize

@node Options
@section Command Line Options

The following command line options are available for @code{makeinfo}.

@need 100
@table @code
@item -D @var{var}
Cause @var{var} to be defined.  This is equivalent to 
@code{@@set @var{var}} in the Texinfo file.

@need 150
@item --error-limit @var{limit}
Set the maximum number of errors that @code{makeinfo} will report
before exiting (on the assumption that continuing would be useless).
The default number of errors that can be reported before
@code{makeinfo} gives up is 100.@refill

@need 150
@item --fill-column @var{width}
Specify the maximum number of columns in a line; this is the right-hand
edge of a line.  Paragraphs that are filled will be filled to this
width.  The default value for @code{fill-column} is 72.
@refill

@item --footnote-style @var{style}
Set the footnote style to @var{style}, either @samp{end} for the end
node style or @samp{separate} for the separate node style.  The value
set by this option overrides the value set in a Texinfo file by an
@code{@@footnotestyle} command.  When the footnote style is
@samp{separate}, @code{makeinfo} makes a new node containing the
footnotes found in the current node.  When the footnote style is
@samp{end}, @code{makeinfo} places the footnote references at the end
of the current node.@refill

@need 150
@item -I @var{dir}
Add @code{dir} to the directory search list for finding files that are
included using the @code{@@include} command.  By default,
@code{makeinfo} searches only the current directory.

@need 150
@item --no-headers
Do not include menus or node lines in the output.  This results in an
@sc{ascii} file that you cannot read in Info since it does not contain
the requisite nodes or menus; but you can print such a file in a
single, typewriter-like font and produce acceptable output.

@need 150
@item --no-split
Suppress the splitting stage of @code{makeinfo}.  Normally, large
output files (where the size is greater than 70k bytes) are split into
smaller subfiles, each one approximately 50k bytes.  If you specify
@samp{--no-split}, @code{makeinfo} will not split up the output
file.@refill

@need 100
@item --no-pointer-validate
@item --no-validate
Suppress the pointer-validation phase of @code{makeinfo}.  Normally,
after a Texinfo file is processed, some consistency checks are made to
ensure that cross references can be resolved, etc.
@xref{Pointer Validation}.@refill

@need 150
@item --no-warn
Suppress the output of warning messages.  This does @emph{not}
suppress the output of error messages, only warnings.  You might
want this if the file you are creating has examples of Texinfo cross
references within it, and the nodes that are referenced do not actually
exist.@refill

@item --no-number-footnotes
Supress automatic footnote numbering.  By default, @code{makeinfo}
numbers each footnote sequentially in a single node, resetting the
current footnote number to 1 at the start of each node.

@need 150
@item --output @var{file}
@itemx -o @var{file}
Specify that the output should be directed to @var{file} and not to the
file name specified in the @code{@@setfilename} command found in the Texinfo
source.  @var{file} can be the special token @samp{-}, which specifies
standard output.

@need 150
@item --paragraph-indent @var{indent}
Set the paragraph indentation style to @var{indent}.  The value set by
this option overrides the value set in a Texinfo file by an
@code{@@paragraphindent} command.  The value of @var{indent} is
interpreted as follows:@refill

@itemize @bullet
@item
If the value of @var{indent} is @samp{asis}, do not change the
existing indentation at the starts of paragraphs.@refill

@item
If the value of @var{indent} is zero, delete any existing
indentation.@refill

@item
If the value of @var{indent} is greater than zero, indent each
paragraph by that number of spaces.@refill
@end itemize

@need 100
@item --reference-limit @var{limit}
Set the value of the number of references to a node that
@code{makeinfo} will make without reporting a warning.  If a node has more
than this number of references in it, @code{makeinfo} will make the
references but also report a warning.@refill

@need 150
@item -U @var{var}
Cause @var{var} to be undefined.  This is equivalent to 
@code{@@clear @var{var}} in the Texinfo file.

@need 100
@item --verbose
Cause @code{makeinfo} to display messages saying what it is doing.
Normally, @code{makeinfo} only outputs messages if there are errors or
warnings.@refill

@need 100
@item --version
Report the version number of this copy of @code{makeinfo}.@refill

@item --help
Show a summary of the commend line arguments to @code{makeinfo}.
@end table

@node Pointer Validation
@section Pointer Validation
@cindex Pointer validation with @code{makeinfo}
@cindex Validation of pointers

If you do not suppress pointer-validation (by using the
@samp{--no-pointer-validation} option), @code{makeinfo}
will check the validity of the final Info file.  Mostly,
this means ensuring that nodes you have referenced
really exist.  Here is a complete list of what is
checked:@refill

@enumerate
@item
If a `Next', `Previous', or `Up' node reference is a reference to a
node in the current file and is not an external reference such as to
@file{(dir)}, then the referenced node must exist.@refill

@item
In every node, if the `Previous' node is different from the `Up' node, 
then the `Previous' node must also be pointed to by a `Next' node.@refill

@item
Every node except the `Top' node must have an `Up' pointer.@refill

@item
The node referenced by an `Up' pointer must contain a reference to the
current node in some manner other than through a `Next' reference.
This includes menu entries and cross references.@refill

@item
If the `Next' reference of a node is not the same as the `Next' reference
of the `Up' reference, then the node referenced by the `Next' pointer
must have a `Previous' pointer that points back to the current node.
This rule allows the last node in a section to point to the first node
of the next chapter.@refill
@end enumerate

@c We don't want to advertise redefining commands.
@c lowersections
@c include macro.texi
@c raisesections

@lowersections
@node Index
@appendix Index
@printindex cp
@raisesections

@contents
@bye
