From ebdfa13dee0809ecc52e3ea7f64c466faeb11f7d Mon Sep 17 00:00:00 2001 From: CSRG Date: Tue, 25 Sep 1990 04:46:28 -0800 Subject: [PATCH] BSD 4_4 development Work on file usr/src/contrib/emacs-18.57/man/texinfo.texinfo Synthesized-from: CSRG/cd3/4.4 --- .../contrib/emacs-18.57/man/texinfo.texinfo | 5141 +++++++++++++++++ 1 file changed, 5141 insertions(+) create mode 100644 usr/src/contrib/emacs-18.57/man/texinfo.texinfo diff --git a/usr/src/contrib/emacs-18.57/man/texinfo.texinfo b/usr/src/contrib/emacs-18.57/man/texinfo.texinfo new file mode 100644 index 0000000000..c6fe74666a --- /dev/null +++ b/usr/src/contrib/emacs-18.57/man/texinfo.texinfo @@ -0,0 +1,5141 @@ +\input texinfo @c -*-texinfo-*- +@comment %**start of header (This is for running Texinfo on a region.) +@setfilename ../info/texinfo +@settitle Texinfo 1.1 +@comment %**end of header (This is for running Texinfo on a region.) + +@iftex +@finalout +@end iftex + +@ifinfo +This file documents Texinfo, a documentation system that uses a single +source file to produce both on-line help and a printed manual. + +This is edition 1.1 of the Texinfo documentation, and is for the Texinfo +that is distributed as part of Version 18 of GNU Emacs. + +Copyright (C) 1988 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 Foundation. +@end ifinfo + +@setchapternewpage odd +@titlepage +@sp 11 +@center @titlefont{Texinfo} +@sp 2 +@center The GNU Documentation Format +@sp 2 +@center by Richard M. Stallman and Robert J. Chassell +@sp 2 +@center Edition 1.1 +@sp 2 +@center May 1988 + +@comment Include the Distribution inside the titlepage environment so +@c that headings are turned off. + +@page +@vskip 0pt plus 1filll +Copyright @copyright{} 1988 Free Software Foundation, Inc. + +@sp 2 +This is version 1.1 of the Texinfo documentation, and is for @* +the Texinfo that is distributed as part of Version 18 of GNU Emacs. +@sp 2 + +Published by the Free Software Foundation @* +675 Massachusetts Avenue, @* +Cambridge, MA 02139 USA @* +Printed copies are available for $10 each. + +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 Foundation. + +@end titlepage + + +@node Top, License, (dir), (dir) + +@menu +* License:: Licensing information. +* Overview:: What is Texinfo? +* Texinfo Mode:: Special features in GNU Emacs. +* Beginning a File:: What to put at the beginning of a Texinfo file. +* Ending a File:: What to put at the end of a Texinfo file. +* Structuring:: How to make nodes and chapters. +* Quotations and Examples:: How to insert quotations and examples. +* Lists and Tables:: How to make lists and tables. +* Cross References:: How to make cross references. +* Formatting Paragraphs:: How to format paragraphs. +* Marking Text:: How to mark code, definitions, variables etc. +* Conditionals:: Putting text in only Info or the printed work. +* Printing Hardcopy:: How to print a hardcopy of the manual. +* Creating an Info File:: How to create an on-line Info file. +* Catching Mistakes:: How to find problems. + +Indices, nodes containing large menus + +* Command Index:: An item for each @@-command. +* Concept Index:: An item for each concept. + +A detailed node listing + +Overview +* Info File:: Characteristics of the Info file. +* Printed Manual:: Characteristics of the printed manual. +* Conventions:: General syntactic conventions. +* Short Sample:: A short sample Texinfo file. + +Using Texinfo Mode +* Info on a Region:: Formatting a region for Info. +* Showing the Structure:: Showing the structure of a file. +* Inserting:: Inserting frequently used commands. + +Beginning a Texinfo File. +* First Line:: The first line of a Texinfo file. +* Start-of-Header:: Identifying the start of the header. +* Setfilename:: Specifying the name of the Info file. +* Settitle:: Specifying the title used by the headings. +* Setchapternewpage:: Starting chapters on odd numbered pages. +* Titlepage:: The title and copyright page. +* Center:: Centering a line. +* Copyright & Printed Permissions:: Ensuring free distributability. +* Top Node:: The master menu. +* License and Distribution:: Your are free to copy and distribute this. + +Ending a Texinfo File +* Contents:: Generating tables of contents. +* Indices:: Generating indices. +* Index Entries:: Defining the entries of an index. +* Combining Indices:: Putting two or more indices together. +* Printing Indices & Menus:: Printing an index and generating menus. + +Node and Chapter Structuring +* Chapter:: Creating a chapter. +* Unnumbered and Appendix:: Chapter-like parts. +* Section:: Creating sections +* Subsection:: Creating subsections. +* Subsubsection:: Creating subsubsections. + +* Node:: Creating nodes. +* Menu:: Creating menus. + + +Making quotations and examples +* Quotation:: Inserting long quotations. +* Example:: Inserting examples of code and the like. +* Display:: Inserting displayed text. + +Making lists and two column tables +* Itemize:: Creating itemized lists. +* Enumerate:: Creating enumerated lists. +* Table:: Creating two column tables. +* Itemx:: Putting an extra item in the + first column of a table. + +Making Cross References +* Xref:: Making a regular cross reference. +* Pxref:: Making a parenthetical cross reference. +* Inforef:: Making a cross reference to an Info file. + + +Formatting Paragraphs +* Refilling & Noindent:: Refilling paragraphs + and preventing indentation +* Refill:: Using the @code{@@refill} command. +* Noindent:: Using the @code{@@noindent} command. + + +Breaks, Blank Lines and Groups +* Line Breaks:: Inserting line breaks in @TeX{}. +* Sp:: Inserting blank lines. +* Br:: Inserting paragraph breaks. +* W:: Preventing line breaks. +* Page:: Starting new pages. +* Group:: Holding text together on one page. +* Need:: Keeping text together. + +Marking Text Within a Paragraph +* Code:: A literal example of a piece of a program. +* Samp:: A literal example of a sequence of characters. +* File:: The name of a file. +* Kbd:: The names of keys or else characters you type. +* Key:: The conventional name for a key on a keyboard. +* Ctrl:: Indicates the ASCII control character. +* Var:: A variable. +* Dfn:: The introductory or defining use of a term. +* Cite:: The name of a book. + +Inserting Braces, @samp{@@} and Periods +* Braces Atsigns Periods:: Inserting braces, @samp{@@} and periods. +* Dots Bullets Tex:: Inserting dots, bullets and the @TeX{} logo +* Emphasis:: Emphasizing text. + +Emphasizing Text +* Emph and Strong:: Emphasizing text. +* Fonts:: Selecting italic, bold or typewriter fonts. + +Creating an Info File +* Installing an Info File:: Putting the Info file in the + @file{info} directory. + +Catching Mistakes +* Debugging with Info:: Catching errors with info formatting. +* Using the Emacs Lisp Debugger:: Using the Emacs Lisp Debugger +* Debugging with Tex:: Catching errors with @TeX{} formatting. +* Using texinfo-show-structure:: Using @code{texinfo-show-structure} + to catch mistakes. +* Using Occur:: Using @code{occur} to catch mistakes. +* Running Info-Validate:: Checking for unreferenced nodes. + +Finding badly referenced nodes +* Info-Validating a Large File:: Running @code{Info-validate} + on a large file. +* Splitting:: Splitting a file manually. + +Appendices +* Command Syntax:: Details about the syntax. +* Include Files:: Making one printed file out of + several Info files. +* TeX Input:: Where @TeX{} finds its @samp{\input} file. +* Sample Permissions:: You may copy GNU Software. +* Ifinfo Permissions:: What to put in the `ifinfo' section. +* Titlepage Permissions:: What to put in the `@@titlepage' section. +@end menu + +@node License, Overview, Top, Top +@comment node-name, next, previous, up +@unnumbered Licensing Information + + The programs currently being distributed that relate to Texinfo +include two portions of GNU Emacs, plus two other separate programs +(@code{texindex} and @code{texinfo.tex}). These programs are +@dfn{free}; this means that everyone is free to use them and free to +redistribute them on a free basis. The Texinfo related programs are not +in the public domain; they are copyrighted and there are restrictions on +their distribution, but these restrictions are designed to permit +everything that a good cooperating citizen would want to do. What is +not allowed is to try to prevent others from further sharing any version +of these programs that they might get from you. + + Specifically, we want to make sure that you have the right to give +away copies of the programs that relate to Texinfo, that you receive +source code or else can get it if you want it, that you can change these +programs or use pieces of them in new free programs, and that you know +you can do these things. + + To make sure that everyone has such rights, we have to forbid you to +deprive anyone else of these rights. For example, if you distribute +copies of the Texinfo related programs, you must give the recipients all +the rights that you have. You must make sure that they, too, receive or +can get the source code. And you must tell them their rights. + + Also, for our own protection, we must make certain that everyone finds +out that there is no warranty for the programs that relate to Texinfo. +If these programs are modified by someone else and passed on, we want +their recipients to know that what they have is not what we distributed, +so that any problems introduced by others will not reflect on our +reputation. + + The precise conditions of the licenses for the programs currently +being distributed that relate to Texinfo are found in the General Public +Licenses that accompany them. The programs that are part of GNU Emacs +are covered by the GNU Emacs copying terms (@pxref{License, , , emacs, +The GNU Emacs Manual}), and other programs are covered by licenses that +are contained in their source files. + +@node Overview, Texinfo Mode, License, Top +@comment node-name, next, previous, up +@chapter Overview of Texinfo +@cindex Overview of Texinfo +@cindex Texinfo overview + +Texinfo is a documentation system that uses a single source file for both +on-line help and a printed manual. This means that instead of writing two +different documents, one for the on-line help and the other for the printed +manual, only one document needs to be written. When the system is revised, +only one file has to be revised.@refill + +Using Texinfo, you can create a document with the normal features of a book +such as chapters, sections, cross references and indices. The chapters and +sections of the printed manual can be made to correspond to the nodes of +the on-line help. The cross references and indices can be used in both the +on-line help and in the printed document. Indices are generated +semi-automatically. The @cite{GNU Emacs Manual} is a good example of a +Texinfo file.@refill + +To make the printed manual, the Texinfo source file is processed by the +@TeX{} typesetting program; the resulting DVI file can be typeset and +printed as a book. To make the on-line help, the Texinfo source file is by +processed the @kbd{M-x texinfo-format-buffer} command; the resulting Info +file is installed in the @file{info} directory.@refill + +Since the Texinfo source file is used for a dual task---to create both the +on-line help and the printed manual---it must be written in a special +format that uses @@-commands (words preceded by an @samp{@@}) to indicate +chapters, sections, nodes, examples, index entries and the like.@refill + +Before writing a Texinfo source file, you should be familiar with the +on-line Info documentation reading program. (@inforef{Info, info, info}, +for more information.) If you are writing a document that will be both +on-line and printed, you will need both Info and @TeX{}. + +To make an Info file, you use the @kbd{M-x texinfo-format-buffer} command +in GNU Emacs.@refill + +To make a printed manual, you need to use @TeX{}, a powerful, +sophisticated typesetting program written by Donald Knuth. @TeX{} is +freely distributable. It is written in a dialect of Pascal called WEB and +can be compiled either in Pascal or (by using a conversion program that +comes with the @TeX{} distribution) in C. (For information about getting +@TeX{}, @pxref{TeX Mode, , , emacs, The GNU Emacs Manual}) + +When @TeX{} processes a Texinfo source file, @TeX{} makes use of a macro +definitions file called @file{texinfo.tex} that comes with the GNU Emacs +distribution in the @file{emacs/man} sources directory. (The first line of +every Texinfo file has a command that says @code{\input texinfo}; this +tells @TeX{} to use the @file{texinfo.tex} file.)@refill + +If the @file{texinfo.tex} file has not already been copied to the directory +which contains the other @TeX{} macro definition files when Emacs was +installed, you will probably want to copy it to that directory. Usually, +this is the @file{/usr/lib/tex/macros} directory. For more information, +@pxref{TeX Input, , @TeX{} Input Initialization} + +Documentation for GNU utilities and libraries should be written in Texinfo +format. + +@menu +* Info File:: Characteristics of the Info file. +* Printed Manual:: Characteristics of the Printed Manual. +* Conventions:: General Syntactic Conventions. +* Short Sample:: A short sample Texinfo file. +@end menu + +@node Info File, Printed Manual, , Overview +@comment node-name, next, previous, up +@section Characteristics of the Info file +@cindex Characteristics of the Info file +@cindex Info file characteristics + +A Texinfo file can be transformed into a printed manual and an on-line Info +file. + +An on-line Info file is a file formatted so that the Info documentation +reading program can operate on it. Info files are divided into pieces +called @dfn{nodes}, each of which contains the discussion of one topic. +Each node has a name, and contains both text for the user to read and +pointers to other nodes, which are identified by their names. The Info +program displays one node at a time, and provides commands with which the +user can move to the other nodes to which the current node points. + +@ifinfo +@inforef{Info, info, info}, for more information about using Info. +@end ifinfo + +Normally, most of the nodes are arranged in a tree which branches down. +Each node may have any number of child nodes that describe subtopics of the +node's topic. The names of these child nodes, if any, are listed in a +@dfn{menu} within the parent node; this allows certain Info commands to +be used to move to one of the child nodes. Each child node records the +parent node name, as its `Up' pointer. Thus, if a node were at the logical +level of a `chapter', its child nodes would be `sections'; likewise, +the child nodes of a section would be subsections. + +The root of the tree is the top node of the file, through which users +enter the file from the Info directory. By convention, this node is always +called @samp{Top}. This node normally contains just a brief summary of the +file's purpose, and a large menu through which the rest of the file is +reached. + +Generally you enter the Info file from the top; then you can either traverse +the file systematically by going from node to node or you can search large +menus that correspond to indices and go directly to the node that has the +information you want. + +If you want to read through an Info file in sequence, as if it were a +printed manual, you can get the whole file with the advanced Info command +@kbd{g *}. (@inforef{Expert, info, info}.)@refill + +All the children of any one parent are linked together in a bidirectional +chain of `Next' and `Previous' pointers. This means that all the nodes +that are logically parallel to sections within a chapter are all linked +together. Normally the order in this chain is the same as the order of the +children in the parent's menu. The last child has no `Next' pointer, and +the first child normally has the parent as its `Previous' pointer (as well +as its `Up' pointer, of course). + +Structuring the nodes in a tree is a matter of convention, not a +requirement. In fact, the `Up', `Previous' and `Next' pointers of a node +can point to any other nodes, and the menu can contain any other nodes. +The structure of nodes can be any directed graph. But it is usually more +comprehensible to make it a tree. Info provides another kind of pointer +between nodes, called a reference, that can be sprinkled through the text +of a node. This is usually the best way to represent links that do not fit +the tree structure. + +Most often the nodes fall into a strict tree structure that corresponds to +the structure of chapters and sections in the printed +manual. But there are times when this is not right for the material being +discussed. Therefore, Texinfo uses separate commands to specify the node +structure of the Info file and the section structure of the printed manual. +Also, Texinfo requires that you specify menus explicitly, rather than +generate them automatically based on an assumed tree structure. + +@node Printed Manual, Conventions, Info File, Top +@comment node-name, next, previous, up +@section Characteristics of the Printed Manual +@cindex Printed manual characteristics +@cindex Characteristics, printed manual + +A Texinfo file can be formatted and typeset as a printed manual. The +printed manual will be the same as any other book; it will have a title +page, copyright page, table of contents, and preface as you would expect, +as well as chapters, numbered or unnumbered sections and subsections, not +to mention page headers, cross references and indices. + +Texinfo can be used for writing a book without ever having the intention of +converting it into on-line help. Texinfo can be used for writing a novel; +and it can even be used to write a memo, although this application is not +recommended since electronic mail is so much easier. + +Texinfo uses the formatting language called @TeX{} for typesetting. A file +called @file{texinfo.tex} contains information (definitions or +@dfn{macros}) that @TeX{} uses when it typesets a Texinfo file. (The +macros tell @TeX{} how to convert the Texinfo @@-commands to @TeX{} +commands which @TeX{} can then process to create the typeset document.) +@file{texinfo.tex} contains the specifications for printing a document, +either with 7 inch by 9.25 inch pages or with 8.5 inch by 11 inch pages. +(This is 178 mm by 235 mm or else 216 mm by 280 mm.) Also, by changing the +parameters in @file{texinfo.tex} you can easily change the size of the +printed document. In addition, you can readily change the style in which +the printed document is formatted; for example, you can change the sizes and +fonts used, the amount of indentation for each paragraph, the degree to +which words are hyphenated, and the like. By changing the specifications, +you can make a book look dignified, old and serious, or light-hearted, +young and cheery.@refill + +@TeX{} is very powerful and has a great many features. Because a Texinfo +file must be able to present information both on a character-only terminal +in Info form and in a typeset book, the commands that Texinfo supports are +necessarily limited. + + +@node Conventions, Short Sample, Printed Manual, Overview +@comment node-name, next, previous, up +@section General Syntactic Conventions +@cindex General syntactic conventions +@cindex Syntactic conventions +@cindex Conventions, syntactic + + +Texinfo files contain a strictly limited set of constructs. The strict +limits make it possible for Texinfo files to be understood both by @TeX{} +and by the code which converts them into Info files. + +All ASCII printing characters except @samp{@@}, @samp{@{} and @samp{@}} can +appear in body text in a Texinfo file and stand for themselves. @samp{@@} +is the escape character which introduces commands. @samp{@{} and @samp{@}} +should be used only to surround arguments to certain commands. @samp{@{} +and @samp{@}} appearing anywhere else will be treated by @TeX{} as a +grouping but treated by the code that produces an Info file as themselves; +this inconsistency is undesirable, so don't let it occur. To put one of +these special characters into the document, put an @samp{@@} character in +front of it. For example, you would insert @samp{@@@@}, @samp{@@@{}, and +@samp{@@@}}.@refill + +It is customary in @TeX{} to use doubled single-quote characters to begin +and end quotations, @samp{``} like these @samp{''}. This convention should +be followed in Texinfo files. Also, three hyphens in a row, @samp{---}, +are used for a dash---like this. In @TeX{}, a single or even a double +hyphen produces a dash that is shorter than you want.@refill + +@comment Remove for version 19 + +@TeX{} ignores the line-breaks in the input text, except for blank lines, +which separate paragraphs. Info generally preserves the line breaks that +are present in the input file. Therefore, break the lines in the Texinfo +file the way you want them to appear in the output Info file, and let +@TeX{} take care of itself. + +Since Info does not normally refill paragraphs when it processes them, a +line with @@-commands in it will sometimes look bad after Info has run on +it. To cause Info to refill the paragraph after finishing with the other +processing, you need to put the command @code{@@refill} at the end of the +paragraph. (@xref{Refilling & Noindent, , Refilling paragraphs and +Preventing indentation}.)@refill + +To prevent a paragraph from being indented in the printed manual, put the +command @code{@@noindent} on a line by itself before the start of the text +that should not be indented. + +If you mark off a region of the Texinfo file with the @code{@@iftex} and +@code{@@end iftex} commands so that the region will appear only in the +printed copy, you can use @TeX{} commands that cannot be used in the Info +file. + +In order to be made into a printed manual, a Texinfo file @strong{must} +begin with lines that looks like + +@example +\input texinfo @@c -*-texinfo-*- +@@setfilename @var{info-file-name} +@@settitle @var{Name of Manual} +@end example + +@noindent +The @samp{\input texinfo} line tells @TeX{} to use the @file{texinfo.tex} +file. This line is usually followed by a start-of-header line (not shown +here) and then by the @samp{@@setfilename @var{info-file-name}} and +@samp{@@settitle @var{Name of Manual}} lines. These two lines are needed +to provide a name for the Info file and to specify the name used on the +left-hand page headers of the printed manual.@refill + +The two lines that contain the @code{@@setfilename} and @code{@@settitle} +commands usually are sandwiched between the start-of-header line and the +end-of-header line. (@xref{Start-of-Header}, for more information.) The +start-of-header and end-of-header lines are needed if you are going to run +@TeX{} or Info on just part of a file.@refill + +@node Short Sample, , Conventions, Overview +@comment node-name, next, previous, up +@section A Short Sample Texinfo File +@cindex Sample texinfo file + +A Texinfo file looks like the following, which is a complete but very short +Texinfo file. The @code{@@comment} command introduces comments that will +not appear in either the Info file or the printed manual; they are for the +person who reads the Texinfo file. + +The first part of the file, from @samp{\input texinfo} through to +@samp{@@end titlepage}, looks more intimidating than it is. Most of the +material is standard boilerplate; when you write a manual, you just put in +the name of your own manual in this section.@refill + +All the commands that tell @TeX{} how to typeset the printed manual and +tell @code{texinfo-format-buffer} how to create an Info file are preceded +by @samp{@@}; thus, @code{@@node} indicates a node and @code{@@chapter} +indicates the start of a chapter. + +@example +\input texinfo @@c -*-texinfo-*- +@@setfilename name-of-texinfo-file +@@settitle Name of Manual +@@setchapternewpage odd + +@@ifinfo +@@comment The following line inserts the copyright notice +@@comment into the Info file. +Copyright @@copyright@{@} 1988 Free Software Foundation, Inc. +@@end ifinfo + +@@comment The titlepage section does not appear in the Info file. +@@titlepage +@@sp 10 +@@comment The title is printed in a large font. +@@center @@titlefont@{Sample Title@} + +@@comment The following two commands start the copyright page +@@comment for the printed manual. This will not appear in the Info file. +@@page +@@vskip 0pt plus 1filll +Copyright @@copyright@{@} year copyright-owner +@@end titlepage + +@@comment The Top node contains the master menu for the Info file. +@@comment This appears only in the Info file, not the printed manual. + +@@node Top, First Chapter, (dir), (dir) +@@comment node-name, next, previous, up + +@@menu +* First Chapter:: The first chapter is the + only chapter in this sample. +@@end menu + +@@node First Chapter, , Top, Top +@@comment node-name, next, previous, up +@@chapter First Chapter +@@cindex Reference to First Chapter + +This is the contents of the first chapter. + +Here is a numbered list. + +@@enumerate +@@item +This is the first item. + +@@item +This is the second item. +@@end enumerate + +The @@kbd@{M-x texinfo-format-buffer@} command transforms a Texinfo file +like this into an Info file; and @@TeX@{@} typesets it for a printed +manual. + +@@node Concept Index, , Previous Node, Top +@@comment node-name, next, previous, up +@@unnumbered Concept Index + +@@printindex cp + +@@contents +@@bye +@end example + +Here is what the contents of the first chapter of the sample look like: + +@quotation + +This is the contents of the first chapter. + +Here is a numbered list. + +@enumerate +@item +This is the first item. + +@item +This is the second item. +@end enumerate + +The @kbd{M-x texinfo-format-buffer} command transforms a Texinfo file like +this into an Info file; and @TeX{} typesets it for a printed manual. +@end quotation + +@node Texinfo Mode, Beginning a File, Overview, Top +@comment node-name, next, previous, up +@chapter Using Texinfo Mode +@cindex Texinfo mode +@cindex Mode, using Texinfo +@cindex GNU Emacs +@cindex Emacs + +In GNU Emacs, Texinfo mode is a major mode for editing Texinfo files. +This means that Emacs has commands and features especially designed for +working with Texinfo files. Like all other Emacs features, you can +customize or enhance these as you wish. In particular, the keybindings are +very easy to change. The keybindings described here are the default or +standard ones. + +The major features of Texinfo mode are: + +@itemize @bullet +@item +Paragraph filling control. + +@item +A command to show the structure of the file. + +@item +Pre-defined keystroke commands to insert commonly used strings of text. + +@item +Formatting a part of a file for Info, rather than the whole file. +@end itemize + +In general, in Texinfo mode, the GNU Emacs editing commands are like those +in text-mode. The major difference is that the paragraph separation +variable and syntax table are set up so expression commands skip Texinfo +bracket groups. This means, for example, that the @kbd{M-q} +(@code{fill-paragraph}) command will refill a paragraph but not the +@@-command on a line adjacent to it.@refill + +By convention, the Texinfo file name shall end with the extension +@file{.texinfo} so that Emacs knows to use Texinfo mode for editing it. + +@menu +* Info on a Region:: Formatting part of a file for Info. +* Showing the Structure:: Showing the structure of a file. +* Inserting:: Inserting frequently used commands. +@end menu + +@node Info on a Region, Showing the Structure, Texinfo Mode, Texinfo Mode +@comment node-name, next, previous, up +@section Formatting a Region for Info +@cindex Running Info on a region +@cindex Info, formatting on a region +@findex texinfo-format-region + +To see what part of a Texinfo file will look like after it has been +transformed into an Info file, use the command @kbd{C-c C-f} +(@code{texinfo-format-region}). This command formats the current region of +the Texinfo file for Info and writes it to a temporary buffer called +@samp{*Info Region*}.@refill + +For @code{texinfo-format-region} to work, the file @strong{must} include a +line that has @code{@@setfilename} in its header.@refill + +The command is: + +@table @kbd +@item C-c C-f +texinfo-format-region +@end table + +@node Showing the Structure, Inserting, Info on a Region, Texinfo Mode +@comment node-name, next, previous, up +@section Showing the Structure of a File +@cindex Showing the structure of a file +@cindex Structure of a file, showing it +@cindex File structure, showing it +@cindex Texinfo file structure, showing it + +You can show the structure of a Texinfo file by using the @kbd{C-c C-s} +command (@code{texinfo-show-structure}). This command shows the structure +of a Texinfo file by listing the lines with the @@-commands for +@code{@@node}, @code{@@chapter}, @code{@@section} and the like. These +lines are displayed in another window called the @samp{*Occur*} window. In +that window, you can position the cursor over one of the lines and use the +@kbd{C-c C-c} command (@code{occur-mode-goto-occurrence}), to jump to the +corresponding spot in the Texinfo file.@refill + +The two commands are: + +@table @kbd +@item C-c C-s +texinfo-show-structure + +@item C-c C-c +occur-mode-goto-occurrence +@end table + +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 with the @kbd{C-x n} +(@code{narrow-to-region}) command and @code{texinfo-show-structure} will +work on only that region. (To see the whole buffer again, use @kbd{C-x w} +(@code{widen}).)@refill + +@node Inserting, , Showing the Structure, Texinfo Mode +@comment node-name, next, previous, up +@section Inserting Frequently Used Commands +@cindex Inserting frequently used commands +@cindex Frequently used commands, inserting them +@cindex Commands, inserting them + +Texinfo mode provides commands that insert various frequently used +@@-commands into the buffer. You can use these commands to save +keystrokes. And you can insert balanced curly braces with the @kbd{M-@{} +command, (@code{texinfo-insert-braces}) and later use the @kbd{M-@}} +command (@code{up-list}) to move forward past the closing brace.@refill + +The special commands are invoked by typing @kbd{C-c} twice and then the +first letter of the @@-command. + +@table @kbd +@item C-c C-c c +texinfo-insert-@@code + +@item C-c C-c d +texinfo-insert-@@dfn + +@item C-c C-c e +texinfo-insert-@@end + +@item C-c C-c i +texinfo-insert-@@item + +@item C-c C-c n +texinfo-insert-@@node + +@item C-c C-c s +texinfo-insert-@@samp + +@item C-c C-c v +texinfo-insert-@@var + +@item M-@{ +texinfo-insert-braces + +@item M-@} +up-list +@end table + +This list was generated by analyzing the frequency with which commands were +used in the @cite{GNU Emacs Manual} and the @cite{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 @file{texinfo.el}. + +@node Beginning a File, Ending a File, Texinfo Mode, Top +@comment node-name, next, previous, up +@chapter Beginning a Texinfo File +@cindex Beginning a Texinfo file +@cindex Texinfo file beginning +@cindex File beginning + +Various pieces of information have to be provided to Texinfo at the +beginning of a Texinfo file, such as the name of the file, the title +of the document and the like. Generally, the beginning of a Texinfo file +has four parts: + +@enumerate +@item +The header, marked by start-of-header and end-of-header lines, that +includes the commands for naming the Texinfo file and telling @TeX{} what +definitions' file to use when processing the file. + +@item +A section, marked by the @code{@@ifinfo} and @code{@@end ifinfo} commands, +that contains a short statement of what the file is about, the copyright +notice and copying permissions. This section appears only in the Info file. + +@item +A section, marked by the @code{@@titlepage} and @code{@@end titlepage} +commands, that contains the title page, the copyright page and copying +permissions. This section appears only in the printed manual. + +@item +The @samp{Top} node that contains an extensive menu for the whole Info +file. The contents of this node only appear in the Info file. +@end enumerate + +If the Texinfo file has a section containing licensing information and a +warranty disclaimer, that section usually follows the @samp{Top} node. The +licensing section will be followed by a preface or else by the first +chapter of the manual. + +Since the copyright notice and the copying permissions are in sections that +appear only in the Info file or only in the printed manual, this +information has to be repeated twice. + +The following sample shows what is needed. + +@example +\input texinfo @@c -*-texinfo-*- +@@comment %**start of header (This is for running Texinfo on a region.) +@@setfilename name-of-texinfo-file +@@settitle Name of Manual +@@setchapternewpage odd +@@comment %**end of header (This is for running Texinfo on a region.) + +@@ifinfo +This file documents @dots{} + +Copyright @@copyright@{@} year copyright-owner + +Permission is granted to @dots{} +@@end ifinfo + +@@titlepage +@@sp 10 +@@center @@titlefont@{Name of Manual When Printed@} +@@sp 2 +@@center Subtitle, If Any +@@sp 2 +@@center Author + +@@comment The following two commands start the copyright page. +@@page +@@vskip 0pt plus 1filll +Copyright @@copyright@{@} year copyright-owner + +Published by @dots{} + +Permission is granted to @dots{} +@@end titlepage + + +@@node Top, Overview, (dir), (dir) + +@@menu +* First Chapter:: The first chapter is usually an overview. +* Second Chapter:: @dots{} + +@@end menu + +@@node First Chapter, Second Chapter, top, top +@@comment node-name, next, previous, up +@@chapter First Chapter +@@cindex Reference to First Chapter +@end example + +@menu +* Header:: Necessary first lines. +* Permissions for Info:: Copyright notice and copying permissions. +* Titlepage & Copyright Page:: Printed title and copyright pages. +* Top Node:: The top node and master menu. +* License and Distribution:: The importance of the license. +@end menu + +@node Header, Permissions for Info , Beginning a File, Beginning a File +@comment node-name, next, previous, up +@section The Texinfo File Header +@cindex Header for Texinfo files +@cindex Texinfo file header + +Texinfo files start with at least three lines that provide Info and @TeX{} +with necessary information. If you want to run @TeX{} on just a part of +the Texinfo File, you also have to mark these heading lines with +start-of-header and end-of-header lines.@refill + +@menu +* First Line:: The first line of a Texinfo file. +* Start-of-Header:: Identifying the start of the header. +* Setfilename:: Specifying the name of the Info file. +* Settitle:: Specifying the title used by the headings. +* Setchapternewpage:: Starting chapters on odd numbered pages. +* End-of-Header:: Identifying the end of the header. +@end menu + +@node First Line, Start-of-Header, Header, Header +@comment node-name, next, previous, up +@subsection The First Line of a Texinfo File +@cindex First line of a Texinfo file +@cindex Beginning line of a Texinfo file + + +Every Texinfo file that is to be the top-level input to @TeX{} must begin +with a line that looks like this: + +@example +\input texinfo @@c -*-texinfo-*- +@end example + +@noindent +The line serves two functions: + +@enumerate +@item +When the file is processed by @TeX{}, it loads the macros needed for +processing a Texinfo file. These are in a file called @file{texinfo.tex} +which is usually located in the @file{/usr/lib/tex/macros} directory.@refill + +@item +When the file is edited in GNU Emacs, it causes Texinfo mode to be used.@refill +@end enumerate + +The @samp{\input texinfo} line should be followed by the start-of-header +line. This makes it possible for the command for running @TeX{} on a part +of the Texinfo file (@code{texinfo-hardcopy-region}) to operate. The +reason for this is that the @code{texinfo-hardcopy-region} command will +look on the line preceding the start-of-header line for the @samp{\input +texinfo} line. + +@node Start-of-Header, Setfilename, First Line, Header +@comment node-name, next, previous, up +@subsection @samp{start-of-header} +@cindex start-of-header +@findex start-of-header + +The start-of-header line should immediately follow the first line of the +Texinfo file. + +@ifinfo +The @code{texinfo-hardcopy-region} command will look at the +line preceding the start-of-header line to find the @samp{\input +texinfo} line. +@end ifinfo + +Usually, the start-of-header line looks like this: + +@example +@@comment %**start of header (This is for running Texinfo on a region.) +@end example + +The reason for the odd string of characters (@samp{%**}) is so that the +@code{texinfo-hardcopy-region} command does not accidently find something +that it shouldn't when it is looking for the header. + +In the default configuration, the phrase @samp{(This is for running Texinfo +on a region.)} is not needed and is just included to make it easier for +someone reading the Texinfo file. + +The start-of-header line and the end-of-header line are Texinfo mode +variables that you can change. + +@node Setfilename, Settitle, Start-of-Header, Header +@comment node-name, next, previous, up +@subsection @@setfilename +@cindex Setfilename command +@cindex Info file requirement for @@setfilename +@findex setfilename + +In order to be made into an Info file, a Texinfo file must contain a line +that looks like this: +@example +@@setfilename @var{info-file-name} +@end example + +@noindent +This line specifies the name of the Info file to be generated. In fact, there +can be other things in the file before this line, but they are ignored in +the generation of an Info file. The @code{@@setfilename} line is ignored +when a printed manual is generated. + +@node Settitle, Setchapternewpage, Setfilename, Header +@comment node-name, next, previous, up +@subsection @@settitle +@findex settitle + +In order to be made into a printed manual file, a Texinfo file must contain +a line that specifies the title of the manual. Texinfo uses this +information during printing to put the title on every other page as a +heading; Texinfo puts the current chapter title on the other pages. +Texinfo can find the name of the chapter title from the information +provided by the @code{@@chapter} command, but you must tell it the manual +title with @code{@@settitle}: + +@example +@@settitle @var{Title} +@end example + +@noindent +This command, on a line by itself, causes @var{title} to be used for the +headings. Usually, you will use the same words for the title on the title +page and for the title specified by this command for the headings, but the +two could be different. For example, the title on the title page may be +longer than the title specified by the @code{settitle} command. + +The @code{@@settitle} command should precede everything that generates +actual output. + +@node Setchapternewpage, End-of-Header, Settitle, Header +@comment node-name, next, previous, up +@subsection @@setchapternewpage +@cindex Starting chapters +@cindex Pages, starting odd +@findex setchapternewpage + +Conventionally, chapters start on the page on the right hand side of a +book; and the right hand page has an odd number. To make sure that Texinfo +does this, you can use the command @code{@@setchapternewpage}. For +example, to cause each chapter to start on a fresh odd-numbered page: + +@example +@@setchapternewpage odd +@end example + +Page numbering is turned on by the @code{@@end titlepage} command, so the +@code{@@setchapternewpage} should come before it. Although it can occur +anywhere in the beginning of the file, it is most convenient to put it in +this location. + + +@node End-of-Header, , Setchapternewpage, Header +@comment node-name, next, previous, up +@subsection @samp{end-of-header} +@cindex end-of-header + +The end-of-header line should follow the line containing the +@code{@@setchapternewpage} command. + +Usually, the end-of-header line looks like this: + +@example +@@comment %**end of header (This is for running Texinfo on a region.) +@end example + +@ifinfo +In the default configuration, the phrase @samp{(This is for running Texinfo +on a region.)} is not needed and is just included to make it easier for +someone reading the Texinfo file. + +The reason for the odd string of characters (`%**') is so that the +@code{texinfo-hardcopy-region} command does not accidently find something +that it shouldn't when it is looking for the header. + +The start-of-header line and the end-of-header line are Texinfo mode +variables that you can change. +@end ifinfo + +@iftex +Also, @pxref{Start-of-Header} +@end iftex + +@node Permissions for Info, Titlepage & Copyright Page, Header, Beginning a File +@comment node-name, next, previous, up +@section Copying Permissions for Info + +Since the title page and the copyright page appear only in the printed copy +of the manual, the same information has to inserted in a section that +appears only in the Info file. This section usually contains a brief +description of the contents of the Info file, a copyright notice and +copying permissions. + +The copyright notice should read: + +@example +Copyright @var{year} @var{copyright-owner} +@end example + +@noindent +and be put on a line by itself. + +Standard text for the copyright permissions is contained in the appendix. +@xref{Ifinfo Permissions}, for the complete text. + +@node Titlepage & Copyright Page, Top Node, Permissions for Info, Beginning a File +@comment node-name, next, previous, up +@section The Title and Copyright Pages +@cindex Titlepage +@cindex Copyright page + +The title and copyright pages appear in the printed manual, but not in the +Info file. Because of this, it is possible to use a couple of slightly +obscure @TeX{} typesetting commands that could not be used in an Info file. +In addition, this part of the beginning of a Texinfo file contains the text +of the copying permissions that will appear in the printed manual. + +@menu +* Titlepage:: Creating a title page for the printed manual. +* Center:: Centering a line. +* Copyright & Printed Permissions:: Inserting the copyright notice + and printed permissions. +@end menu + +@node Titlepage, Center , Titlepage & Copyright Page, Titlepage & Copyright Page +@comment node-name, next, previous, up +@subsection @@titlepage +@cindex Titlepage +@findex titlepage + +Start the material for the title page and following copyright page with +@code{@@titlepage} on a line by itself and end it with @code{@@end +titlepage} on a line by itself. The title page and copyright page material +appears only in the printed manual, not in the Info file. + +Also, the @code{@@end titlepage} command starts a new page and turns on +page numbering (generation of headings). Therefore, all the material that +you want to appear on unnumbered pages should be put between the +@code{@@titlepage} and @code{@@end titlepage} commands. By using the +@code{@@page} command you can force a page break within the region +delineated by the @code{@@titlepage} and @code{@@end titlepage} commands +and create more than one unnumbered page. This is how the copyright page +is produced.@refill + +@findex titlefont +To select a large font suitable for the title itself, you can use the +command @code{@@titlefont}. For example: + +@example +@@center @@titlefont@{Texinfo@} +@end example + +Also, you can use @code{@@sp} commands to adjust vertical spacing. +For example: + +@example +@@sp 2 +@end example + +@noindent +In the sample, the spacing was chosen to fit an 8 1/2 by 11 inch manual. + +@node Center, Copyright & Printed Permissions, Titlepage, Titlepage & Copyright Page +@comment node-name, next, previous, up +@subsection @@center +@cindex Centering a line +@findex center + +A line containing @code{@@center @var{text}} produces a line of output +containing @var{text}, centered between the margins.@refill + + + +@node Copyright & Printed Permissions,, Center, Titlepage & Copyright Page +@comment node-name, next, previous, up +@subsection The Copyright Page and Printed Permissions +@cindex Copyright +@cindex Printed permissions +@cindex Permissions, printed + +By international treaty, the copyright notice for a book should either be +on the title page or on the back of the title page. Other locations in a +book are not official and do not provide copyright protection. The +copyright notice should include the year followed by the name of the person +or organization who has the copyright. + +When the copyright notice is on the back of the title page, the page is not +numbered. Therefore, in Texinfo, the information on the copyright page +should be within the region delineated by the @code{@@titlepage} and +@code{@@end titlepage} commands.@refill + +@findex vskip +@findex filll +To cause a page break, the @code{@@page} command is used. In the sample, +the @code{@@page} command is followed by the somewhat mysterious line that +reads: @samp{@@vskip 0pt plus 1filll}. This is a line that uses @TeX{} +commands to push the copyright notice and the other text on the copyright +page towards the bottom of the page. The @code{@@vskip} command means to +skip lines and put in white space. The @samp{0pt plus 1filll} means to put +in zero points of mandatory white space, and as much optional white space +as needed. Note the use of three @samp{l}s in the word @samp{filll}; this +is the correct use in @TeX{}.@refill + +@findex copyright +The @code{@@copyright@{@}} command generates a @samp{c} inside a circle. +The copyright notice itself has the following legally defined sequence: + +@example +Copyright @copyright{} @var{year} @var{copyright-owner} +@end example + +It is customary to put information on how to get a manual after the +copyright notice (the address of the Free Software Foundation, for example) +and the permissions. + +Note that the permissions have to be repeated here as well as in the +`ifinfo' section that immediately follows the header since this section +appears only in the printed manual and the `ifinfo' section appears only in +the Info file. + +Standard text for the permissions appears in the appendix. +@xref{Sample Permissions}. + +@node Top Node, License and Distribution, Titlepage & Copyright Page, Beginning a File +@comment node-name, next, previous, up +@section The Top Node and Master Menu +@cindex Top node +@cindex Master menu + +The @samp{Top} node contains an extensive, master menu for the whole Info +file. The contents of this node appear only in the Info file. Nothing in +this node should appear in the printed file. Since a node line by itself +and a menu by itself are not printed, the contents of this node do not have +to be within a region delineated by @code{@@ifinfo} and @code{@@end ifinfo} +commands. However, any text within the node should be marked off in that +manner. You may want to put a short summary before the master menu inside +a region delineated by @code{@@ifinfo} and @code{@@end ifinfo} commands. +Usually, the `Previous' and `Up' nodes refer to the top level directory of +the whole Info system, with pointers to @samp{(dir)}.@refill + +Generally, the top menu is divided into parts. + +@itemize @bullet + +@item +The first part contains the major nodes in the Texinfo file: the nodes for +the chapters, chapter-like sections and the major appendices. + +@item +The second part contains entries for the indices. In an Info file, it is +very useful to have indices here at the beginning of the file in the top +node rather than at the end, as in a printed book. + +@item +The third and subsequent parts contain a listing of the other, lower level +nodes, often ordered by chapter. This way, an inquirer can go directly to +a particular node if he or she is searching for specific information. +(These nodes are not required; use them if you think they are a +convenience.) +@end itemize + +Each section in the menu can be introduced a descriptive line. So long as +the line does not begin with an asterisk, it will not be treated as a menu +item. (@xref{Menu, , Making Menus}, for more information.) + +For example, the Top node of this manual looks like this (but with many +more entries): + +@example +@@node Top, Overview, (dir), (dir) + +@@menu +* Overview:: What is Texinfo? +* Texinfo Mode:: Special features in GNU Emacs. +@dots{} + +Indices, nodes containing large menus + +* Command Index:: An item for each @@-command. +* Concept Index:: An item for each concept. + +A detailed node listing + +Overview +* Info File:: Characteristics of the Info file. +* Printed Manual:: Characteristics of the printed manual. + +Using Texinfo Mode +* Info on a Region:: Formatting a region for Info. +* Showing the Structure:: Showing the structure of a file. +@dots{} +@dots{} +@end example + + +@node License and Distribution, , Top Node, Beginning a File +@comment node-name, next, previous, up +@section Licensing and Distribution Information +@cindex Distribution +@cindex License agreement + +If the Texinfo file has a section containing the ``General Public License'' +and the distribution information and a warranty disclaimer, this section +usually follows the @samp{Top} node. The licensing and distribution +information and the disclaimer are followed by a preface or else by the +first chapter of the manual. + +The licensing agreement is very important to Project GNU documentation and +software. Without it, you may find that you can no longer get the software +or its documentation. This sounds paradoxical, but the state of the world +is such that documentation and software that does not have a +``restrictive'' license to make them freely distributable may be lost to +the public. This has happened.@refill + +For a good example of the text that could be used for the Distribution, +General Public License and NO WARRANTY sections of your document, see the +latest version of the @cite{GNU Emacs Manual}. + +@cindex Preface +Although a preface is not a required part of a Texinfo file, it is very +helpful. Ideally, it should state clearly and concisely what the file is +about and who would be interested in reading it. In general, the preface +would follow the licensing and distribution information, although sometimes +people put it earlier in the document. Usually, a preface is put in an +@code{@@unnumbered} section. (@xref{Unnumbered and Appendix}.) + +@node Ending a File, Structuring, Beginning a File, Top +@comment node-name, next, previous, up +@chapter Ending a Texinfo File +@cindex Ending a Texinfo file +@cindex Texinfo file ending +@cindex File ending +@findex bye + +The end of a Texinfo file should include the indices, the commands to +generate detailed and summary tables of contents and the @@-command +that tells @TeX{} that it has reached the end of the file. + +For example, a Texinfo file might be ended as follows: + +@example +@@node Concept Index, , Previous Node, Top +@@comment node-name, next, previous, up +@@unnumbered Concept Index + +@@printindex cp + +@@contents +@@bye +@end example + +The @code{@@bye} command should be on a line by itself and every Texinfo +file must end with such a line. This command terminates @TeX{} processing +and forces out unfinished pages.@refill + +@menu +* Contents:: Generating a table of contents +* Indices:: Generating, sorting and printing indices +@end menu + +@node Contents, Indices , , Ending a File +@comment node-name, next, previous, up +@section Generating a Table of Contents +@cindex Table of contents +@cindex Contents, Table of + +The commands @code{@@chapter}, @code{@@section}, etc., supply the +information to make up a table of contents, but they do not cause an actual +table to be generated. To do this, you must use the commands +@code{@@contents} and @code{@@summarycontents}.@refill + +@table @code + +@item @@contents +The table of contents command outputs (into a printed manual) a complete +table of contents, based on the @code{@@chapter}, @code{@@unnumbered} and +other sectioning commands. This command should be used on a line by +itself.@refill + +@item @@summarycontents +The summary contents command generates a summary table of contents that +lists only the chapters (and appendices and unnumbered chapters); sections, +subsections and subsubsections are omitted. This command should be used on +a line by itself. Only large manuals need a summary table of +contents.@refill +@end table + +You can use either one of these commands, or both. Each command +automatically generates a chapter-like heading at the top of the page. +Tables of contents should be generated at the very end of the manual, just +before the @code{@@bye} command; the tables of contents commands should +follow any indices that are output, so that the indices will appear in the +contents.@refill + +@group +@example +@var{indices}@dots{} +@@summarycontents +@@contents +@@bye +@end example +@end group + +The commands @code{@@contents} and @code{@@summarycontents} are ignored when an +Info file is being generated. + +@node Indices, , Contents, Ending a File +@comment node-name, next, previous, up +@section Creating Indices +@cindex Indices +@cindex Creating indices + +Using Texinfo, you can generate printed indices and Info file menus without +having to sort and collate entries manually. Texinfo will do this for you +automatically. Each index covers a certain kind of entry (functions, or +variables, or concepts, etc.)@: and lists all of those entries in +alphabetical order, together with information on how to find the discussion +of each entry. In a printed manual, this information consists of page +numbers. In an Info file, it consists of a menu item leading to the first +node referenced. + +When you are making index entries, it is good practice to think of the +different categories under which people may look for something. Different +people @emph{do not} think of the same words when they look something up. +They think of different words. A helpful index will have items indexed +under all the different words that people may use. For example, someone might +think it obvious that the two letter names for indices should be listed +under ``Indices, two letter names'', since the word ``Index'' is the +general concept. But another reader may remember the specific concept of +two letter names and search for the entry listed as ``Two letter names for +indices''. A good index will have both entries and will help both kinds of +user. + +Like typesetting, the construction of an index is a highly skilled, +professional art, the subtleties of which are not appreciated until you +have to do it yourself. + +Normally, six indices are provided for: + +@itemize @bullet +@item +A @dfn{program index} listing names of programs and leading to the places +where those programs are documented.@refill + +@item +A @dfn{function index} listing functions (such as, entry points of +libraries).@refill + +@item +A @dfn{variables index} listing variables (such as, external variables of +libraries).@refill + +@item +A @dfn{data type index} listing data types (such as, structures defined in +header files).@refill + +@item +A @dfn{keystroke index} listing keyboard commands.@refill + +@item +A @dfn{concept index} listing concepts that are discussed.@refill +@end itemize + +@noindent +Not every manual needs all of these. This manual has two indices: a +concept index and an @@-command index (that uses the function index but is +called a command index in the chapter heading). Two or more indices can be +combined into one using the @code{@@synindex} command. @xref{Combining +Indices}. + +@menu +* Index Entries:: Defining the entries of an index +* Combining Indices:: +* Printing Indices & Menus:: +@end menu + +@node Index Entries, Combining Indices, , Indices +@comment node-name, next, previous, up +@subsection Defining the Entries of an Index +@cindex Defining the entries of an index +@cindex Index entries +@cindex Entries for an index + +The data to make an index comes from many individual commands scattered +throughout the Texinfo source file. Each command says to add one entry to +a particular index; after processing, it will give the current page number +or node name as the reference. + +@table @code +@item @@cindex @var{concept} +Make an entry in the concept index for @var{concept}, referring to the +current page or node.@refill +@item @@findex @var{function} +Make an entry in the function index for @var{function}, referring to the +current page or node.@refill +@item @@vindex @var{variable} +Make an entry in the variable index for @var{variable}, referring to the +current page or node.@refill +@item @@pindex @var{program} +Make an entry in the program index for @var{program}, referring to the +current page or node.@refill +@item @@kindex @var{key} +Make an entry in the key index for @var{key}, referring to the +current page or node.@refill +@item @@tindex @var{data type} +Make an entry in the data type index for @var{data type}, referring to the +current page or node.@refill +@end table + +If the same name is indexed on several pages, all the pages are listed in +the printed manual's index. However, @strong{only} the @strong{first} node +referenced will appear in the index of an Info file. This means that it is +best to write indices in which each entry will refer to only one place in the +Texinfo file. Fortunately, this constraint is a feature rather than loss +since it means that the index will be easy to use. Otherwise, it can be +easy to create an index which has many pages listed for an entry and you +don't know which one you need.@refill + +You are not actually required to use indices for their canonical +purposes. For example, you might wish to index some C preprocessor macros. +You could put them in the function index along with actual functions, just +by writing @code{@@findex} commands for them; then, when you print the +``function index'', you could give it the title `Function and Macro Index' +and all will be consistent for the reader. Or you could put the macros in +with the data types by writing @code{@@tindex} commands for them, and give +that index a suitable title so the reader will understand.@refill + +@node Combining Indices, Printing Indices & Menus, Index Entries, Indices +@comment node-name, next, previous, up +@subsection Combining Indices +@cindex Combining Indices +@cindex Indices, combining them + +Sometimes you will want to combine two disparate indices such as functions +and variables, perhaps because you have few enough of one of them that +a separate index for them would look silly. + +You could put variables into the function index by writing @code{@@findex} +commands for them instead of @code{@@vindex} commands, and produce a +consistent manual by printing the function index with the title `Function +and Variable Index' and not printing the `Variable Index' at all; but this +is not a robust procedure. It works only as long as your document is never +included in part of or together with another document that is designed to +have a separate variable index; if you did that, the variables from your +document and those from the other would not end up together. + +What you should do instead when you want functions and variables in one +index is to index the variables with @code{@@vindex} as they should be, but +use the @code{@@synindex} command to redirect these @code{@@vindex} +commands to the function index. @code{@@synindex} takes two arguments: the +name of an index to redirect, and the name of an index to redirect it to. +For this purpose, the indices are given two-letter names: +@cindex Two letter names for indices +@cindex Indices, two letter names +@cindex Names for indices + +@table @samp +@item cp +the concept index +@item vr +the variable index +@item fn +the function index +@item ky +the key index +@item pg +the program index +@item tp +the data type index +@end table + +Thus, @code{@@synindex vr fn} at the front of a Texinfo file +will cause all entries designated for the variable index to go to +the function index instead. + +@node Printing Indices & Menus, , Combining Indices, Indices +@comment node-name, next, previous, up +@subsection Printing an Index and Generating Menus +@cindex Printing an index +@cindex Indices, printing +@cindex Generating menus with indices +@cindex Menus generated with indices + +To print an index means to include it as part of a manual or Info file. +This does not happen automatically just because you use @code{@@cindex} or +other index-entry generating commands in the Texinfo file; those just cause +the raw data for the index to be accumulated. To print an index, you must +include the @code{@@printindex} command at the place in the document where +you want the index to appear. Also, for the case of the printed manual, +you must run a program called @code{texindex} to sort the raw data to +produce a sorted index file, which is what will actually be used to print +the index.@refill + +The Texinfo command that is used to print indices is @code{@@printindex}. +It takes the two-letter index name (@pxref{Combining Indices}) as an +argument without braces, and reads the corresponding sorted index file and +formats it appropriately into an index.@refill + +@ifinfo +The two-letter index names are: + +@table @samp +@item cp +the concept index. +@item vr +the variable index. +@item fn +the function index. +@item ky +the key index. +@item pg +the program index. +@item tp +the data type index. +@end table +@end ifinfo + +@code{@@printindex} does not generate a chapter heading for the index. +Consequently, you should precede the command with a suitable section or +chapter command (usually @code{@@unnumbered}) to supply the chapter heading +and put the index into the table of contents. And before that, you will +probably put a @code{@@node} command. For example,@refill + +@example +@@node Variables Index, Concept Index, Function Index, Top +@@comment node-name, next, previous, up +@@unnumbered Variable Index + +@@printindex vr + +@@node Concept Index, , Variables Index, Top +@@comment node-name, next, previous, up +@@unnumbered Concept Index + +@@printindex cp + +@@summarycontents +@@contents +@@bye +@end example + +In @TeX{}, @code{@@printindex} needs a sorted index file to work from. +@TeX{} does not know how to do sorting; this is one of the main +deficiencies of @TeX{}. You must invoke the program @code{texindex} to do +so, giving it the names of the raw index files to be sorted as arguments. +You do not have to run @code{texindex} on all of them; only the ones you +are going to print. (@xref{Printing Hardcopy}, for more information.) + +@node Structuring, Quotations and Examples, Ending a File, Top +@comment node-name, next, previous, up +@chapter Node and Chapter Structuring +@cindex Node and chapter structuring +@cindex Chapter structuring +@cindex Node structuring +@cindex Structuring of nodes and chapters +@findex node + +The chapter structuring commands divide a document into a hierarchy of +chapters, sections, subsections and subsubsections. These commands +generate large headings. + +In a printed manual, the table of contents is based on the information +specified by the chapter structuring commands. + +Although the chapter structuring commands used for creating a printed +document are entirely different from the node commands for structuring an +Info file, you are likely to use the two kinds of command together since +the single Texinfo file is usually designed to be read both as an Info file +and as a printed manual. The only time you are likely to use the chapter +structuring commands without using the node structuring commands is if you +are writing a document that will never be put into Info format, for +example, a novel, a letter, an article or a memorandum. + +It is unlikely that you will ever write a Texinfo file that is only +intended as an on-line Info file and not as a printable document. However, +Texinfo is flexible enough so that you can do this if you wish. + +Although a Texinfo file can be structured in a variety of ways, it is +usually structured like a book with chapters, sections, subsections and the +like. This structure can also be visualized as a tree (or rather as an +upside down tree) with the root at the top and each level corresponding to +chapters or sections or whatnot. In Info format, you reach the nodes on +each level by using the the `Next' and `Previous' pointers in the node +line. For example, you go from one chapter to the next or previous chapter +by using the the pointers to the next and previous chapters. In Info, you +go the level above by using an `Up' pointer and you go to the level below +through a `Menu'. In the printed manual, cross references are indicated by +page and section numbers; in the on-line file, cross references are +specified by inline menu items. + +@group +Here is a diagram that shows a Texinfo file with three chapters; +each chapter has two sections. + +@example + top + | + | + --------------------------------------------- + | | | + | | | + Chapter 1 Chapter 2 Chapter 3 + | | | + | | | + ---------- ---------- ---------- + | | | | | | + Sect. 1.1 Sect. 1.2 Sect. 2.1 Sect. 2.2 Sect. 3.1 Sect. 3.2 + +@end example +@end group + +In this structure, the node for Chapter 2 looks like this: + +@example +@@node Chapter 2, Chapter 3, Chapter 1, top +@@comment node-name, next, previous, up +@end example + +To get to Sections 2.1 and 2.2, you need a menu inside of Chapter 2 that +says: + +@example + @@menu + * Sect. 2.1:: Description of this section. + * Sect. 2.2:: + @@end menu +@end example + +@noindent +This menu is located inside Chapter 2, after the beginning of the chapter, +just before Section 2.1. + +Note that a menu entry has three parts: the menu item name, the name of the +node and, optionally, a description of the item (in that order). If the +menu item name and the name of the node are the same, you can put two +colons after the item name, as is shown in the example. (If the second part +is different from the first, the first part is terminated by a colon and +the second part terminated by a tab, newline, comma or period.) +(@xref{Menu}.) + +The node for Sect. 2.1 will look like this: + +@example + @@node Sect. 2.1, Sect. 2.2, , Chapter 2 + @@comment node-name, next, previous, up +@end example + +This node does not have a `Previous' node. + + +Usually, an @code{@@node} command and a chapter structuring command are +used in sequence, along with indexing commands. For example, the node for +the chapter on ending a file looks like this: + +@group +@example +@@node Ending a File, Structuring, Beginning a File, Top +@@comment node-name, next, previous, up +@@chapter Ending a Texinfo File +@@cindex Ending a Texinfo file +@@cindex Texinfo file ending +@@cindex File ending +@end example +@end group + +The chapter structuring commands fall into four groups that have the +characteristics of chapters, sections, subsections and subsubsections. +The groups are: + +@group +@table @code +@item @@chapter +@itemx @@unnumbered +@itemx @@appendix +For chapters and chapter-like parts of a document. + +@item @@section +@itemx @@unnumberedsec +@itemx @@appendixsec +For sections and section-like parts of a document. + +@item @@subsection +@itemx @@unnumberedsubsec +@itemx @@appendixsubsec +For subsections and subsection-like parts of a document. + +@item @@subsubsection +@itemx @@unnumberedsubsubsec +@itemx @@appendixsubsubsec +For subsubsections and subsubsection-like parts of a document. +@end table +@end group + +In the sections that follow, the chapter structuring commands are described +first and then the @code{@@node} and @code{@@menu} commands. + +@menu +* Chapter:: +* Unnumbered and Appendix:: +* Section:: +* Subsection:: +* Subsubsection:: +* Node:: +* Menu:: +@end menu + +@node Chapter, Unnumbered and Appendix, , Structuring +@comment node-name, next, previous, up +@section @@chapter +@findex chapter + +@code{@@chapter} identifies a chapter in the document. It is followed by a +single argument which is the rest of the line, as in + +@example +@@chapter Node and Chapter Structuring +@end example + +In @TeX{}, it creates a chapter in the document, specifying the chapter +title. + +In the Info file, @code{@@chapter} causes its argument to appear on a line +by itself, with a line of asterisks inserted underneath. Thus, the above +example produces the following output:@refill + +@example +Node and Chapter Structuring +**************************** +@end example + +@node Unnumbered and Appendix, Section, Chapter, Structuring +@comment node-name, next, previous, up +@section @@unnumbered, @@appendix +@findex unnumbered +@findex appendix + +These commands are equivalent to @code{@@chapter} for Info file output. +(@xref{Chapter}.) In a printed manual, they generate chapters that are +numbered differently in the table of contents. @code{@@unnumbered} +chapters appear without chapter numbers of any kind, and @code{@@appendix} +chapters are given a letter instead of a number. + +@node Section, Subsection, Unnumbered and Appendix, Structuring +@comment node-name, next, previous, up +@section @@section +@findex section + +@code{@@section} is like @code{@@chapter} except that in @TeX{} it makes a +section rather than a chapter. (@xref{Chapter}.) Sections go within +chapters. In the Info file, @code{@@chapter} and @code{@@section} differ +only in that @code{@@section} underlines with @samp{=}. For example,@refill + +@example +This is a section +================= +@end example + +@section @@unnumberedsec, @@appendixsec +@findex unnumberedsec +@findex appendixsec + +Use these constructs for sections within chapters made by +@code{@@unnumbered} or @code{@@appendix}. (@xref{Section}.)@refill + +@node Subsection, Subsubsection, Section, Structuring +@comment node-name, next, previous, up +@section @@subsection +@findex subsection + +Subsections are to sections as sections are to chapters. (@xref{Section}.) +They are underlined with @samp{-}. For example,@refill + +@example +This is a subsection +-------------------- +@end example + +@section @@unnumberedsubsec, @@appendixsubsec +@findex unnumberedsubsec +@findex appendixsubsec + +Use these constructs for subsections within sections within chapters made +by @code{@@unnumberedsec} or @code{@@appendixsec}. (@xref{Subsection}.)@refill + +@node Subsubsection, Node, Subsection, Structuring +@comment node-name, next, previous, up +@section @@subsubsection And Other Subsection Commands +@findex unnumberedsubsubsec +@findex appendixsubsubsec +@findex subsubsection + +Subsubsections are to subsections as subsections are to sections. +(@xref{Subsection}.) They are underlined with periods. The equivalent +commands for @code{@@unnumberedsubsec} and @code{@@appendixsubsec} are +@code{@@unnumberedsubsubsec} and @code{@@appendixsubsubsec}. For +example,@refill + +@example +This is a subsubsection +....................... +@end example + + +@node Node, Menu, Subsubsection, Structuring +@comment node-name, next, previous, up +@section @@node + +@code{@@node} defines the beginning of a new node in the Info output file +(@inforef{Top, info, info}.). It is followed by four arguments, separated +by commas, that make up the rest of the line. Since it is often hard to +remember the order in which are arguments are listed, @code{texinfo-mode} +provides the @kbd{C-c C-c n} command (@code{texinfo-insert-@@node}) which +automatically inserts a comment line listing the arguments. For +example,@refill + +@example +@@node Texinfo Mode, Beginning a File, Overview, Top +@@comment node-name, next, previous, up +@end example + +@noindent +defines a node named @samp{Texinfo Mode}, whose `Next' pointer is to node +@samp{Beginning a File}, whose `Previous' pointer is to node +@samp{Overview}, and whose `Up' pointer is to node @samp{Top}. What this +means is that Texinfo changes @w{@code{@@node @var{args}}} into the special +text string necessary to separate Info nodes and to identify the node that +is starting and say what nodes it points to.@refill + +The pointer names should be the names of nodes defined elsewhere. For this +example, nodes named @samp{Beginning a File}, @samp{Overview} and +@samp{Top} should be defined elsewhere in the file with other @code{@@node} +commands. It does not matter whether they are before or after the node +that refers to them.@refill + +Normally, a node's `Up' pointer should point at the node whose menu +mentions that node. The node's `Next' pointer should point at the node +that follows that node and its `Previous' pointer should point at the node +that precedes it in that menu.@refill + +In @TeX{}, @code{@@node} is nearly ignored. It generates no text. Its +only function is to identify the name to use for cross-references to the +chapter or section which follows the @code{@@node} command and which which +makes up the body of the node. (Cross references are made with +@code{@@xref}. @xref{Cross References}.)@refill + +@code{@@node} should be followed immediately by a chapter-structuring +command such as @code{@@chapter}, @code{@@section}, @code{@@subsection} or +@code{@@subsubsection}.@refill + +The easiest way to write a node is to use the Texinfo mode keyboard command +@kbd{C-c C-c n} to insert @samp{@@node} and a comment line listing the +names of each of the pointers in their proper order. This way you won't +lose track of which arguments are for which pointers. The template is +especially useful if you are not familiar with Texinfo. It is important to +pick a suitable node name. Generally, these begin with an uppercase letter +as if the node name were a heading for a chapter or section. Do not use +any of the Texinfo @@-commands in the name; these commands confuse Info. +The node name should be informative. Unfortunately, long names will not +fit onto the line, which can be awkward. Sometimes it is better to use +long but informative names rather than short ones. + +Some people insert the names of the `Next', `Previous' and `Up' pointers at +the same time they insert the node's own name. This is because it is +easier to keep track of the node structure as you create a document than it +is to sort it out after you have dozens of nodes. Others wait to insert +the `Next', `Previous' and `Up' pointers until they have a nearly final +version of the document. This is because they expect to change the +organization of the document while they write it and insert or delete +sections and move them around. The command @code{texinfo-show-structure} +can be used to find the `Next', `Previous' and `Up' pointers of a node. +(See @xref{Using texinfo-show-structure}.) + +However you do it, it is best to name the node whenever you write the +section so you can easily make cross references to the section. A large +number of cross references are an especially important feature of a good +Info file. + +After you have inserted the node-line, you should immediately write an +@@-command for the chapter or section and insert its name. Next, (and this +is important!), put in several index entries. Usually, you will find at +least two and often as many as four or five ways of referring to the node +in the index. Use them all. This will make it much easier for people to +find the node.@refill + +The top node of the file, named @samp{Top}, should have as its parent the +name of a node in another file, where there is a menu that leads to this +file. Specify the file name in parentheses. If the file is to be +installed directly in the Info directory file, use @samp{(dir)} as the +parent of the top node; this is short for @samp{(dir)top}, the node @samp{top} +in the file @file{dir}, which is the main menu of Info. For example,@refill + +@example +@@node Top, Overview, (dir), (dir) +@@comment node-name, next, previous, up +@end example + +For more information about installing an Info file in the @file{info} +directory, @pxref{Installing an Info File} + +@node Menu, , Node, Structuring +@comment node-name, next, previous, up +@section @@menu +@cindex Menus +@findex menu + +Info file nodes can contain @dfn{menus} which point to other nodes. You +must type the menus in by hand, and surround them with lines containing +@code{@@menu} and @code{@@end menu}. In Info, the @code{@@menu} line +changes into @samp{* Menu:}, which indicates the beginning of a menu to the +Info program. Otherwise, the contents are unchanged by Texinfo, except for +the processing of any other @@-commands within. The entire menu construct +has no effect in the printed manual and will not appear there.@refill + +By convention, a menu is put at the end of a node. This way, it is easy +for someone using Info to find the menu, using the @kbd{M->} +(@code{end-of-buffer}) command. + +In a menu, every line that begins with a @samp{*} lists a single topic. A +line that does not start with a @samp{*} will also appear in the menu and +can be used as a comment. + +A menu item has three parts: + +@enumerate +@item +The menu item name. + +@item +The name of the node. + +@item +A description of the item. +@end enumerate + +@noindent +Only the first part is required. This part is the name of the topic---the +name of the menu item that the user must give to the @kbd{m} command to +select this topic when using Info. The first part comes right after the +asterisk and a space, and is followed by a colon, spaces and tabs, and then +the name of the node which discusses that topic. The name of the node is +terminated by a tab, comma, newline or period. If the node name and topic +name are the same, rather than give the name twice, put two colons after +the name instead. For example, @samp{* Name::}. (You should do this +whenever possible, since it reduces visual clutter in the menu). + +If the second part is present, it may be terminated with a tab, comma, or +newline; or with a period. + +For example,@refill + +@group +@example +@@menu +A Section on Foo and Switches +* Foo:: The node named Foo tells you how to go fooing. +* Sw: Switches. Type @@code@{m Sw@} to see node @@code@{Switches@} + which describes the switches available here. +@@end menu +@end example +@end group + +@noindent +produces + +@group +@example +* menu: + +A Section on Foo and Switches +* Foo:: The node named foo tells you how to go fooing. +* Sw: Switches. Type `m Sw' to see node `Switches' + which describes the switches available here. +@end example +@end group + +In this example, the menu has two items. @samp{Foo} is both a menu item +name and the name of the node referred to by that item. @samp{Sw} is the +other menu item name, and it refers to the node named @samp{Switches}. +Since no file name is specified with @samp{Foo} or @samp{Switches}, they +must be the names of other nodes in the same Info file. + +Nodes in other Info files can be referred to by putting the file name in +parentheses at the beginning of the node name. For example, + +@example +@@menu +* Outlining: (emacs) Outline Mode. The major mode for editing outlines. +* Rebinding: (emacs) Rebinding. How to redefine the meaning of a key. +@@end menu +@end example + +@noindent +When this is done, the item has to have at least two parts: the first part +is the menu item name and the second part is the name of the node. + +@node Quotations and Examples, Lists and Tables, Structuring, Top +@comment node-name, next, previous, up +@chapter Making Quotations and Examples +@cindex Quotations +@cindex Examples + +Quotations and examples are blocks of text, consisting of one or more whole +paragraphs that are set off from the bulk of the text and treated +differently. They are usually indented. + +In Texinfo, an insertion is always begun by writing an @@-command on a line +by itself, and ended by writing an @code{@@end} command that is also on a +line by itself. For instance, an @dfn{example} is a kind of insertion that +is begun with @code{@@example} and ended with @code{@@end example}.@refill +@findex end + +There are three commands for quotations and examples: + +@table @code +@item @@quotation +Used to indicated text that is quoted.@refill + +@item @@example +Used to illustrate code, commands and the like in a fixed width font +without filling.@refill + +@item @@display +Used for illustrative text. +@end table + +@menu +* Quotation:: +* Example:: +* Display:: +@end menu + +@node Quotation, Example, , Quotations and Examples +@comment node-name, next, previous, up +@section @@quotation +@cindex Quotations +@findex quotation + +@code{@@quotation} is used to indicate text that is excerpted from another +(real or hypothetical) printed work. The inside of a quotation is +processed normally except that + +@enumerate +@item +The margins are narrower. +@item +Paragraphs are not indented. +@item +Interline spacing and interparagraph spacing are reduced. +@end enumerate + +Thus, the input + +@example +@@quotation +This is +a foo. +@@end quotation +@end example + +@noindent +produces in the printed manual + +@quotation +@quotation +This is a foo. +@end quotation +@end quotation + +@noindent +and in the Info file + +@quotation +@example +This is +a foo. +@end example +@end quotation + +@node Example, Display, Quotation, Quotations and Examples +@comment node-name, next, previous, up +@section @@example +@cindex Examples +@findex example + +@code{@@example} is used to indicate an example that is not part of the +running text. In the printed manual, this is done by switching to +a fixed width font, turning off filling, and making extra spaces +and blank lines significant. In the Info file, an analogous result +is obtained by indenting each line with five extra spaces. + +@code{@@example} should appear on a line by itself; this line will +disappear from the output. Mark the end of the example with a line +containing @code{@@end example}, which will likewise disappear. For +example:@refill + +@example +@@example +mv foo bar +@@end example +@end example + +@noindent +produces + +@example +mv foo bar +@end example + +Since the lines containing @code{@@example} and @code{@@end example} will +disappear, you will want to put a blank line before the @code{@@example} and +another blank line after the @code{@@end example}. (Remember that blank +lines between the beginning @code{@@example} and the ending @code{@@end +example} will appear in the output.)@refill + +Don't use tabs in lines of an example! @TeX{} has trouble with tabs: it +treats them like single spaces, and that is not what they look like. + +@node Display, , Example, Quotations and Examples +@comment node-name, next, previous, up +@section @@display +@cindex Display +@findex display + +@code{@@display} is just like @code{@@example} except that, in the +printed manual, @code{@@display} does not select the fixed-width font. +In fact, it does not specify the font at all, so that the text appears +in the same font it would have appeared in without the @code{@@display}.@refill + + +@node Lists and Tables, Cross References, Quotations and Examples, Top +@comment node-name, next, previous, up +@chapter Making Lists and Tables +@cindex Making lists and tables +@cindex Lists and tables, making them +@cindex Tables and lists, making them + +Texinfo has several ways of making lists and two-column tables. Lists can +be bulleted or numbered while two-column tables can highlight the items in +the first column. + +For example, this is an enumerated list: + +@enumerate +@item +This is a numbered item. + +@item +This is the second item in this list. + +@item +This is the third item on this list. +@end enumerate + +Texinfo will automatically indent the text in lists or tables and number an +enumerated list. This last feature is useful if you are reordering the +list, since you do not have to renumber it yourself. + +Lists or tables are always begun by an @@-command on a line by itself and +ended with an @code{@@end} command on a line by itself. For example, an +enumerated list begins with the command @code{@@enumerate} and ends with +the command @code{@@end enumerate}; and an itemized list begins with the +command @code{@@itemize} and ends with the command @code{@@end +itemize}.@refill +@findex end + +The elements of a list are begun with the @code{@@item} command. + +Here is an itemized list of the different kinds of table and lists: + +@itemize @bullet +@item +Itemized lists with or without bullets. + +@item +Numbered lists. + +@item +two-column tables with highlighting. +@end itemize + +@menu +* Itemize:: +* Enumerate:: +* Table:: +@end menu + +@node Itemize, Enumerate, , Lists and Tables +@comment node-name, next, previous, up +@section @@itemize +@cindex Itemize +@findex itemize + +@code{@@itemize} is used to produce sequences of indented paragraphs, with +a mark inside the left margin at the beginning of each paragraph. The rest +of the line that starts with @code{@@itemize} should contain the character +or Texinfo commands to generate such a mark. Usually, it is the @@-command +@code{@@bullet}. Whatever mark you choose, ultimately, it should result in +a single character in the Texinfo file, or the indentation will come out +wrong. When you write the command, omit the @samp{@{@}} after the command +if you use just one command and nothing else. + +The text of the indented paragraphs themselves come after the @code{@@itemize}, +up to another line that says @code{@@end itemize}. + +Before each paragraph for which a mark in the margin is desired, place a +line that says just @code{@@item}. Don't put any other text on this line. +@findex item + +Info indents the lines in an itemized list by five columns, but it does not +fill them. This can produce lines in the Info file that are too wide. You +can either write shorter lines in the Texinfo file by setting the fill +column to five columns less than it is normally, or else you can tell Info +to refill the paragraphs by adding the @@-command @code{@@refill} to the +end of the paragraph. (@xref{Refill}, for more information about the use of +the @code{@@refill} command.) + +Usually, you should put a blank line before an @code{@@item}. This puts a +blank like in the Info file. Except when the entries are very brief, a +blank line looks better. + +Here is an example of the use of @code{@@itemize}, followed by the output +it produces. Note that @code{@@bullet} produces a @samp{*} in Texinfo and +a round dot in @TeX{}. + +@group +@example +@@itemize @@bullet +@@item +Some text for foo. + +@@item +Some text +for bar. +@@end itemize +@end example +@end group + +@noindent +produces + +@group +@quotation +@itemize @bullet +@item +Some text for foo. + +@item +Some text +for bar. +@end itemize +@end quotation +@end group + +@node Enumerate, Table, Itemize, Lists and Tables +@comment node-name, next, previous, up +@section @@enumerate +@cindex Enumerate +@findex enumerate + +@code{@@enumerate} is like @code{@@itemize} except that the marks in the +left margin contain successive integers starting with 1. (@xref{Itemize}.) +Do not put any argument on the same line as @code{@@enumerate}.@refill + +@group +@example +@@enumerate +@@item +Some text for foo. +@@item +Some text +for bar. +@@end enumerate +@end example +@end group + +@noindent +produces + +@quotation +@enumerate +@item +Some text for foo. +@item +Some text +for bar. +@end enumerate +@end quotation + +If you want, you can put a blank line between the entries in the list. +This often makes it easier to read the Info file. For example, + + +@group +@example +@@enumerate +@@item +This is the first item. + +@@item +This is the second item. +@@end enumerate +@end example +@end group + +@ifinfo +Info indents the lines of the enumerated list by five columns, but it does +not fill them. As a result, the lines in the Info file may be too wide. +To prevent this, you can either write shorter lines in the Texinfo file +file by setting the fill column to five columns less than it is normally, +or else you can tell Info to refill the paragraphs by adding the @@-command +@code{@@refill} to the end of the paragraph. (@xref{Refill}, for more +information about the use of the @code{@@refill} command.) +@end ifinfo + +@iftex +Info indents the lines of the enumerated list by five columns, but it does +not fill them, just as it does with an itemized list. You may want to use +shorter lines for text within an enumerated list or use the @code{@@refill} +command at the end of the paragraph. (@xref{Refill}, for more information +about the use of the @code{@@refill} command.) +@end iftex + +@node Table, , Enumerate, Lists and Tables +@comment node-name, next, previous, up +@section @@table +@cindex Tables, making two-column +@findex table + +@code{@@table} is similar to @code{@@itemize}, but allows you to specify a +name or heading line for each item. (@xref{Itemize}.) The command is used +to produce two-column tables, and is especially useful for glossaries and +explanatory exhibits.@refill + +You must follow each use of @code{@@item} inside of @code{@@table} with +text to serve as the heading line for that item. This text is put on the +same line as the @code{@@item} command. Each heading line is put into the +first column of the table and the supporting text, which you put on the line +following the line beginning with @code{@@item}, goes into the second +column.@refill +@findex item + +Also, @code{@@table} itself must be followed by an argument that is a +Texinfo command such as @code{@@code}, @code{@@var}, @code{@@kbd} or +@code{@@asis}. Although these commands are usually followed by arguments +in braces, in this case you use the command name without an argument. +(@code{@@item} supplies the argument.) This command will be applied to +the text that goes into the first column of each item and determines how it +will be highlighted. For example, @code{@@samp} will cause the text in the +first column to be highlighted as if it were acted on by an @code{@@samp} +command.@refill + +@code{@@asis} is a command that does nothing; in that case, each item will +come out without highlighting, unless that particular piece of text +contains @@-commands for highlighting.@refill + +(Various other command names might work with @code{@@table}. However, only +commands that normally take arguments in braces may be used.)@refill + +@ifinfo +Usually, you should put a blank line before an @code{@@item}. This puts a +blank like in the Info file. Except when the entries are very brief, a +blank line looks better. +@end ifinfo + +The following table, for example, highlights the text in the first column +as if each item were acted on by an @code{@@samp} command:@refill + +@example +@@table @@samp +@@item foo +This is the text for +@@samp@{foo@}. + +@@item bar +Text for @@samp@{bar@}. +@@end table +@end example + +@noindent +produces + +@quotation +@table @samp +@item foo +This is the text for +@samp{foo}. +@item bar +Text for @samp{bar}. +@end table +@end quotation + +Info indents the lines of text in the second column, but does not fill +them. As a result, the lines in the Info file may be too wide. To prevent +this, cause Info to refill the paragraphs after processing by adding the +@@-command @code{@@refill} to the end of the paragraph. (@xref{Refill}, for +more information about the use of the @code{@@refill} command.) + +If you want to list two or more named items with a single block of text, +use the @code{@@itemx} command. + +@menu +* Itemx:: +@end menu + +@node Itemx, , Table, Table +@comment node-name, next, previous, up +@subsection @@itemx +@cindex Itemx +@findex itemx + +@code{@@itemx} is used inside a @code{@@table} when you have two or more +named items for the same block of text. Use @code{@@itemx} for all but the +first of the items. It works exactly like @code{@@item} except that it +does not generate extra vertical space above the item text. +For example,@refill + +@example +@@table @@code +@@item upcase +@@itemx downcase +These two functions accept a character or a string as argument, +and return the corresponding upper case (lower case) character +or string. @@refill +@@end table +@end example + +@noindent +produces + +@quotation +@table @code +@item upcase +@itemx downcase +These two functions accept a character or a string as argument, +and return the corresponding upper case (lower case) character +or string. @refill +@end table +@end quotation + +A more complicated example of the use of @code{@@itemx} comes from the +chapter on structuring commands. Here is how the list showing how +the chapter structuring commands fall into four groups was constructed. +(@xref{Structuring, , Chapter Structuring Commands}.) + +@group +@example +@@table @@code +@@item @@@@chapter +@@itemx @@@@unnumbered +@@itemx @@@@appendix +For chapters and chapter-like parts of a document. + +@@item @@@@section +@@itemx @@@@unnumberedsec +@@itemx @@@@appendixsec +For sections and section-like parts of a document. + +@@item @@@@subsection +@@itemx @@@@unnumberedsubsec +@@itemx @@@@appendixsubsec +For subsections and subsection-like parts of a document. + +@@item @@@@subsubsection +@@itemx @@@@unnumberedsubsubsec +@@itemx @@@@appendixsubsubsec +For subsubsections and similar parts of a document. +@@end table +@end example +@end group + +@noindent +and this is what the resulting table looks like: + + +@table @code + +@item @@chapter +@itemx @@unnumbered +@itemx @@appendix +For chapters and chapter-like parts of a document. + +@item @@section +@itemx @@unnumberedsec +@itemx @@appendixsec +For sections and section-like parts of a document. + +@item @@subsection +@itemx @@unnumberedsubsec +@itemx @@appendixsubsec +For subsections and subsection-like parts of a document. + +@item @@subsubsection +@itemx @@unnumberedsubsubsec +@itemx @@appendixsubsubsec +For subsubsections and similar parts of a document. +@end table + + +Also, either column of a table can be empty. + +@node Cross References, Formatting Paragraphs, Lists and Tables, Top +@comment node-name, next, previous, up +@chapter Making Cross References +@cindex Making cross references +@cindex Cross references +@cindex References + +Cross references are used to refer the reader to other parts of the same or +different Texinfo files. In Texinfo, @dfn{nodes} are the points to which +cross-references can refer. + +In general, a document should be designed so that it can be read +sequentially. People soon tire of flipping back and forth to find +information that should be presented to them as they need it. However, +there will be information (often too detailed for whatever the current +context may be) that is related to whatever is presented and to which +reference should be made. More important, in an on-line help system or in +a reference manual, readers do @emph{not} read everything in sequence from +beginning to end. Instead, they look up what they need. For this reason, +such creations should contain many cross references to help the reader find +other information that he or she may not have read. + +Although nodes are not a fundamental concept in a printed manual, they +still serve to define a cross-reference point and the variants of +@code{@@xref} still serve to make references. Thus, if you are writing a +manual that will only be printed, and will not be used on-line, you +continue to use the @code{@@node} command for when you make cross +references. + +There are several kinds of cross reference command. + +@table @code +@item @@xref +Used to start a sentence in the printed manual saying, `See @dots{}' @* +or an entry in the Info file saying @samp{*note @dots{}}. + +@item @@pxref +Used to make a reference that starts with a lowercase @samp{see} @* +and is usually contained within parentheses.@refill + +@item @@inforef +Used to make a reference to an Info file for which there is no printed +manual.@refill +@end table + +@menu +* Xref:: +* Pxref:: +* Inforef:: +@end menu + + +@node Xref, Pxref, Cross References, Cross References +@comment node-name, next, previous, up +@section @@xref +@cindex Xref for cross references +@findex xref +@cindex Cross references using xref + +@code{@@xref} generates a cross-reference. In Texinfo, it turns into +an Info cross-reference which the Info @samp{f} command can use +to go directly to another node. In @TeX{}, it turns into a sentence +of the form + +@example +See section @var{section} [@var{topic}], page @var{page} +@end example + +@noindent +but does not generate a period to end it. + +@code{@@xref} must refer to an Info node created by @code{@@node}, by the +node's name. + +@code{@@xref} is followed by an argument inside braces; but actually the +text inside the braces is treated as several arguments, separated by +commas. Whitespace after these commas is ignored. A period or comma +@strong{must} follow the closing brace of an @code{@@xref}. It is required +to terminate the cross reference. This period or comma will appear in the +output, both in the Info file and in the printed manual. + +The simplest form of @code{@@xref} takes one argument, the name of another +node in the same Info file. Here we show the input text, followed by a +blank line and then the output text for Info files and the output text for +printed manuals. + +@example +@@xref@{node-name@}, for more info. + +*note node-name::, for more info. +@end example + +@quotation +See section @var{nnn} [node-name], page @var{ppp}, for more info. +@end quotation + +With two arguments, the second one is used as the name of the Info +cross-reference, while the first argument is still the node that the +cross-reference points to: + +@example +@@xref@{node-name, name-for-note@}, for more info. + +*note name-for-note: node-name, for more info. +@end example + +@quotation +See section @var{nnn} [node-name], page @var{ppp}, for more info. +@end quotation + +A third argument replaces the node name when it actually appears in the +@TeX{} output. It should state the topic discussed by the section being +referenced. Often, you will want to use initial uppercase letters so it +will be easier to read when the reference is printed. Use a third argument +when the node name is unsuitable because of syntax, grammar or diction. + +@example +@@xref@{node-name, name-for-note, Topic Description@}, for more info. + +*note name-for-note: node-name, for more info. +@end example + +@quotation +See section @var{nnn} [Topic Description], page @var{ppp}, for more info. +@end quotation + +If a third argument is given and the second one is empty, +then the third argument serves both purposes: + +@example +@@xref@{node-name, , Topic Description@}, for more info. + +*note Topic Description: node-name, for more info. +@end example + +@quotation +See section @var{nnn} [Topic Description], page @var{ppp}, for more info. +@end quotation + +A fourth argument specifies the name of the Info file in which the +referenced node is located, assuming it is not the one in which the +reference appears. @code{@@xref} with only four arguments is used when the +reference is not within one Info file, but is within a single printed +manual---when multiple Texinfo files are incorporated into the same @TeX{} +run but make separate Info files. (This is seldom the case and usually you +will use five arguments if you are making a reference that is outside the +current Info file.) + +@example +@@xref@{node-name, name-for-note, Topic, info-file-name@}, +for more info. + +*note name-for-note: (info-file-name) node-name, for more info. +@end example + +@quotation +See section @var{nnn} [Topic], page @var{ppp}, for more info. +@end quotation + +A fifth argument is used when you are making a reference to another Info +file which is also part of another printed manual. Write the title of the +manual in this slot. Since a different manual is made during a different +@TeX{} run, the printed reference will not have a page number. + +@noindent +Whenever you refer to another manual, use this version of @code{@@xref} +with five arguments. + +@example +@@xref@{node-name, name-for-note, Topic, info-file-name, A Printed Manual@}, +for more info. + +*note name-for-note: (info-file-name) node-name, for more info. +@end example + +@quotation +See section Topic of @i{A Printed Manual}, for more info. +@end quotation + +@noindent +The name of the printed manual will be typeset in italics. + +Often, you will leave out the second argument when you use the long version +of @code{@@xref}. In this case, the third argument, the topic description, +will replace the node name: + + +@example +@@xref@{node-name, , Topic Description, info-file-name, A Printed Manual@}, +for more info. + +*note Topic Description: (info-file-name) node-name, for more info. +@end example + +@quotation +See section Topic Description of @i{A Printed Manual}, for more info. +@end quotation + + +@node Pxref, Inforef, Xref, Cross References +@comment node-name, next, previous, up +@section @@pxref +@cindex Cross references using pxref +@cindex Pxref for cross references +@findex pxref + +@code{@@pxref} is nearly the same as @code{@@xref}; it differs in only +two ways: + +@enumerate +@item +The output starts with lower case `see' rather than `See'.@refill +@item +A period is generated automatically in the Info file output to end the Info +cross-reference, but no period is generated for the printed manual.@refill +@end enumerate + +The purpose of @code{@@pxref} is to be used inside parentheses as part of +another sentence. In the printed manual, no period is needed after the +cross reference text itself (within the parentheses), but a period is +needed after the cross reference text in the Info file because only thus +can Info recognize the end of the cross-reference. @code{@@pxref} spares +you the need to use complicated methods to put a period into one form of +the output and not the other. + +@code{@@pxref} can be used with up to five arguments just like +@code{@@xref}. (@xref{Xref}.)@refill + +@node Inforef, , Pxref, Cross References +@comment node-name, next, previous, up +@section @@inforef +@cindex Inforef for cross references +@cindex Cross references using inforef +@findex inforef + +@code{@@inforef} is used for cross-references to Info files for which there +are no printed manuals. Even in a printed manual, @code{@@inforef} +generates a reference directing the user to look in an Info file. +@code{@@inforef} takes exactly three arguments. The syntax is +@code{@@inforef@{@var{node}, @var{name}, @var{file}@}}. + +@example +@@inforef@{node-name, name-for-note, info-file-name@}, for more information. + +*note name-for-note: (info-file-name) node-name, for more information. +@end example + +@quotation +See Info file @file{info-file-name}, node `node-name', for more information. +@end quotation + +@node Formatting Paragraphs, Marking Text, Cross References, Top +@comment node-name, next, previous, up +@chapter Formatting Paragraphs +@cindex Formatting paragraphs +@cindex Paragraphs, formatting + +Usually, a Texinfo file will be processed both by @TeX{} and by the +@kbd{M-x texinfo-format-buffer} command. Consequently, you must make sure +that text will come out looking right both in the printed manual and in the +on-line help.@refill + +For example, unless told otherwise, @kbd{M-x texinfo-format-buffer} will +not refill a paragraph after processing it although @TeX{} will. This +means that a paragraph with numerous or large @@-commands may not look +properly filled after processing by Info. The @@-commands are removed from +the text but the lines are not refilled so some are much shorter than they +were. To cause the @kbd{M-x texinfo-format-buffer} command to refill such +a paragraph, put @code{@@refill} at the end of the paragraph.@refill + +@TeX{} may also format a document improperly. For example, page breaks may +occur in the ``wrong place''; to control this, text can be held together by a +group command that keeps the text within the group from being split across +two pages. + +@iftex +The first section that follows is about refilling and preventing +indentation; the second section is about line and paragraph breaks, +creating blank lines, and grouping text. +@end iftex + +@menu +* Refilling & Noindent:: Refilling paragraphs & preventing indentation +* Breaks Blank-Lines Groups:: Line and paragraph breaks, blank lines, grouping +@end menu + +@node Refilling & Noindent, Breaks Blank-Lines Groups, Formatting Paragraphs, Formatting Paragraphs +@comment node-name, next, previous, up +@section Refilling Paragraphs and Preventing Indentation +@cindex Refilling paragraphs automatically +@cindex Preventing indentation in the printed text + +The @code{@@refill} and @code{@@noindent} commands are used just after or +just before paragraphs which, after processing by either Info or @TeX{}, +might look bad. The @code{@@refill} command refills a paragraph in the +Info file after all the other processing has been done. In the printed +manual, the @code{@@noindent} command prevents a piece of text that is a +continuation of the preceding paragraph from being indented as if it were a +new paragraph.@refill + +@menu +* Refill:: Refilling an info paragraph after other processing. +* Noindent:: Preventing paragraph indentation in continuation text. +@end menu + +@node Refill, Noindent, Refilling & Noindent, Refilling & Noindent +@comment node-name, next, previous, up +@subsection @@refill +@findex refill + +If a paragraph contains sizable @@-constructs, it may look badly filled +after @code{texinfo-format-buffer} is through with it. + +Put @code{@@refill} at the end of the paragraph to tell +@code{texinfo-format-buffer} to refill the paragraph after finishing all +other processing on it. @code{@@refill} has no effect on @TeX{}, which +always fills everything that ought to be filled. For example,@refill + +@example +To use @@code@{foo@}, pass @@samp@{xx%$@} and @@var@{flag@} and type @@kbd@{x@} +after running @@code@{make-foo@}.@@refill +@end example + +@noindent +produces (in the Info file) + +@example +To use `foo', pass `xx%$' and FLAG and type `x' after running `make-foo'. +@end example + +@noindent +whereas without the @code{@@refill} it would produce + +@example +To use `foo', pass `xx%$' and FLAG and type `x' +after running `make-foo'. +@end example + +@noindent +with the line broken at the same place as in the Texinfo input file. + +Do not put a space before @code{@@refill}; otherwise the command might be +put at the beginning of the line when you refill the paragraph in the +Texinfo file with @kbd{M-q} (@code{fill-paragraph}). If this were to +happen, the @code{@@refill} command might fail to work + +@node Noindent, , Refill, Refilling & Noindent +@comment node-name, next, previous, up +@subsection @@noindent +@findex noindent + +If you have text following an @code{@@example} or other similar ``special +paragraph'' that reads as a continuation of the text before the +@code{@@example}, it is good to prevent this text from being indented as a +new paragraph. To accomplish this, put @code{@@noindent} on a line by +itself before the start of the text that should not be indented. For +example,@refill + +@example +@@example +This is an example +@@end example + +@@noindent +This line will not be indented. +@end example + +@noindent +produces + +@example +This is an example +@end example + +@noindent +This line will not be indented. + +To adjust the number of blank lines properly in the Info file output, +remember that the line containing @code{@@noindent} does not generate a +blank line, and neither does the @code{@@end example} line. + +In the Texinfo source file for this documentation, each of the lines that +says `produces' is preceded by a line containing @code{@@noindent}. + +@node Breaks Blank-Lines Groups, , Refilling & Noindent, Formatting Paragraphs +@comment node-name, next, previous, up +@section Breaks, Blank Lines and Groups + +Texinfo has several commands for making blank lines, for forcing paragraph +and page breaks in the printed manual and for preventing text from running +from one page to the next. + +@table @code +@item @@* +Force a line break in the printed manual. This +command has no effect on the Info file.@refill + +@item @@sp +Generate blank lines in both the printed manual and in the Info file.@refill + +@item @@br +Force a paragraph break in the printed manual. This command has no effect +on the Info file.@refill + +@item @@w +Prevent text from being split across two lines in the printed manual. This +command has no effect on the Info file.@refill + +@item @@page +Start a new page in the printed manual. This +command has no effect on the Info file.@refill + +@item @@group +Hold text together that must appear on one printed page. This +command has no effect on the Info file.@refill + +@item @@need +Start a new printed page if required space not on this one. This +command has no effect on the Info file.@refill +@end table + +@menu +* Line Breaks:: Force a line break in the printed manual. +* Sp:: Generate blank lines. +* Br:: Force a paragraph break in the printed manual. +* W:: Prevent a paragraph break in the printed manual. +* Page:: Start a new page in the printed manual. +* Group:: Hold text together that must appear on one printed page. +* Need:: Start a new printed page if required space not on this one. +@end menu + + +@node Line Breaks, Sp, Breaks Blank-Lines Groups, Breaks Blank-Lines Groups +@comment node-name, next, previous, up +@subsection @@* +@findex asterisk +@findex * +@cindex Line breaks +@cindex Breaks in a line + + +@code{@@*} forces a line break in the printed manual. It has no effect on +the Info file output, where line breaks follow those in the source file. +If you want a line break at a certain spot in both forms of output, break +the line there in the source file and put @code{@@*} at the end of the +line. + + +@node Sp, Br, Line Breaks, Breaks Blank-Lines Groups +@comment node-name, next, previous, up +@subsection @@sp +@findex sp (line spacing) +@cindex Spaces from line to line +@cindex Line spacing + +A line containing @code{@@sp @var{n}} generates @var{n} blank lines of +space in either the printed manual or the Info file. For example, + +@example +@@sp 2 +@end example + +@noindent +generates two blank lines. + +@node Br, W, Sp, Breaks Blank-Lines Groups +@comment node-name, next, previous, up +@subsection @@br +@findex br (paragraph breaks) +@cindex Paragraph breaks +@cindex Breaks in a paragraph + +In a printed manual, a line containing @code{@@br} forces a paragraph +break; in the Info file output, it does nothing (not even a blank line +results from it). + +@node W, Page, Br, Breaks Blank-Lines Groups +@comment node-name, next, previous, up +@subsection @@w +@findex w (preventing a line break) +@cindex Line breaks, preventing + +In a printed manual, @code{@@w@{@var{text}@}} outputs @var{text} and prohibits +line breaks within @var{text}. @code{@@w} has no effect on the Info file +output; it is the same as would result from just @var{text}. + + +@node Page, Group, W, Breaks Blank-Lines Groups +@comment node-name, next, previous, up +@subsection @@page +@cindex Page breaks +@findex page + +A line containing @code{@@page} starts a new page in a printed manual. The +line has no effect on Info files since they are not paginated. + +@node Group, Need, Page, Breaks Blank-Lines Groups +@comment node-name, next, previous, up +@subsection @@group +@cindex Group +@cindex Holding text together vertically +@cindex Vertically holding text together +@findex group + +A line containing @code{@@group} begins an unsplittable vertical group, +which must appear entirely on one page. The group is terminated by a line +containing @code{@@end group}. These two lines produce no output of their +own, and in the Info file output they have no effect at all. + +If you forget to end a group, you may get strange and unfathomable error +messages when you run @TeX{}. This is because @TeX{} keeps trying to put +the rest of the Texinfo file into the group and error messages do not start +to get generated until @TeX{} has gone a long way. It's a good rule of +thumb to look for a missing @code{@@end group} if you get incomprehensible +error messages in @TeX{}. + +@node Need, , Group, Breaks Blank-Lines Groups +@comment node-name, next, previous, up +@subsection @@need +@cindex Need +@findex need + +A line containing @code{@@need @var{n}} starts a new page in a printed +manual if fewer than @var{n} mils (thousandths of an inch) remain on the +current page. The line has no effect on Info files since they are not +paginated.@refill + +@node Marking Text, Conditionals , Formatting Paragraphs, Top +@comment node-name, next, previous, up +@chapter Marking Text Within a Paragraph +@cindex Marking text within a paragraph + +In Texinfo, text within a paragraph can be marked in a variety of ways. +The most important way is to specify whether a word or phrase is a +definition, a metasyntactic variable, a literal example of a program or +what not. + +In addition, there are special commands for inserting single characters +that have special meaning in Texinfo, such as braces, and for inserting +symbols with special handling, such as dots and bullets. Finally, there +are ways to emphasize words. + +@menu +* Specifying:: Specifying commands, files and so on. +* Braces Atsigns Periods:: Inserting braces, @samp{@@} and periods. +* Dots Bullets Tex:: Inserting dots, bullets and the @TeX{} logo +* Emphasis:: Emphasizing text. +@end menu + +@node Specifying, Braces Atsigns Periods, , Marking Text +@comment node-name, next, previous, up +@section Specifying Definitions, Files, Commands etc. +@cindex Highlighting +@cindex Specifying commands, files and the like +@cindex Definitions, specifying them within text +@cindex Commands, specifying them within text +@cindex Files, specifying them within text + +Texinfo has a variety of commands for specifying just what kind of object a +piece of text refers to. Metasyntactic variables, for example, are marked +by one @@-command and code by another. Texinfo uses this information to +determine how to highlight the text. Since the pieces of text are labelled +by commands that tell what kind of object they are, it is easy to change +the way Texinfo formats and typesets such text. For example, code is +usually illustrated in a typewriter font, but it would be easy to change +the way Texinfo highlights code to use another font. This change would not +effect how metasyntatic variables are highlighted. If straight typesetting +commands were used in the body of the file, you would have to check every +single occurrence to make sure that you were changing code and not +something else that should not be changed. + +In addition, the commands can be used to generate useful information from +the file, such as lists of functions or file names. It is possible, for +example, to write code in Emacs Lisp (or a keyboard macro) to insert an +index entry after every paragraph that contains the text labelled by a +specified command. You could do this to construct an index of functions if +you had not already made the entries. + +The commands serve a variety of purposes: + +@table @code +@item @@code +Indicates text that is a literal example of a piece of a program.@refill + +@item @@samp +Indicates text that is a literal example of a sequence of characters.@refill + +@item @@file +Indicates the name of a file.@refill + +@item @@kbd +Indicates the names of keys on the keyboard or characters you type.@refill + +@item @@key +Used for the conventional name for a key on a keyboard.@refill + +@item @@ctrl +Indicates an ASCII control character. + +@item @@var +Indicates a metasyntactic variable. + +@item @@dfn +Indicates the introductory or defining use of a term. + +@item @@cite +Indicates the name of a book. +@end table + + + +@menu +* Code:: A literal example of a piece of a program. +* Samp:: A literal example of a sequence of characters. +* File:: The name of a file. +* Kbd:: The names of keys or else characters you type. +* Key:: The conventional name for a key on a keyboard. +* Ctrl:: Indicates the ASCII control character. +* Var:: A variable. +* Dfn:: The introductory or defining use of a term. +* Cite:: The name of a book. +@end menu + +@node Code, Samp, , Specifying +@comment node-name, next, previous, up +@subsection @@code +@findex code + +@code{@@code} is used to indicate text that is a piece of a program which +consists of entire syntactic tokens. The text follows, enclosed in braces. + +For example, @code{@@code} is used for an expression in a program, the name +of a variable or function used in a program, or a keyword. @code{@@code} +is not used for a piece of a token, such as when speaking about the +characters used in a token; for example, when you are explaining what +letters or printable symbols can be used in the names of functions. It is +also not used for input to programs unless the input is written in a +language that is like a programming language. For example, it is not used +for the single character commands of GNU Emacs although it is used for the +names of Emacs Lisp functions that the keyboard commands invoke. + +You should also @code{@@code} for command names in command languages that +resemble programming languages, such as Texinfo or the shell. Note, +however, that @code{@@code} is not used for options such as @samp{-c} when +such options stand alone. There is some argument as to whether an entire +shell command incorporating an option should be written using @code{@@code} +or @code{@@samp}.@refill + +It is an error to alter the case of a word inside an @code{@@code} +command. This is a particularly insidious error if the language being +documented is case sensitive. If the command is @code{printf}, then +@code{Printf} is a misspelling. If you do not like having such a command +with lower case at the beginning of a sentence, you may wish to rearrange +the sentence. + +In the printed manual, @code{@@code} puts the argument in bold face. +In the Info file, it uses `@dots{}' quotation. For example: + +@example +To compare two files, showing text inserted or removed, use @@code@{diff@}. +@end example + +@noindent +produces + +@quotation +To compare two files, showing text inserted or removed, use @code{diff}. +@end quotation + +@iftex +In the Info file, it looks like this: + +@example +@dots{}, use `diff' +@end example +@end iftex + +@node Samp, File, Code, Specifying +@comment node-name, next, previous, up +@subsection @@samp +@findex samp + +@code{@@samp} is used to indicate text that is a literal example of a +sequence of characters in a file, string, pattern, etc. The text follows, +enclosed in braces. The argument appears within `@dots{}' quotation in +both the Info file and the printed manual; in addition, it is printed in a +fixed-width font. + +@example +To match @@samp@{foo@} at the end of the line, use the regexp @@samp@{foo$@}. +@end example + +@noindent +produces + +@quotation +To match @samp{foo} at the end of the line, use the regexp @samp{foo$}. +@end quotation + +Any time you are referring to single characters, you should use @code{@@samp} +unless @code{@@kbd} is more appropriate. Basically, @code{@@samp} is a +catchall for whatever is not covered by @code{@@code}, @code{@@file}, +@code{@@kbd}. + +Punctuation marks that are part of the English text that surrounds the +strings you are specifying are @emph{never} included within the braces. In +the following sentence, for example, the commas and period are outside of +the braces: + +@example +A symbol name ends in @@samp@{a@}, @@samp@{b@}, or @@samp@{c@}. +@end example + +@node File, Kbd, Samp, Specifying +@comment node-name, next, previous, up +@subsection @@file +@findex file + +@code{@@file} is used to indicate text that is the name of a file or +directory. Currently, it is equivalent to @code{@@samp} in its effects on +the output. For example,@refill + +@example +The @@file@{.el@} files are in +the @@file@{/gnu/emacs/lisp@} directory. +@end example + +@noindent +produces + +@quotation +The @file{.el} files are in +the @file{/gnu/emacs/lisp} directory. +@end quotation + +@node Kbd, Key, File, Specifying +@comment node-name, next, previous, up +@subsection @@kbd +@findex kbd + +@code{@@kbd} is used much like @code{@@code}. The difference is that +@code{@@kbd} is for names of keys on the keyboard, or of characters you can +type. For example, to refer to the command @kbd{M-a}, you would use + +@example +@@kbd@{M-a@} +@end example + +@noindent +and to refer to @kbd{M-x shell}, you would use + +@example +@@kbd@{M-x shell@} +@end example + +The @code{@@kbd} command has the same effect as @code{@@code} in Info, +but may produce a different font in a printed manual.@refill + +You can embed another @@-command inside the braces of a @code{@@kbd} +command. This is the way to describe a command that would be described +more verbosely as ``press an @samp{r} and then press the @key{RET} key'': + +@example +@@kbd@{r @@key@{RET@}@} +@end example + +@noindent +This produces: @kbd{r @key{RET}} + +You also use the @code{@@kbd} command if you are spelling out the letters +you type; for example: + +@example +To give the @@code@{logout@} command, +type the characters @@kbd@{l o g o u t @@key@{RET@}@}. +@end example + +@noindent +This produces + +@quotation +To give the @code{logout} command, +type the characters @kbd{l o g o u t @key{RET}}. +@end quotation + +@node Key, Ctrl, Kbd, Specifying +@comment node-name, next, previous, up +@subsection @@key +@findex key + +@code{@@key} is used for the conventional name for a key on a keyboard, as +in + +@example +@@key@{RET@} +@end example + +Often, @code{@@key} is used within the argument of a @code{@@kbd} +command, whenever the sequence of characters to be typed includes one or +more keys that are described by name.@refill + +For example, to produce @kbd{C-x @key{ESC}} you would use + +@example +@@kbd@{C-x @@key@{ESC@}@} +@end example + + +The recommended names to use for keys are in upper case and are + +@table @t +@item SPC +Space. +@item RET +Return. +@item LFD +Linefeed. +@item TAB +Tab. +@item BS +Backspace. +@item ESC +Escape. +@item DEL +Delete. +@item SFT +Shift. +@item CTL +Control. +@item META +Meta. +@end table + +There are subtleties to handling words like `meta' or `ctrl' which are +names of shift keys. When mentioning a character in which the shift key is +used, such as @kbd{Meta-a}, use the @code{@@kbd} command alone without the +@code{@@key} command, but when you are referring to shift key in isolation, +use the @code{@@key} command. For example, you would use +@samp{@@kbd@{Meta-a@}} to produce @kbd{Meta-a} and @samp{@@key@{META@}} to +produce @key{META}. + +@node Ctrl, Var, Key, Specifying +@comment node-name, next, previous, up +@subsection @@ctrl +@findex ctrl + +@code{@@ctrl} is used to describe an ASCII control character. The pattern +of usage is @code{@@ctrl@{@var{ch}@}}, where @var{ch} is an ASCII character +whose control-equivalent is wanted. Thus, you put in an @samp{f} when +you want to indicate a @samp{control-f} + +Thus, to specify @samp{control-f}, you would enter + +@example +@@ctrl@{f@} +@end example + +@noindent +which produces + +@quotation +@ctrl{f} +@end quotation + +In the Info file, this generates the specified control character, output +literally into the file. This is done so a user can copy the specified +control character (along with whatever else he or she wants) into another +Emacs buffer and use it. Since the `control-h',`control-i', and +`control-j' characters are formatting characters, they should not be +indicated this way.@refill + +In a printed manual, this generates text to describe or identify that +control character: an uparrow followed by the character @var{ch}. + +@node Var, Dfn, Ctrl, Specifying +@comment node-name, next, previous, up +@subsection @@var +@findex var + +@code{@@var} is used to indicate metasyntactic variables. A metasyntactic +variable is something that stands for another piece of text. You would use +a metasyntactic variable in the documentation of a function to describe the +arguments that are passed to that function. + +@code{@@var} is not used for names of particular variables in programming +languages. For example, the Texinfo variable @code{texinfo-tex-command} is +not a metasyntactic variable. + +Its effect in the Info file is to upcase the argument; in the printed +manual, to italicize it. Example: + +@example +To delete file @@var@{filename@}, type @@code@{rm @@var@{filename@}@}. +@end example + +@noindent +produces + +@quotation +To delete file @var{filename}, type @code{rm @var{filename}}. +@end quotation + +In some documentation styles, metasyntactic variables are shown with angle +brackets, for example: + +@example +@dots{}, type rm +@end example + +@node Dfn, Cite, Var, Specifying +@comment node-name, next, previous, up +@subsection @@dfn +@findex dfn + +@code{@@dfn} is used to identify the introductory or defining use of a +technical term. The command should be used only in a passage whose purpose +is to introduce a term which will be used again or which the reader ought +to know. Mere passing mention of a term for the first time doesn't deserve +@code{@@dfn}. It generates italics in the printed manual, and double +quotation marks in the Info file. Example: + +@example +Getting rid of a file is called @@dfn@{deleting@} it. +@end example + +@noindent +produces + +@quotation +Getting rid of a file is called @dfn{deleting} it. +@end quotation + +@node Cite, , Dfn, Specifying +@comment node-name, next, previous, up +@subsection @@cite +@findex cite + +@code{@@cite} is used for the name of a book. It produces italics +in the printed manual, and quotation marks in the Info file. + + +@node Braces Atsigns Periods, Dots Bullets Tex, Specifying , Marking Text +@comment node-name, next, previous, up +@section Inserting Braces, @samp{@@} and Periods +@cindex Inserting braces, @@ and periods +@cindex Braces, inserting +@cindex Periods, inserting +@cindex Single characters, commands to insert +@cindex Commands to insert single characters + +@samp{@@} and curly braces are special characters in Texinfo. This means +that you have to put an @samp{@@} in front of these characters in order to +insert them into text. + +Periods are also special. Depending on whether the period is inside of or +at the end of a sentence, less or more space is inserted after a period in +a typeset manual. Since it is not always possible for Texinfo to determine +when a period ends a sentence and when it is used in an abbreviation, +special commands are needed. (Usually, Texinfo figures out how to handle +periods, so you don't have to use the special commands; you just enter a +period as you would if you were using a typewriter, which means you put two +spaces after the period that ends a sentence and after a colon.)@refill + +@menu +* Inserting an Atsign:: inserting an atsign. +* Insert Left Brace:: Inserting a left brace. +* Insert Colon:: Preventing unintended additional whitespace. +* Insert Period:: Inserting a period that does end a sentence. +@end menu + +@node Inserting An Atsign, Insert Left Brace, , Braces Atsigns Periods +@comment node-name, next, previous, up +@subsection @@@@ +@findex at-signs +@comment for version 19: this does not work findex @@ + +@code{@@@@} stands for a single @@ in either printed or Info output. + +@node Insert Left Brace, Insert Colon, Inserting an Atsign, Braces Atsigns Periods +@comment node-name, next, previous, up +@subsection @@@{ +@findex left-braces +@comment for version 19: this does not work findex @{ + +@code{@@@{} stands for a single @{ in either printed or Info output. + +@subsection @@@} +@findex right-braces +@comment for version 19: this does not work findex @} + +@code{@@@}} stands for a single @} in either printed or Info output. + +@node Insert Colon, Insert Period, Insert Left Brace, Braces Atsigns Periods +@comment node-name, next, previous, up +@subsection @@: +@findex at-sign colons +@comment for version 19: this does not work findex @: + +@code{@@:}@: is used after a character such as period or colon which +normally causes @TeX{} to increase the width of the following whitespace, +to suppress that effect. For example, it can be used after periods that +end abbreviations and do not end sentences. @code{@@:}@: has no effect +on the Info file output. + +@example +It displays @@code@{Foo:@}@@: at that time. +@end example + +@noindent +produces + +@quotation +It displays @code{Foo:}@: at that time. +@end quotation + +The meanings of @code{@@:}@: and @code{@@.}@: in Texinfo are designed to +work well with the Emacs sentence motion commands. This means they are +different from their meanings in some other formatting systems that use +@@-commands. + +@refill + +@node Insert Period, , Insert Colon, Braces Atsigns Periods +@comment node-name, next, previous, up +@subsection @@. +@findex at-sign periods +@comment for version 19: this does not work at-sign period + +@code{@@.}@: stands for a period that really does end a sentence, useful +when @TeX{} would otherwise assume by its heuristics that that is not so. +This happens when there is a single-capital-letter word at the end of a +sentence: @TeX{} normally guesses that it is an abbreviation. + +In the Info file output, @code{@@.}@: is equivalent to a simple @samp{.}. +The Texinfo program preserves the amount of space that you use, so put +two spaces after a period if you intend it to be the end of a sentence +(as well as using @code{@@.}, if necessary, for the printed manual's sake). + +@example +Give it to X. Give it to X@@. Give it to X@@. +@end example + +@noindent +produces + +@quotation +Give it to X. Give it to X@. Give it to X@. +@end quotation + +@node Dots Bullets Tex, Emphasis, Braces Atsigns Periods, Marking Text +@comment node-name, next, previous, up +@section Inserting Dots, Bullets and @TeX{} +@cindex Dots, inserting +@cindex Bullets, inserting +@cindex TeX-logo, inserting +@cindex Special typesetting commands +@cindex Typesetting commands for dots and the like + +An ellipsis, a line of dots, is typeset differently than a string of +periods; more whitespace is put between the dots in the ellipsis than is +put between the periods. Because of this, a special command is used in +Texinfo for inserting dots. Also, the trademark, @TeX{}, is typeset in a +special fashion and it needs an @@-command, as does the command for +inserting the copyright symbol. The @code{@@bullet} command is special, +too. Each of these commands is followed by a pair of braces, @samp{@{@}}, +without any whitespace between the name of the command and the braces. + +@menu +* Dots:: Inserting dots. +* Bullet:: Inserting bullets. +* Tex:: Inserting the @TeX{} trademark. +@end menu + +@node Dots, Bullet, , Dots Bullets Tex +@comment node-name, next, previous, up +@subsection @@dots@{@} +@findex dots +@cindex Inserting dots +@cindex Dots, inserting + + +@code{@@dots@{@}} generates an ellipsis which is three dots in a row, +appropriately spaced, like this: `@dots{}'. Do not simply write three +periods in the input file; that would work for the Info file output, but +would produce the wrong amount of space between the periods in the printed +manual. + +@iftex +Here is an ellipsis: @dots{} + +Here are three periods in a row: ... + +The three periods in a row are closer together than the dots in the ellipsis. + +@end iftex + +@node Bullet, Tex, Dots, Dots Bullets Tex +@comment node-name, next, previous, up +@subsection @@bullet@{@} +@findex bullet + +@code{@@bullet@{@}} generates a large round dot, or the closest possible +thing to one. + +Here is a bullet: @bullet{} + +@node Tex, , Bullet, Dots Bullets Tex +@comment node-name, next, previous, up +@subsection @@TeX@{@} +@findex TeX + +@code{@@TeX@{@}} generates `@TeX{}'. In a printed manual, this is a special +logo that is different from three ordinary letters. + + + +@node Emphasis, , Dots Bullets Tex, Marking Text +@comment node-name, next, previous, up +@section Emphasizing Text +@cindex Emphasizing text + +Usually, Texinfo changes the font automatically to mark words in the text +according to what category the words belong to. The @code{@@code} command, +for example, does this. Most often, this is the best way to mark specified +words. However, sometimes you will want to emphasize text directly. +Texinfo has two ways to do this: commands that tell Texinfo to emphasize +the text but leave the method to the program, and commands that specify the +font to use. The first method is generally the best and it makes it +possible to change the style of a document without have to re-edit it line +by line. + +@menu +* Emph and Strong:: Emphasizing text. +* Fonts:: Selecting italic, bold or typewriter fonts. +@end menu + +@node Emph and Strong, Fonts, , Emphasis +@comment node-name, next, previous, up +@subsection @@emph and @@strong +@findex emph +@findex strong + +@code{@@emph} and @code{@@strong} are two forms of emphasis. @code{@@strong} +is stronger. + +In printed output, @code{@@emph} produces @emph{italics} and @code{@@strong} +produces @strong{bold}. + +In the Info file, both of these commands put asterisks around the +argument. + +@node Fonts, , Emph and Strong, Emphasis +@comment node-name, next, previous, up +@subsection @@i, @@b and @@t +@findex i (italic font) +@findex b (bold font) +@findex t (typewriter font) + +These three commands specify font changes in the printed manual and have no +effect in the Info file. @code{@@i} requests @i{italic} font (in some +versions of @TeX{}, a slanted font is used), @code{@@b} requests @b{bold} +face, and @code{@@t} requests the @t{fixed-width} font used by +@code{@@kbd}. All three commands apply to an argument that follows, +surrounded by braces.@refill + +If possible, you should avoid using these three commands. If you find a +need to use one, it probably indicates a lack in the Texinfo language. + +@node Conditionals, Printing Hardcopy, Marking Text, Top +@comment node-name, next, previous, up +@chapter Conditionals +@cindex Conditionals +@cindex Ifinfo +@cindex Iftex +@findex ifinfo +@findex iftex + + +You may not always be able to use the same text for both the printed manual +and the on-line Info file. In this case, you can use the conditional +commands to specify which text is for the printed manual and which is for +the Info file. + +@code{@@ifinfo} begins text that should be ignored by @TeX{} when it +typesets the printed manual. The text appears only in the Info file. The +@code{@@ifinfo} command should appear on a line by itself. End the +info-only text with a line containing @code{@@end ifinfo} by itself. At +the beginning of a Texinfo file, the Info permissions are contained within a +region marked by @code{@@ifinfo} and @code{@@end ifinfo}.@refill + +Likewise, @code{@@iftex} and @code{@@end iftex} lines delimit text that +will not appear in the Info file but will appear in the printed manual.@refill + +For example, + +@example +@@iftex +This text will appear only in the printed manual. +@@end iftex + + +@@ifinfo +However, this text will appear only in the info manual. +@@end ifinfo +@end example + +@noindent +The preceding example produces the following. Note how you only see one of +the two lines, depending on whether you are reading the on-line Info version +or the printed version of this manual. + + +@iftex +This text will appear only in the printed manual. +@end iftex + +@ifinfo +However, this text will appear only in the info manual. +@end ifinfo + +The @code{@@titlepage} command is a special variant of @code{@@iftex} that +is used for making the title and copyright pages of the printed manual. + +@menu +* Using Tex Commands:: Using commands from regular @TeX{}. +@end menu + +@node Using Tex Commands, , Conditionals, Conditionals +@comment node-name, next, previous, up +@section Using @TeX{} Commands +@cindex Using TeX commands +@cindex TeX commands, using them + +Inside a region delineated by @code{@@iftex} and @code{@@end iftex}, you +can embed ordinary @TeX{} commands. Info will ignore these commands since +they are only in that part of the file that is seen by @TeX{}. The @TeX{} +commands are the same as any @TeX{} commands except that an @samp{@@} +replaces the @samp{\} used by @TeX{}. For example, in the +@code{@@titlepage} section of a Texinfo file, the @TeX{} command +@code{@@vskip} is used to format the copyright page.@refill + +You can enter @TeX{} completely, and use @samp{\} in the @TeX{} commands by +delineating a region with the @code{@@tex} and @code{@@end tex} commands. +(These commands automatically put the region inside of @code{@@iftex} and +@code{@@end iftex} commands.) For example,@refill + +@example +@@tex +Here you would put text with @TeX{} commands; +such as $\bigl(x\in A(n)\bigm|x\in B(n)\bigr)$ +that will appear only in the printed manual. +@@end tex +@end example + +@noindent +In the Info file, nothing between @code{@@tex} and @code{@@end tex} will +appear.@refill + +@iftex +In the printed manual, the mathematics will look like this: + +@tex +$\bigl(x\in A(n)\bigm|x\in B(n)\bigr)$ +@end tex +@end iftex + +@node Printing Hardcopy, Creating an Info File, Conditionals, Top +@comment node-name, next, previous, up +@chapter Printing Hardcopy +@cindex Printing hardcopy +@cindex Hardcopy, printing it +@cindex Making a printed manual +@cindex Sorting indices +@cindex Indices, sorting +@findex texindex (for sorting indices) + +There are three shell commands for printing a hardcopy of a Texinfo file. +One is for formatting the file, the second is for sorting the index and the +third is for printing the formatted document. When you use the shell +commands, you can either work directly in the operating system shell or +work within a shell inside of GNU Emacs. + +The typesetting program @TeX{} is used for formatting a Texinfo file. +@TeX{} is a very powerful typesetting program and, if used right, does an +exceptionally good job. The @@-commands in a Texinfo file are translated +by a file called @file{texinfo.tex} into commands that @TeX{} understands. +(That is why the beginning of every Texinfo file starts with the line that +says @samp{\input texinfo}; this command tells @TeX{} to use the +@file{texinfo.tex} file in processing the Texinfo file. Customarily, +@file{texinfo.tex} is in a directory called @file{/usr/lib/tex/macros}.) +@code{texinfo-format-buffer} reads the very same @@-commands in the Texinfo +file and processes them differently from @TeX{} to make an Info +file.@refill + +Usually, the @TeX{} formatting command is the shell command @code{tex} +followed by the name of the Texinfo file. The @TeX{} command produces a +formatted DVI file as well as several auxiliary files containing indices, +cross references, etc. The DVI file (for @dfn{DeVice Independent} file) +can be printed on a wide variety of printers.@refill + +The @TeX{} formatting command itself does not sort the indices. This is a +misfeature of @TeX{}. Hence, to generate a printed index, you first need a +sorted index to work from.@refill + +@TeX{} outputs raw, unsorted index files under names that obey a standard +convention. These names are the name of your main input file to @TeX{}, +with everything after the first period thrown away, and the two letter +names of indices added at the end. For example, the raw index output files +for the input file @file{foo.texinfo} would be @file{foo.cp}, +@file{foo.vr}, @file{foo.fn}, @file{foo.tp}, @file{foo.pg} and +@file{foo.ky}. Those are exactly the arguments to give to @code{texindex}. +Or else, you can use @samp{??} as ``wild-cards'' and give the command in +this form:@refill + +@example +texindex foo.?? +@end example + +For each file specified, @code{texindex} generates a sorted index file +whose name is made by appending @samp{s} to the input file name. The +@code{@@printindex} command knows to look for a file of that name. +@code{texindex} does not alter the raw index output file. After you have +sorted the indices, you need to rerun the @TeX{} command on the Texinfo +file. This regenerates a formatted DVI file with the index entries in the +correct order.@refill + +To summarize, this is a three step process: + +@enumerate +@item +Run the @TeX{} command on the Texinfo file. This generates the formatted +DVI file as well as the raw index files with two letter extensions.@refill + +@item +Run the shell command @code{texindex} on the raw index files to sort them. +The arguments to @code{texindex} are the names of the raw index files. +@code{texindex} creates sorted index files whose names are the names of the +raw index files with an @samp{s} appended. To cause @code{texindex} to +sort all the raw index files, append @samp{??} to the Texinfo file name in +place of the @file{.texinfo} extension.@refill + +@item +Rerun the @TeX{} command on the Texinfo file. This regenerates a formatted +DVI file with the index entries in the correct order. This second run also +makes all the cross references correct as well. (The tables of contents +are always correct.)@refill +@end enumerate + +You need not run @code{texindex} after each @TeX{} run. If you don't, the +next @TeX{} run will use whatever sorted index files happen to exist from +the previous use of @code{texindex}. This is usually ok while you are +debugging. + +Finally, the document can be printed out with the DVI print command +(a shell command). Depending on the system used, the DVI print command +will be a command such as @code{lpr -d}. The DVI print command may require +a file name without any extension or with a @samp{.dvi} extension. + +The following commands, for example, sort the indices, format and print +the @cite{Bison Manual} (where @samp{%} is the shell prompt): + +@example +% tex bison.texinfo +% texindex bison.?? +% tex bison.texinfo +% lpr -d bison.dvi +@end example + +@noindent +(Remember that the words for the shell commands may be different at your +site; but these are commonly used versions.) + +It is often most convenient to give formatting and printing commands from a +shell within GNU Emacs. This way, you can easily keep track of errors. To +create a shell within Emacs, type @kbd{M-x shell}. In this shell, you can +format and print the document. You can switch to and from this shell while +it is running and do other things. If you are formatting a very long +document on a slow machine, this can be very convenient; on a VAX 750, for +example, formatting often takes 8 seconds or more per page depending on how +loaded the computer is. Faster machines take correspondingly less time. + +@menu +* Requirements:: Formatting requirements. +* Compile-Command:: Formatting with the compile command. +@end menu + +@node Requirements, Compile-Command, , Printing Hardcopy +@comment node-name, next, previous, up +@section Formatting Requirements +@cindex Requirements for formatting +@cindex Formatting requirements + +Every Texinfo file that is to be input to @TeX{} must begin with a line +that looks like + +@example +\input texinfo @@c -*-texinfo-*- +@end example + +@noindent +This serves two functions. + +@enumerate +@item +When the file is processed by @TeX{}, it loads the macros needed for +processing a Texinfo file.@refill +@item +When the file is edited in Emacs, it causes Texinfo mode to be used.@refill +@end enumerate + +Every Texinfo file must end with a line saying + +@example +@@bye +@end example + +which terminates @TeX{} processing and forces out unfinished pages. + +You also have to include two lines that specify the Info file name and the +title of the printed manual: + +@example +@@setfilename @var{name-of-texinfo-file} +@@settitle @var{Name of Manual} +@end example + +You might also want to include a line saying + +@example +@@setchapternewpage odd +@end example + +@noindent +to cause each chapter to start on a fresh odd-numbered page. + +By default, @TeX{} typesets pages for printing in an 8.5 by 11 inch +format. However, you can direct @TeX{} to typeset a document in a 7 by +9.25 inch format that is suitable for bound books by inserting the +following command on a line by itself at the beginning of the Texinfo +file, before the @code{@@setchapternewpage} command: + +@example +@@smallbook +@end example + +@noindent +The Free Software Foundation distributes printed copies of the @cite{GNU +Emacs Manual} in this size. + +Finally, @TeX{} sometimes is unable to typeset a line without extending +it into the right margin. This can occur when @TeX{} comes upon what it +interprets as a long word that it cannot hyphenate, like a net address, +or a very long title. When this happens, @TeX{} prints an error message +like this: + +@example +Overfull \hbox (20.76302pt too wide) +@end example + +@noindent +and gives the line number along with the text of the offending line +marked at all the places that @TeX{} knows to hyphenate words. (In +@TeX{} lines are in `horizontal boxes', hence the term, `hbox'.) + +If the Texinfo file has an overfull hbox, you can rewrite the sentence +so the overfull hbox does not occur or you can decide to leave it. A +small excursion into the right margin often does not matter and may not +even be noticable. However, unless told otherwise, @TeX{} will print a +large, ugly, black rectangle beside every line that is overfull. This is +so you will notice the location of the problem if you are correcting a +draft. To prevent such monstrosities from marring your final printout, +put the following in the beginning of the Texinfo file on lines of their +own, before the @code{@@setchapternewpage} command: + +@example +@@iftex +@@finalout +@@end iftex +@end example + +@xref{Titlepage}, for information about creating a title page. +@xref{Contents}, for information about creating a table of contents.@refill + +@node Compile-Command, , Requirements, Printing Hardcopy +@comment node-name, next, previous, up +@section Using Local Variables and the Compile Command +@cindex Local variables +@cindex Compile command for formatting +@cindex Formatting with the compile command + +Another way to give the @TeX{} formatting command to Texinfo is to put that +command in a @dfn{local variables list} at the end of the Texinfo file. +You can then specify the @TeX{} formatting command as a +@code{compile-command} and have Emacs run the @TeX{} formatting command by +giving the command @kbd{M-x compile}. This creates a special shell called +the @samp{*compilation buffer*}. For example, at the end of the +@file{gdb.texinfo} file, after the @code{@@bye}, you would put the +following:@refill + +@example +@@c Local Variables: +@@c compile-command: "tex gdb.texinfo" +@@c End: +@end example + +@noindent +This technique is most often used by programmers who compile programs +this way. + +@node Creating an Info File, Catching Mistakes, Printing Hardcopy, Top +@comment node-name, next, previous, up +@chapter Creating an On-line Info file +@cindex Creating an on-line Info file +@cindex Running Info +@cindex Info, creating an on-line file +@cindex Formatting a file for Info +@cindex Indirect subfiles +@findex texinfo-format-buffer + +In GNU Emacs, using Texinfo mode, you can see what part or all of a Texinfo +file will look like in Info by using the keyboard command @kbd{C-c C-f} +(@code{texinfo-format-region}). This formats a region and displays in a +temporary buffer called @samp{*Info Region*}; however, this command does +not turn on Info reading program---it just displays what the region will +look like. The @code{texinfo-format-region} command is described more +extensively in the chapter on using Texinfo mode. @xref{Info on a Region}. +@refill + +In GNU Emacs, the way to create a working Info file is to visit the file +and invoke + +@example +@kbd{M-x texinfo-format-buffer} +@end example + +@noindent +A new buffer is created and the Info file text is generated there. +@kbd{C-x C-s} will save it under the name specified in the +@code{@@setfilename} command.@refill + +If the Texinfo file has more than 30,000 bytes, +@code{texinfo-format-buffer} will automatically create a @dfn{tag table} +for it. With a tag table, Info can jump to new nodes more quickly than it +can otherwise. In addition, if the file has more than 100,000 bytes in it, +@code{texinfo-format-buffer} will split the file into shorter Indirect +subfiles of about 50,000 bytes each. Files are split so that Info does not +have to make a large buffer to hold the whole of a large Info file; +instead, Info allocates just enough memory for the small, split off file +that is needed at the time. This way, Emacs avoids wasting memory when you +run Info. (Before splitting was implemented, Info files were always short +and @dfn{include} files were designed as a way to create a single, large +printed manual out of the smaller Info files. @xref{Include Files}, for +more information.)@refill + +When the file is split, Info itself works through a shortened version of +the original file that contains the tag table and references to the files +that were split off. The split off files are called @dfn{indirect} files. + +The split off files have names that are created by appending @samp{-1}, +@samp{-2}, @samp{-3} and so on to the file names specified by the +@code{@@setfilename} command. The shortened version of the original file +continues to have the name specified by @code{@@setfilename}. + +At one stage in writing this document, for example, the Info file was saved +as @file{test-texinfo} and that file looked like this: + +@group +@example +Info file: test-texinfo, -*-Text-*- +produced by texinfo-format-buffer +from file: new-texinfo-manual.texinfo + +^_ +Indirect: +test-texinfo-1: 102 +test-texinfo-2: 50422 +test-texinfo-3: 101300 +^_^L +Tag table: +(Indirect) +Node: overview^?104 +Node: info file^?1271 +Node: printed manual^?4853 +Node: conventions^?6855 +@dots{} +@end example +@end group + +@noindent +(But @file{test-texinfo} had far more nodes than are shown here.) Each of +the split off, indirect files, @file{test-texinfo-1}, +@file{test-texinfo-2}, and @file{test-texinfo-3}, is listed in this file +after the line that says @samp{Indirect:}. The tag table is listed after +the line that says @samp{Tag table:}. @refill + +You cannot run the @kbd{M-x Info-validate} node checking command on indirect +files. For information on how to prevent files from being split and how to +validate the structure of the nodes, @pxref{Info-Validating a Large +File}@refill + +@menu +* Installing an Info File:: Putting the Info file in the info directory. +@end menu + +@node Installing an Info File, , Creating an Info File, Creating an Info File +@comment node-name, next, previous, up +@section Installing an Info file +@cindex Installing an Info file +@cindex Info file installation +@cindex Dir directory for Info installation + +An Info file is usually installed in the GNU Emacs directory called +@file{info}. For Info to work, this directory must contain all the Info +files, including the split off files. In addition, the @file{info} +directory must have a file that serves as a top level directory for the +Info system. This file is called @file{dir}. + + +For example, in the @file{info} directory, the file called @file{dir} has +the top level menu for all the Info files in the system. This file has a +master menu that looks like this: + +@example +* Menu: + +* Info: (info). Documentation browsing system. +* Emacs: (emacs). The extensible self-documenting text editor. +* Texinfo: (texinfo). With one source file, make either a printed + manual using TeX or an Info file using + Texinfo. +@end example + +To add a new Info file, just add it to this menu. For example, if you +were adding documentation for GDB, you would make the following entry: + +@example +* GDB: (gdb). The source-level C debugger. +@end example + +@noindent +The first item is the menu item name; it is followed by a colon. The +second item is the name of the Info file, in parentheses; it is followed by +a period. The third part of the entry is the description of the item. + + + +The top node of the file, named @samp{top}, should have as its parent the +name of a node in another file, where there is a menu that leads to this +file. Specify the file name in parentheses. If the file is to be +installed directly in the Info directory file, use @samp{(dir)} as the +parent of the top node; this is short for @samp{(dir)top}, the node @samp{top} +in the file @file{dir}, which is the main menu of Info. + + + + +@node Catching Mistakes, Command Syntax, Creating an Info File, Top +@comment node-name, next, previous, up +@chapter Catching Mistakes +@cindex Structure of Texinfo, catching mistakes +@cindex Nodes, catching mistakes +@cindex Nodes, correcting mistakes +@cindex Catching mistakes +@cindex Correcting mistakes +@cindex Mistakes, catching +@cindex Problems, catching +@cindex Debugging the Texinfo structure + +Besides mistakes with the content of what ever you are describing, 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. + +There are two tools for catching the first kind of mistake and two for +catching the second. + +For finding problems with @@-commands, your best action is to run @kbd{M-x +texinfo-format-region} on regions of your file as you write it. In Texinfo +mode, the @code{texinfo-format-region} command is bound to @kbd{C-c C-f}. +In addition, you can run @TeX{} on the whole file.@refill + +For finding problems with the structure of nodes and chapters, you can use +@kbd{C-c C-s} (@code{texinfo-show-structure}) (and the related @code{occur} +command) and you can use the @kbd{M-x Info-validate} command. + + +@menu +* Debugging with Info:: Catching errors with info formatting. +* Debugging with Tex:: Catching errors with @TeX{} formatting. +* Using texinfo-show-structure:: Using @code{texinfo-show-structure} + to catch mistakes. +* Running Info-Validate:: Checking for unreferenced nodes. +@end menu + + +@node Debugging with Info, Debugging with Tex, , Catching Mistakes +@comment node-name, next, previous, up +@section Catching Errors with Info Formatting +@cindex Catching errors with Info Formatting +@cindex Debugging with Info Formatting + +After you have written part of a Texinfo file, you can use the @kbd{M-x +texinfo-format-region} command to see whether the region formats properly. +In Texinfo mode, this command is bound to the keyboard command @kbd{C-c +C-f}. + +If you have made a mistake with an @@-command, @kbd{M-x +texinfo-format-region} will stop processing at or after the error and give +an error message. To see where in the file the error occurred, switch to +the @samp{*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 the error occurred.@refill + +For example, if you accidently end a menu with the command @code{@@end +menus} with an `s' on the end, instead of with @code{@@end menu}, you will +get an error message that says: + +@example +@@end menus is not handled by texinfo. +@end example + +@noindent +The cursor will stop at the point in the file where the error occurs, or +not long after it. It will look like this: + +@group +@example +@@menu +* Using texinfo-show-structure:: Using @code{texinfo-show-structure} + to catch mistakes. +* Running Info-Validate:: Checking for unreferenced nodes. +@@end menus +@end example +@end group + +The @code{texinfo-format-region} command does not always recognize errors. +For example, no errors were reported when @code{texinfo-format-region} was +run on the whole itemized list of which the following is a part: + +@example +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 +@@cindex Sorting indices +@@cindex Indices, sorting + +@@item +@@emph@{Third@}, rerun the @@TeX@{@} command on the Texinfo file. This +regenerates a formatted DVI file with the index entries in the correct +order. This second run also makes all the cross references and table of +contents correct as well. +@end example + +@noindent +Instead, @code{texinfo-format-region} ran without reporting the error, but +it produced output with very long lines, containing some of the original +@code{@@cindex} commands mixed in. (It is not practical to display these +over long lines here. + +However, when @code{texinfo-format-region} was run on part of the list +that is shown, it did give an error message, @samp{Search failed: +"[@{,@}"}. (This error message is explained in the section on using the +Emacs Lisp Debugger, @pxref{Using the Emacs Lisp Debugger}) + +Sometimes @code{texinfo-format-region} will stop long after the original +error; this is because it does not discover the problem until then. In this +case, you will have to backtrack.@refill + +@node Using the Emacs Lisp Debugger, , ,Debugging with Info +@comment node-name, next, previous, up +@subsection Using the Emacs Lisp Debugger +@cindex Using the Emacs Lisp debugger +@cindex Emacs Lisp debugger +@cindex Debugger, using the Emacs Lisp + +If an error is especially elusive, you can turn on the Emacs Lisp debugger +and look at the backtrace; this tells you where in the +@code{texinfo-format-region} function the problem occurred. You can turn +on the debugger with the command:@refill + +@example +M-x set-variable @key{RET} debug-on-error @key{RET} t +@end example + +@noindent +and turn it off with + +@example +M-x set-variable @key{RET} debug-on-error @key{RET} nil +@end example + +Often, when you are using the debugger, it is easier to follow what is +going on if you use the Emacs Lisp files that are not byte-compiled. The +byte-compiled sources send octal numbers to the debugger that may look +mysterious. To use the uncompiled source files, load @file{texinfmt.el} +and @file{texinfo.el} with the @kbd{M-x load-file} command.@refill + +The debugger will not catch an error if @code{texinfo-format-region} does +not detect one. In the example shown above, @code{texinfo-format-region} +did not find the error when the whole list was formatted, but only when +part of the list was formatted. When @code{texinfo-format-region} did not +find an error, the debugger did not find one either. @refill + +However, when @code{texinfo-format-region} did report an error, it invoked +the debugger. This is the backtrace it produced: + +@example +Signalling: (search-failed "[@},]") + re-search-forward("[@},]") + (while ...) + (let ...) + texinfo-format-parse-args() + (let ...) + texinfo-format-xref() + funcall(texinfo-format-xref) + (if ...) + (let ...) + (if ...) + (while ...) + texinfo-format-scan() + (save-excursion ...) + (let ...) + texinfo-format-region(103370 103631) +* call-interactively(texinfo-format-region) +@end example + +The backtrace is read from the bottom up. @code{texinfo-format-region} was +called interactively; and it, in turn, called various functions, including +@code{texinfo-format-scan}, @code{texinfo-format-xref} and +@code{texinfo-format-parse-args}. Inside the function +@code{texinfo-format-parse-args}, the function @code{re-search-forward} was +called; it was this function that could not find the missing right hand +brace.@refill + +@xref{Lisp Debug, , Debugging Emacs Lisp, emacs, The GNU Emacs Manual}, for +more information.@refill + + + +@node Debugging with Tex, Using texinfo-show-structure, Debugging with Info, Catching Mistakes +@comment node-name, next, previous, up +@section Catching Errors with @TeX{} Formatting +@cindex Catching errors with TeX Formatting +@cindex Debugging with TeX Formatting + +You can also catch mistakes when you format a file with @TeX{}. + + +Usually, you will want to do this after you have run +@code{texinfo-format-buffer} on the same file. +@code{texinfo-format-buffer} is usually faster and sometimes gives error +messages that make more sense. @xref{Debugging with Info}, for more +information.@refill + +For example, @TeX{} was run on the same itemized list discussed +in the section on the use of @code{texinfo-format-region} +(@pxref{Debugging with Info}); the fragment with the error looked like +this: + +@example +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 +@end example + +@noindent +This produced the following output, after which @TeX{} stopped: + +@example +Runaway argument? +@{sorting indices, for more information about sorting indices.) @@refill @@ETC. +! Paragraph ended before \xref was complete. + + \par +l.27 + +? +@end example + +In this case, @TeX{} produced an accurate and understandable error message: +@samp{Paragraph ended before \xref was complete.} (Note, however, that +@TeX{} translated the @samp{@@} into a @samp{\}.) Also, @samp{\par} is an +internal @TeX{} command of no relevance to Texinfo.) + +Unfortunately, @TeX{} is not always so helpful, and sometimes you have to be +truly a Sherlock Holmes to discover what went wrong. + +In any case, if you run into a problem like this, you can do one of two +things. + +@enumerate +@item +You can tell @TeX{} to continue running and to ignore errors +as best it can by typing @kbd{r @key{RET}} at the +@samp{?} prompt.@refill + +This is often the best thing to do. However, beware: the one error may +produce a cascade of additional error messages as it consequences are felt +through the rest of the file.@refill + +@item +You can tell @TeX{} to stop this run by typing @kbd{x @key{RET}} +at the @samp{?} prompt. +@end enumerate + +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 @code{@@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 that + +@example +(\end occurred inside a group at level 1) +@end example + +@noindent +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 @code{@@end} command somewhere in the +file; but that it could not locate where it was needed. @refill + +Another source of notoriously hard to find errors is a missing @code{@@end +group} command. If you ever are stumped by incomprehensible errors, look +for a missing @code{@@end group} command first.@refill + +If you do not have the header lines in the file, @TeX{} may stop in the +beginning of its run and display output that looks like the following. +The @samp{*} indicates that @TeX{} is waiting for input.@refill + +@example +This is TeX, Version 2.0 for Berkeley UNIX (preloaded format=plain-cm +87.10.25) (#tz-bar-a02987.tex [1]) +* +@end example + +@noindent +In this case, simply type @kbd{\end @key{RET}} after the asterisk. Then +put the header lines into the Texinfo file and run the @TeX{} command +again.@refill + + +@node Using texinfo-show-structure, Running Info-Validate, Debugging with Tex, Catching Mistakes +@comment node-name, next, previous, up +@section Using @code{texinfo-show-structure} +@cindex Showing the structure of a file +@cindex Using texinfo-show-structure to catch mistakes +@cindex texinfo-show-structure for catching mistakes +@findex 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, there is a command that will list all the +lines that begin with the @@-commands that specify the structure: @@node, +@@chapter, @@section, @@appendix and so on. This is the +@code{texinfo-show-structure} command. It is bound to the keyboard command +@kbd{C-c C-s}. @code{texinfo-show-structure} displays the lines that begin +with the node and chapter structuring @@-commands in another window called +the @samp{*Occur*} buffer. For example, when @code{texinfo-show-structure} +is run on the first part of this chapter, it produces the following:@refill + +@example +Lines matching +"^@@\\(chapter\\|unnum\\|appendix\\|sect\\|sub\\|heading\\|major +\\|node\\)" in buffer new-texinfo-manual.texinfo. + 2:@@node catching mistakes, @@-Command Syntax, running info, top + 4:@@chapter Catching Mistakes + 41:@@node debugging with info, debugging with tex, , catching mistakes + 43:@@section Catching errors with Info Formatting +@end example + +This means that lines 2, 4, 41 and 43 began with @code{@@node}, +@code{@@chapter}, @code{@@node}, and @code{@@section} respectively. If you +move your cursor into the @samp{*Occur*} window, you can position the +cursor over one of the lines and use the @kbd{C-c C-c} command +(@code{occur-mode-goto-occurrence}), to jump to the corresponding spot in +the Texinfo file. +@xref{Other Repeating Search, , Using Occur, emacs, The GNU Emacs Manual}, +for more information about @code{occur-mode-goto-occurrence}.@refill + +The first line in the @samp{*Occur*} window describes the @dfn{regular +expression} specified by @var{texinfo-heading-pattern}. This regular +expression is the pattern that @code{texinfo-show-structure} looks for. +@xref{Regexps, , Using Regular Expressions, emacs, The GNU Emacs Manual}, +for more information.@refill + +When you give the @code{texinfo-show-structure} command, it will show 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 @kbd{C-x n} +(@code{narrow-to-region}) command to mark the region. (@xref{Narrowing, , +, emacs, The GNU Emacs Manual}.) This is how the example used above was +generated. (To see the whole buffer again, use @kbd{C-x w} +(@code{widen}).)@refill + +You can remind yourself of the structure of a Texinfo file by looking at +the list in the @samp{*Occur*} window; and if you have mis-named a node +or left out a section, you can correct the mistake. + +@menu +* Using Occur:: +@end menu + +@node Using Occur, , Using texinfo-show-structure, Using texinfo-show-structure +@comment node-name, next, previous, up +@subsection Using @code{occur} +@cindex Using occur +@cindex Occur, using the command + +Sometimes the @code{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 +@code{texinfo-show-structure}. In this case, you can use the @code{occur} +command itself. To do this, type + +@example +@kbd{M-x occur} +@end example + +@noindent +and then, when prompted, type a @dfn{regexp}, a regular expression for the +pattern you want to match. +(@xref{Regexps, , Regular Expressions, emacs, The GNU Emacs Manual}.) +@code{occur} works from the current location of +the cursor in the buffer to the end of the buffer. If you want to run +@code{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 +@samp{@@chapter} in them, just type @samp{@@chapter}. This will produce a +list of the chapters. It will also list all the sentences with +@samp{@@chapter} in the middle of the line. If you want to see only those +lines that start with the word @samp{@@chapter}, type @samp{^@@chapter} +when prompted by @code{occur}. If you want to see all the lines that end +with a word or phrase, end the last word with a @samp{$}; for example, +@samp{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.@refill + +@xref{Other Repeating Search, , Using Occur, emacs , The GNU Emacs Manual}, +for more information.@refill + +@node Running Info-Validate, , Using texinfo-show-structure, Catching Mistakes +@comment node-name, next, previous, up +@section Finding Badly Referenced Nodes +@cindex Running Info-validate +@cindex Info-validate, running the command +@cindex Nodes, checking for badly referenced nodes +@cindex Checking for badly referenced nodes +@cindex Looking for badly referenced nodes +@cindex Finding badly referenced nodes +@cindex Badly referenced nodes + +You can check whether any of the `Next', `Previous', `Up' or other node +pointers fail to point to a node with the @code{Info-validate} command. +This command checks that every node pointer points to an existing node. + +To use this command, you first need to load the @code{info} library and then do +@kbd{M-x Info-validate}. + +@example +@kbd{M-x load-library @key{RET} info @key{RET}} +@kbd{M-x Info-validate} +@end example + +@noindent +(Note that all the @code{Info} commands require an uppercase `I'.) + +If your file is ok, 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 @samp{*problems in +info file*}. + +For example, @code{Info-validate} was run on a test file that contained +only the first node of this manual. One of the messages said: + +@example +In node "Overview", invalid Next: Texinfo Mode +@end example + +@noindent +This meant that the node called @samp{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 @samp{Texinfo Mode} to our test case +but we don't specify a `Previous' for this node. Then we will get +the following error message: + +@example +In node "Texinfo Mode", should have Previous: Overview +@end example + +@noindent +This is because every `Next' pointer should be matched by a +`Previous' (in the node where the `Next' points) which points back. + +@code{Info-validate} also checks that all menu items and cross-references +point to actual nodes. + +Significantly, @code{Info-validate} does not work with large files that +have been split. (Info thinks of a large file as being over 100,000 bytes, +approximately.) In order to use @code{Info-validate} on a large file, you +must run @code{texinfo-format-buffer} with an argument so that it does not +split the Info file, and then create a tag table. + +@menu +* Info-Validating a Large File:: Running @code{Info-validate} on a large file. +* Splitting:: Splitting a file manually. +@end menu + +@node Info-Validating a Large File, Splitting, Running Info-Validate, Running Info-Validate +@comment node-name, next, previous, up +@subsection Running @code{Info-validate} on a Large File. +@cindex Running Info-validate on a large file +@cindex Info validating a large file +@cindex Validating a large file + + +You can run @code{Info-validate} only on a single Info file. The command +will not work on indirect subfiles that are generated when the master file +is split. If you have a large file (longer than 100,000 bytes), you need +to run the @code{texinfo-format-buffer} command in such a way that it does +not create indirect subfiles. You will also need to create a tag table. +When you have done this, you can run @code{Info-validate} and look for +badly referenced nodes.@refill + +After you have validated the node structure, you can rerun +@code{texinfo-format-buffer} in the normal way so it will construct the tag +table and split the file automatically or, you can make the tag table and +split the file manually.@refill + +To prevent the @code{texinfo-format-buffer} command from splitting a +Texinfo file into smaller Info files, give a prefix to the @kbd{M-x +texinfo-format-buffer} command: + +@example +C-u M-x texinfo-format-buffer +@end example + +@noindent +When you do this, Texinfo will not split the file and will not create a tag +table for it. @refill +@cindex Making a tag table manually +@cindex Tag table, making manually + +Before you can run @kbd{M-x Info-validate} on the Info file, you need to +create a tag table for it. In order to do this, you first need to load the +@code{info} library into Emacs with the following command:@refill + +@example +M-x load-library @key{RET} info @key{RET} +@end example + +@noindent +Then you can give the command: + +@example +M-x Info-tagify +@end example + +This creates a file which you can validate.@refill + +@example +M-x Info-validate +@end example + +After you have checked the validity of the nodes, you can either run +@kbd{M-x texinfo-format-buffer} as you would normally, or else tagify and +split the file manually with the two commands @code{Info-tagify} and +@code{Info-split}.@refill + +@node Splitting, ,Info-Validating a Large File , Running Info-Validate +@comment node-name, next, previous, up +@subsection Splitting a File Manually +@cindex Splitting an Info file manually +@cindex Info file, splitting manually + +If the file has more than 100,000 or so bytes in it, you should split it or +else let the @code{texinfo-format-buffer} command do it for you +automatically. (Generally you will let @code{texinfo-format-buffer} do +this job for you. @xref{Creating an Info File}.)@refill + +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. This way, Emacs +can save memory. + +If the Info file has more than 30 nodes, you should also make a tag table for +it. @xref{Info-Validating a Large File}, for information about creating a +tag table. + +Before running @code{Info-split}, you need to load the @code{info} library +into Emacs by giving the command @kbd{M-x load-library @key{RET} info +@key{RET}}. After you have done this, you can give the two commands:@refill + +@example +M-x Info-tagify +M-x Info-split +@end example + +@noindent +(Note that the @samp{I} in @samp{Info} is uppercase.) + +When you use the @code{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 @samp{-} 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. + +@c ;;;;;;;;;;;;;;;; Appendix starts here ;;;;;;;;;;;;;;;; + +@node Command Syntax, Include Files , Catching Mistakes , Top +@comment node-name, next, previous, up +@appendix @@-Command Syntax +@cindex @@-Command Syntax + +The character @samp{@@} is used to start special Texinfo commands. (It has the +same meaning that @samp{\} has in plain @TeX{}.) Syntactically, there +are three classes of @@-commands: + +@table @asis +@item 1. Non-alphabetic commands: @@ followed by a punctuation character. +These commands are always part of the text within a paragraph, and +never take any argument. The two characters (@@ and the other one) +are complete in themselves. For example, @code{@@.}, @code{@@:}, +@code{@@@{} and @code{@@@}}.@refill + +@item 2. Alphabetic commands used within a paragraph. +These commands have @@ followed by a letter or a word, followed by an +argument within braces. For example, the command @code{@@dfn} indicates +the introductory or defining use of a term; it is used as follows: @samp{In +Texinfo, @@-commands are @@dfn@{mark-up@} commands.}@refill + +@item 3. Alphabetic commands used outside of paragraphs. +Each such command occupies an entire line. The line starts with @@, +followed by the name of the command (a word) such as @code{@@center} or +@code{@@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.@refill +@end table + +Thus, the alphabetic commands fall into two classes that have different +argument syntax. You cannot tell which class a command falls in by the +appearance of its name, but you can tell by the command's meaning: if it +makes sense to use the command together with other words as part of a +paragraph, the command is in class 2 and must be followed by an argument in +braces; otherwise, it is in class 3 and uses the rest of the line as its +argument. + +The purpose of having different syntax for commands of classes 2 and 3 is +to make the Texinfo file easier to read, and also to help the GNU Emacs +paragraph and filling commands work properly. There is only one exception +to this rule: the command @code{@@refill}, which is always used at the end +of a paragraph immediately following the final period or other punctuation +character. @code{@@refill} takes no argument. @code{@@refill} never +confuses the Emacs paragraph commands because it cannot start at the +beginning of a line.@refill + + +@node Include Files, TeX Input, Command Syntax, Top +@comment node-name, next, previous, up +@appendix Include Files +@cindex Include files + +When Info was first created, it was customary to create many small Info +files on one subject. By doing this, Emacs did not have to make a large +buffer to hold the whole of a large Info file; instead, Emacs allocated +just enough memory for the small Info file that was needed at the time. +This way, Emacs could avoid wasting memory. Include files were designed as +a way to create a single, large printed manual out of several smaller Info +files. + +However, because large Info files can now be split, include files are no +longer strictly necessary and they are used infrequently. Most often, they +are now used in projects where several different people are writing +different sections of a document simultaneously. + +@appendixsec How Include Files Work + +In a Texinfo file, a line of the form @code{@@include @file{filename}} is +ignored when the Info file is generated, but in a printed manual it causes +the contents of the file @file{filename} to be processed and included in the +manual. The contents of the file @file{filename} can be ignored by Info +because the first file can refer to @file{filename} with menus as well as +cross references. In the Info system, all the information is, as it were, +`in one place'. However, when two printed manuals are made from two +separate Texinfo files, the two manuals are separate, and even if they give +each other as references, the references are to separate documents. +Consequently, you will sometimes want to create a comprehensive, printed +manual that contains all the necessary information together in one place. + +@code{@@include} files are special Texinfo files that are used only for +making such a comprehensive manual. They are listed inside an outer file +that contains nothing but the beginning and end matter of a Texinfo file +and a number of @code{@@include} commands listing the included files. + +An @code{@@include} file--a file that will be listed inside an outer file +and processed with the @code{@@include} command--should not start with +@samp{\input texinfo}, as that has already been done by the outer file, and +the character @samp{\} has already been redefined to generate a backslash +in the output. Instead, an @code{@@include} file usually begins with a +node; it lacks the beginning and ending of a Texinfo file that are +described in the chapters on beginning and ending a file. @xref{Beginning +a File}, and @pxref{Ending a File} @refill + +Likewise, an @code{@@include} file should not end with @code{@@bye}, since +that would terminate @TeX{} processing immediately. + +Here is an example of a outer Texinfo file with @code{@@include} files +within it:@refill + +@example +\input texinfo @@c -*-texinfo-*- +@@setfilename include +@@settitle Include Manual + +@@setchapternewpage odd +@@titlepage +@@sp 12 +@@center @@titlefont@{Include Manual@} +@@sp 2 +@@center by Whom Ever + +@@page +Copyright @@copyright@{@} 1988 Free Software Foundation, Inc. +@@end titlepage + +@@include foo.texinfo +@@include bar.texinfo + +@@unnumbered Concept Index +@@printindex cp + +@@summarycontents +@@contents + +@@bye +@end example + +@node TeX Input, Sample Permissions, Include Files, Top +@comment node-name, next, previous, up +@appendix @TeX{} Input Initialization +@cindex TeX Input Initialization +@cindex TEXINPUTS environment variable +@cindex profile initialization file +@cindex cshrc initialization file + +You must put an input command on the first line of every Texinfo file to +tell @TeX{} to use the @file{texinfo.tex} file when it is processing the +Texinfo source file. Otherwise @TeX{} will not know what to do with the +@@-commands. (The @TeX{} input command is written as @samp{\input +texinfo}. @xref{First Line}.)@refill + +@TeX{} needs to be told where to find the @file{texinfo.tex} file that you +have told it to input. The preferred way to do this is to put +@file{texinfo.tex} in the default inputs directory, which is the +@file{/usr/lib/tex/macros} directory. If this is done (as it usually is +when GNU Emacs is installed), @TeX{} will find the file and you don't have +to do anything. Alternatively, you can put @file{texinfo.tex} in the +directory in which the Texinfo source file is located.@refill + +However, you may want to specify the location of the @code{\input} file +yourself. One way to do this is to write the complete path for the file +after the @code{\input} command. Another way is to set the +@samp{TEXINPUTS} environment variable in your @file{.cshrc} or +@file{.profile} file. The @samp{TEXINPUTS} environment variable will tell +@TeX{} where to find the @file{texinfo.tex} file and any other file that +you might want @TeX{} to use.@refill + +Whether you use a @file{.cshrc} or @file{.profile} file depends on whether +you use @samp{csh} or @samp{sh} for your shell command interpreter. When +you use @samp{csh}, it looks to the @file{.cshrc} file for initialization +information, and when you use @samp{sh}, it looks to the @file{.profile} +file.@refill + +In a @file{.cshrc} file, you could use the following @code{csh} command +sequence:@refill + +@example +setenv TEXINPUTS .:/usr/me/mylib:/usr/lib/tex/macros +@end example + +@noindent +In a @file{.profile} file, you could use the following @code{sh} command +sequence: + +@example +TEXINPUTS=.:/usr/me/mylib:/usr/lib/tex/macros +export TEXINPUTS +@end example + +@noindent +This would cause @TeX{} to look for @file{\input} file first in the current +directory, indicated by the @samp{.}, then in a hypothetical user's +@file{me/mylib} directory, and finally in the system library.@refill + +@node Sample Permissions, Command Index, TeX Input, Top +@comment node-name, next, previous, up +@appendix Standard text for Copying Permissions +@cindex Permissions +@cindex Copying permissions + +Texinfo files should contain sections that tell the readers that they have +the right to copy and distribute the Info file, the printed manual and any +accompanying software. This appendix contains the standard text of the +Free Software Foundation copying permission notice. For an example of the +text that could be used for the Distribution, General Public License and NO +WARRANTY sections of a document, see the latest version of the @cite{GNU +Emacs Manual}. + +The texts of the Free Software Foundation copying permission notice in the +@code{@@ifinfo} section and in the @code{@@titlepage} section are slightly +different. + +The @code{@@ifinfo} section usually begins with a line that says what the +file documents. This is what a person looking at the file will first read +if he or she reads the unprocessed Texinfo file or if he or she uses the +advanced Info command @kbd{g *}. @inforef{Expert, info, info}, for more +information. (If the reader uses the regular Info commands, he or she will +usually start reading at the first node and skip this first section, which +is not in a node.) + +In the @code{@@ifinfo} section, the summary sentence should be followed by +a copyright notice and then by the copying permission notice. One of the +copying permission paragraphs is enclosed in @code{@@ignore} and +@code{@@end ignore} commands. This paragraph states that the Texinfo file +can be processed through @TeX{} and printed, provided the printed manual +carries the proper copying permission notice. This paragraph is not made +part of the Info file since it is not relevant to the Info file; but it is +a mandatory part of the Texinfo file since it permits people to process the +Texinfo file in @TeX{}.@refill + +In the printed manual, the Free Software Foundation copying permission +notice follows the copyright notice and publishing information and is +located within the region delineated by the @code{@@titlepage} and +@code{@@end titlepage} commands. The copying permission notice is exactly +the same as the notice in the @code{@@ifinfo} section except that the +paragraph enclosed in @code{@@ignore} and @code{@@end ignore} commands is +not part of the notice.@refill + +To make it simpler to copy the permission notice into each section of the +Texinfo file, the complete permission notices for each section are +reproduced in full below even though most of the information is +redundant.@refill + +Note that you my have to specify the correct name of a section mentioned in +the permission notice. For example, in the @cite{GDB Manual}, the name of +the section referring to the General Public License is called the ``GDB +General Public License'', but in the sample shown below, that section is +referred to generically as the ``General Public License''. + +@menu +* Ifinfo Permissions:: +* Titlepage Permissions:: +@end menu + + +@node Ifinfo Permissions, Titlepage Permissions, Sample Permissions, Sample Permissions +@comment node-name, next, previous, up +@appendixsec Ifinfo Copying Permissions +@cindex Ifinfo permissions + +In the @code{@@ifinfo} section of the Texinfo file, the standard Free +Software Foundation permission notices reads as follows: + +@example +This file documents @dots{} + +Copyright 1988 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 a 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 also that the +sections entitled ``Distribution'' and ``General Public License'' are +included exactly as in the original, and 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 the sections entitled ``Distribution'' and ``General Public +License'' may be included in a translation approved by the author instead +of in the original English. +@end example + +@node Titlepage Permissions, , Ifinfo Permissions, Sample Permissions +@comment node-name, next, previous, up +@appendixsec Titlepage Copying Permissions +@cindex Titlepage permissions + +In the @code{@@titlepage} section of the Texinfo file, the standard Free +Software Foundation copying permission notices follows the copyright notice +and publishing information. The standard phrasing is: + +@example +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 also that the +sections entitled ``Distribution'' and ``General Public License'' are +included exactly as in the original, and 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 the sections entitled ``Distribution'' and ``General Public +License'' may be included in a translation approved by the author instead +of in the original English. +@end example + +@node Command Index, Concept Index, Sample Permissions, Top +@comment node-name, next, previous, up +@unnumbered Command Index + +(When used in a Texinfo file, @@-commands are preceded by an +@samp{@@}.)@refill + +@printindex fn + +@node Concept Index, , Command Index, Top +@comment node-name, next, previous, up +@unnumbered Concept Index + +@printindex cp + +@summarycontents +@contents +@bye -- 2.20.1