Texinfo

The GNU Documentation Format

for Texinfo version 4.0, 28 September 1999

Robert J. Chassell
Richard M. Stallman


目录


本文档由王立翻译。 2000.8

译者在此声明:不对任何由译文错误或者对译文的误解承担任何责任。


Texinfo版权条款

目前发行的于Texinfo相关的程序包括GNU Emacs的一部分和其他独立的程序(包括 makeinfoinfotexindex`texinfo.tex')。 这些程序是自由的;这意味着任何人都可以自由地使用它们并且在自由的 基础上重新发行它们。与Texinfo相关的程序并不属于公共领域(public domain); 它们是有版权的,而且它们的发行是受到限制的,但这些限制是设计出来用于允许每个 通力合作的公民作他希望作的事的。限制所不允许的是试图阻止其他人进一步共享他们可能 从你那里得到的这些程序的任何版本。

特别地,我们需要确认你有权发放与Texinfo相关的程序的副本,确认你得到了源代码 或者在你需要的时候可以得到源代码,确认你可以修改这些程序或在新的自由程序中使用 它的片断,确认你知道你可以作这些事。

为了确保所有的人都拥有这些权利,我们不得不禁止你剥夺其他任何人的这些权力。 例如,如果你发行了与Texinfo相关的程序的副本,你必须给出你所拥有的权力的清单。 你必须确保他们也能够得到源代码。并且你必须告诉他们他们的权力。

此外,为了保护我们自己,我们必须确信每个人都意识到与Texinfo相关的程序是没有担保的。 如果这些程序由其他人修改并传递下去,我们要求它的接受者知道他们所得到的程序不是 我们发行的,以便使我们的名誉不至于因为其他人引入的问题而导致损失。

目前发行的与Texinfo有关的程序的许可证的精确条款写在与它们在一起的通用 公共许可证之中。

Texinfo概述

Texinfo(1)是一种用 一个源文件就可以生成在线信息和打印输出的文档系统。这意味着你不必写两份不同的 文档,一份用于在线浏览,另一份用于打印工作,而只需要写一份文档。因而,在修订 你的作品的时候,你只需要修订一份文档。

报告错误

我们欢迎关于Texinfo系统,既包括程序也包括文档,的错误报告或者建议。请把它们发送到 bug-texinfo@gnu.org。你可以从 ftp://ftp.gnu.org/gnu/texinfo/ 得到Texinfo的最新版本,并且可以为整个世界提供镜像。

对于错误报告,请包含足够的信息以便维护者可以复制错误。一般来说,这意味着:

当你不能确定是否需要某些东西,就把他包括进来。包含了过多的东西要比漏掉了重要的东西更好。

补丁受到最热烈的欢迎;如果可能,其使用`diff -c'创建补丁 (参见比较与合并文件中的‘概述’一节)并且带上`ChangeLog'条目 (参见GNU Emacs手册中的‘ChangeLog’一节)。

在发送邮件的时候,只要可能就不要对消息进行比编码或者分割消息;处理一个大的普通文本 消息要比许多小消息简单得多。GNU shar 是为电子邮件提供的,对多个文件或者二进制文件打包的方便的工具。

使用Texinfo

使用Texinfo,你可以创建具备常见图书特征的,带有章、节、交叉引用和索引的可打印的文档。 从同一个Texinfo源文件,你可以创建菜单驱动的、带有节点、菜单、交叉引用和索引的在线 Info文件。你还可以从该源文件创建适用于网络浏览器的HTML格式文件。 GNU Emacs手册和本手册一样,都是Texinfo文件的很好例子。

为了得到用于打印的文档,用TeX排版程序处理Texinfo源文件(Texinfo语言与TeX常用的语言,普通TeX 有很大的不同)。这会创建你可以用于排版或打印书籍或报告的DVI文件(参见 格式化和打印硬拷贝一节)。

为了得到Info文件,用makeinfo工具或者Emacs的texinfo-format-buffer命令 处理你的Texinfo源文件。你可以把结果安装到你的Info树中去(参见安装Info文件一节)。

为了得到HTML文件,使用带有`--html'选项的makeinfo来处理你的Texinfo源文件。 (比如说)你可以把结果安装到你的网站中去。

如果你是一名程序员并且愿意通过为Texinfo实现新的输出格式而为GNU工程作出贡献,那真的太好了。 但请不要为你钟爱的格式foo编写独立的转换器texi2foo!这项工作会有困难,而且会给随后的维护添加 额外的工作。这是因为Texinfo语言总是被不断地增强和更新。因此,最好的方式是象现在的Info和HTML 所作的那样修改makeinfo以生成新的格式。

TeX模拟所有打印机的工作;Info模拟所有计算机终端的工作;HTML输出模拟所有网络浏览器的工作。 因此大多数计算机用户都可以使用Texinfo。

Texinfo源文件是包含了文本和@-命令(以`@'为前缀的单词)的普通ASCII文件。 @-命令将告知排版和格式化程序应该作些什么。你可以用任何文本编辑器编辑Texinfo文件; 但由于GNU Emacs含有一种特殊的模式,称为Texinfo模式,该模式提供了各种与Texinfo相关的功能, 因而使用GNU Emacs会格外地方便。(参见使用Texinfo模式一节。)

在编写Texinfo源文件之前,你应该通过诸如阅读本手册的方式而懂得节点、菜单、 交叉引用以及其他的东西。

你可以使用Texinfo以便同时创建在线求助和打印的手册;进一步,Texinfo可以自由地发行。 因为这些原因,Texinfo是GNU工程的官方文档。更多的信息可以从GNU documentation web page得到。

有时,有人提议从Texinfo源文件生成传统的Unix man手册。因为man手册含有十分严格的常规格式, 在过去还没有提供过这种支持。仅仅增强makeinfo以输出troff格式是不够的。生成 好的man手册因此需要一个完全独立的,与典型的、生成很好的用户手册或者参考手册的Texinfo程序不同 的程序。这使得生成man手册不能与Texinfo的设计目标,不以不同的方式用不同的格式提供相同的信息, 相兼容。你可能还是会直接编写man手册。

如果你希望支持man手册,程序help2man可能会有用;它在给出`--help' 选项的时候生成传统的man手册。事实上,它目前正用于为Texinfo程序本身生成man手册。它是由Brendan O'Dea 编写的自由软件,可以从http://www.ozemail.com.au/~bod/help2man.tar.gz 得到。

Info文件

Info文件是格式化过的Texinfo文件,格式化使得它可以由Info文档读入程序操作。(makeinfotexinfo-format-buffer是两个把Texinfo文件转化为Info文件的命令。)

Info文件被分割成称为节点的片断,每个节点都包含了对一个主题的讨论。 每个节点都具有一个名字和由用户阅读的文本以及到其他节点的指针(这指针是由节点 名指明目标的)。Info程序一次显示一个节点,并且提供命令以便用户转移到其他相关的节点。

每个Info文件的节点都可以含有许多叙述本节点主题的子主题的子节点。子节点的名称在父节点的 菜单中列出;你总是可以使用某个Info命令以便转移到某个子节点。通常,一个Info 文件的组织类似于一本书。如果节点处于章的逻辑层次,它的子节点就处于节的层次;类似地, 节的子节点处于子节(subsection)的层次。

每个父节点的所有子节点都通过由‘Next’和‘Prev’指针组成的双链表连接起来。‘Next’指针 提供了到下一节的连接,而‘Prev’指针提供了到上一节的连接。这意味着一章中处于节的层次上 的所有节点都被连接到了一起。通常这个链表中的顺序与子节点在父节点菜单中出现的顺序相同。 每个子节点把它的父节点记录在‘Up’指针中。最后的子节点没有‘Next’指针,而第一个子节点 把它的父节点同时作为‘Previous’和‘Up’指针的值。 (2)

按照类似书的结构,把Info文件的节点对应到章、节以及类似的东西,是为了方便,而不是必须这样作。 节点的‘Up’、‘Previous’和‘Next’指针可以指向其他任何节点,菜单也可以含有其他任何节点。 因此,节点结构可以是任何有向图。但按照对应于书或报告中的章、节结构进行组织会比较容易理解。

除了菜单和‘Next’、‘Previous’、‘Up’指针,Info还提供了另一类称为引用的指针,它可能遍布 整个文本。这通常是表述不能适应层次结构的连接的最佳方式。

通常,你会设计一篇文档以便使节点能够匹配打印输出中的章节结构。但所讨论的内容偶尔也无法匹配。 因此,Texinfo为指明Info文件的节点和打印输出的章节结构提供分离的命令。

一般地,你通过一个按照惯例名为‘Top’的节点进入Info文件。该节点往往只包含对文件目的的简要总结, 以及囊括了文件剩余部分含有的内容的大菜单。从这个节点,你既可以一个接一个地系统地贯穿整个文件, 也可以转移到罗列于主菜单中的特定节点,或者你还可以在索引菜单中进行搜索而后直接进入含有你所需要 的信息的节点。另外,针对Info程序,你可以用命令行的方式指明特定的菜单项(参见Info 中的‘Top’一节)。

如果你希望象阅读打印的手册那样按照顺序通读Info文件,你可以反复地按SPC,或者你可以用 高级Info命令g *来得到整个文件。(参见Info文件‘Info’的节点‘Expert’。)

位于`info'目录中的`dir'文件作为整个Info系统的出发点。从这个文件,你可以到达 整个Info系统的每个文档的‘Top’节点。

如果你希望在URI中引用Info文件,你可以使用下面示例的语法(非官方的)。这对于Emacs/W3是有效的,例如:

info:///usr/info/emacs#Dissociated%20Press
info:emacs#Dissociated%20Press
info://localhost/usr/info/emacs#Dissociated%20Press

info程序本身并不识别任何形式的URI。

打印的书

Texinfo文件可以作为用于打印的书或者手册而进行格式化或者排版。 为此,你需要TeX,一种由Donald Knuth编写的功能强大、技术高超的排版程序。 (3)

基于Texinfo的书类似于任何其他排版印刷的作品:它拥有标题页、版权页、目录、前言 以及章、编号或者未编号的节和子节、页眉、交叉引用、页交和索引。

你甚至可以在不关心Texinfo是否转化为在线信息的情况下使用Texinfo写书。你可以为了 撰写打印出来的小说而使用Texinfo,甚至用来写打印的备忘录。即使因为使用电子邮件 撰写备忘录会更容易,我们并不建议你这样作。

TeX是通用目的的排版程序。Texinfo提供了含有在TeX对Texinfo文件进行排版时使用的 信息(定义或者)的文件‘texinfo.tex’。(‘texinfo.tex’ 告知TeX如何把Texinfo的@-命令转化成TeX可以处理以创建排版了的文档的TeX命令。) (‘texinfo.tex’含有关于打印文档的规范。你可以从 ftp://ftp.gnu.org/gnu/texinfo.tex 那里得到‘texinfo.tex’的最新版本。

通常,文档打印在8.5英寸x11英寸(216mmx280xx;这是缺省的大小)大的纸上,但你还可以 在7英寸x9.25英寸(178mmx235mm;@smallbook标明的大小)的纸或者欧洲A4 (@afourpaper)纸上打印。(参见打印“小”书一节。 还有,参见在A4纸上打印。)

通过修改‘texinfo.tex’中的参数,你可以改变打印文档的大小。此外,你还可以 改变进行格式化的打印文档的风格;比如说,你可以修改文字的大小和字体、每一段的缩进量、 以什么样的频率使用连字号等等。通过修改规范,你可以使一本书看起来庄严、古典而严肃, 或者是放松、年轻而愉快。

TeX可以自由地发行。它是用称为WEB的Pascal的超集编写的,而且即可以用Pascal进行编译, 也可以用C进行编译(使用附带在TeX的发行版中的转换程序)。(关于TeX的信息,参见 GNU Emacs手册中的‘TeX Mode’一节。)

TeX的功能很强,而且具备大量的特征。因为Texinfo文件必须既能够以Info的形式在只能显示 字符的终端上表达信息,又能够以排版书籍的形式表达信息,Texinfo所支持的格式化命令就 必然受到限制。

关于如何获取TeX的副本,参见如何得到TeX一节。

@-命令

在Texinfo文件中,告知TeX如何排版打印出的手册和告知makeinfo以及 texinfo-format-buffer如何创建Info文件的命令都是以`@' 打头的;它们被称为@-命令。例如,@node是指明一个节点的命令, 而@chapter则是指明一章开始的命令。

请注意:所有的@-命令,除了@TeX{}命令,都必须全部 使用小写字母。

Texinfo的@命令是严格受限的集合。严格受限使Texinfo文件既能够被TeX识别,又能够被把 它们转化为Info文件的代码识别成为可能。你可以在任何可以显示字母和数字的终端上显示 Info文件。类似地,你可以在种类繁多的打印机上打印由TeX产生的输出。

根据它们所作的和它们接收的参数(4), 你需要把@-命令写成单独的一行或者作为句子的一部分:

作为一般性的规则,如果命令会和其他文本混合在一起,就需要使用花括号;但如果命令处于 它所在行的开头,就不需要花括号。非字母命令,比如@:,是本规则的例外; 它们不需要花括号。

随着你获得关于Texinfo的经验,你将迅速地知道如何使用不同的命令:使用命令的不同方式 使得书写和阅读Texinfo文件比起所有的命令都使用完全相同的语法来说要容易些。(关于 @-命令的语法细节,参见@-命令的语法。)

常用语法惯例

本节叙述在所有Texinfo文档中应用的常用惯例。

警告: 不要在Texinfo文件中使用tab!TeX使用变宽度的字体, 这意味着它不能预定义一个在所有环境下都能工作的tab。因此,TeX把tab看作单个空格, 并且这不是它们看起来的样子。进一步,makeinfo没有对tab作特殊处理, 从而使tab在输出中显得于你的输入文件不相同了。

为了避免这个问题,Texinfo模式要求GNU Emacs在你按下TAB键的时候插入 多个空格。

还有,你可以在Emacs中运行untabify以便把区域中的tab转化成多个空格。

注释

你可以用@comment命令(可以简写为@c)在Texinfo文件中写 既不会出现在Info文件,也不会出现在打印手册中的注释。这些注释是为修订Texinfo文件的人 提供的。在@comment或者@c之后的一行中的所有内容都是注释; 行的剩余部分不会在Info文件和打印手册中出现。(通常,你可以在一行当中写@comment 或者@c,这样只有在@comment@c命令之后的 文本才不会出现;但有些作用于整行的命令,比如说@settitle@setfilename 除外。你不能在以这类命令开头的行中使用@comment或者@c。)

你可以使用@ignore@end ignore命令以便添加在Info文件和打印手册 中都不出现的大段文本。以命令作为行的开头,在单独的一行中使用这些命令(write each of these commands on a line of its own)。这两个命令之间的文本不会出现在处理后的输出中。 你可以把@ignore@end ignore用于书写注释。通常,@ignore@end ignore被用于包围应用于文档的Texinfo源文件,而不是文档的Info或者打印版本的 版权许可说明。

Texinfo文件必须含有什么

一般来说,Texinfo文件的名称以扩展名`.texinfo'`.texi'`.txi' 或者`.tex'结束。因为长扩展名能够为人类用户更清晰地描述文件的类型,所以长扩展名更好些。 短扩展名是为了不能处理长文件名的操作系统而准备的。

为了能够生成打印手册和Info文件,Texinfo文件必须以如下的行开头:

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

文件的内容写在这个开头之后,而后你必须以如下的行结束Texinfo文件:

@bye

‘\input texinfo’一行告知TeX使用文件‘texinfo.tex’,该文件 告知TeX如何把Texinfo的@-命令转化为TeX的排版命令。(注意反斜线的使用,‘\’; 这对TeX来说是正确的。)‘@setfilename’一行为Info文件提供了一个名称,并且 告知TeX去打开附属的文件。‘@settitle’一行为打印手册的页眉(或者页脚)指明 了一个标题。

在文件末尾占据单独以行的@bye告知格式化程序文件已经结束并停止格式化。

通常,你不必使用这样分散的格式,但还将包括模式设置以及在Texinfo文件的头部加上start-of-header 和end-of-header,就象:

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

在第一行中,`-*-texinfo-*-'使得Emacs在编辑文件的时候切换到Texinfo模式。

`@setfilename'`@settitle'行周围的@c行 是可选的,但为了对文件的一部分运行TeX或者Info,你需要它们。(关于详细信息,参见 头的开始一节。)

此外,你一般要为Texinfo文件提供一个标题页、索引以及类似的东西。但最少,可用于短文档, 需要开头的三行和末尾的一行。

Texinfo文件的六个组成部分

一般地,Texinfo文件所含有的多于最小的头和尾--它通常包含六个部分:

1. 头
命名了文件,告诉TeX使用那个定义文件,并且完成其它“家务”工作。
2. 概括的描述和版权
概括的描述和版权段描述了文档并且包含了Info文件的版权通告和版权许可。该段必须以 @ifinfo@end ifinfo命令包围,以便格式化程序仅仅把它放置在 Info文件中。
3. 标题和版权
标题和版权段包含了标题和版权页,以及打印手册的版权许可。该段必须包围在 @titlepage@end titlepage命令之间。标题和版权页只出现在打印 手册中。
4. ‘Top’节点和主菜单
主菜单含有整个Info文件的所有节点的完整菜单。它只出现在Info文件的‘Top’节点中。
5. 文本体
文档的文本体可能是类似于传统书籍或者百科全书的结构,也可能是自由形式的。
6. 结尾
结尾含有打印索引和生成目录的命令,还有单独占据一行的@bye命令。

一个简短的Texinfo文件示例

这里是一个完整但非常短小的含有六个部分的Texinfo文件。文件开头的三个部分,从‘\input texinfo’ 一直到‘@end titlepage’看起来比实际上更具有强制性。大部分内容是标准的样板;在你写手册的 时候,只要把你自己手册的名字插入该段就行了。(参见Texinfo文件的起点 一节。)

在下面,样本文本进行了缩进;对它注释则没有缩进。没有任何注释的完整文件在 一个样本Texinfo文件中给出。

第一部分:头

头既不在Info文件中出现,也不在打印输出中出现。它设置各种参数,包括Info文件的名称和在头中使用的标题。

\input texinfo   @c -*-texinfo-*-
@c %**start of header
@setfilename sample.info
@settitle Sample Document
@setchapternewpage odd
@c %**end of header

第二部分:概括的描述和版权

概括的描述和版权段不会出现在打印的文档中。

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

Copyright @copyright{} 1990 Free Software Foundation, Inc.
@end ifinfo

第三部分:标题页和版权

标题页段不会出现在Info文件中。

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

@c The following two commands start the copyright page.
@page
@vskip 0pt plus 1filll
Copyright @copyright{} 1990 Free Software Foundation, Inc.
@end titlepage

第四部分:‘Top’节点和主菜单

‘Top’节点含有用于Info文件的主菜单。因为打印手册使用目录而不是菜单,主菜单只在 Info文件中出现。

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

第五部分:文本体

体段含有文档的所有文本,但不含有索引和目录。本例演示了一个节点和一个含有列举表的章。

@node    First Chapter, Concept Index, Top,      Top
@comment node-name,     next,          previous, up
@chapter First Chapter
@cindex Sample index entry

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

Here is a numbered list.

@enumerate
@item
This is the first item.

@item
This is the second item.
@end enumerate

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

第六部分:文档的结尾

结尾段含有在节点中生成索引和自身未编号的章节,(通常)用于生成目录,的命令,以及 用于标记文档结束的@bye命令。

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

@printindex cp

@contents
@bye

结果

这里是样本第一章看起来所包含的内容:

This is the contents of the first chapter.

Here is a numbered list.

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

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

致谢与历史

Richard M. Stallman发明了Texinfo格式,编写了最初的处理器,并创建了从1.1版开始的本手册的 最初版本。1.1版以后,Robert J.Chassell大幅度地修订并扩充了手册。在3.8版以前,Brian Fox 对独立的Texinfo发行版负责,并编写了独立的makeinfoinfo。从 Texinfo 3.8版开始的随后的版本都是由Karl Berry更新的,他从手册的2.22版开始维护手册。

我们对为改进此项工作的所有人表示感谢,尤其是Fran@,{c}ois Pinard和David D. Zuhn,他们 不厌其烦地记录并报告错误和含义晦涩的地方;Melissa Weisshaus频繁地照看通常是几乎相同的版本, 我们对她致以特别的感谢。不止疲倦的Eli Zaretskii和Andreas Schwab提供了难以计数的补丁。 Zack Weinberg完成了几乎不可能完成的在`texinfo.tex'中实现宏语法的工作。许多其它人 贡献了不定和建议,我们充满谢意地在‘ChangeLog’文件中列举出他们。我们的错误是 我们自己的。

一点历史:七十年代在CMU,Brian Reid开发了一种名为Scribe的程序和格式,为打印文档排版。 和Texinfo一样,它使用@字符引入命令,并且努力描述文档内容而不是格式。

一次同时,MIT的人们开发了另一个区别不是太大的格式Bolio。而后它作为排版语言:BoTeX被转化 以使用TeX。

BoTeX只能用作文档排版语言,不能作为在线文档。Richard Stallman(RMS)同时使用Bolio和BoTeX。 他还开发了精美的称为Info的在线求助格式,而后把BoTeX和Info结合起来创造了TexInfo,一种既打算用于 在线阅读又打算用于打印硬拷贝的文本排版语言。

使用Texinfo模式

你可以用你选择的任何文本编辑器编辑Texinfo文件。Texinfo文件于其它ASCII文件没有不同之处。然而, GNU Emacs含有称为Texinfo模式的特殊模式,它提供了Emacs命令和工具以助于简化你的工作。

本章描述GNU Emacs的Texinfo模式的功能而不是任何Texinfo格式化语言的功能。如果你是从头阅读本文档, 一直到这里,你可以先大略地浏览本章,在阅读随后的详细叙述Texinfo格式化语言的章节之后再回过头来细看。

Texinfo模式为处理Texinfo文件提供了特殊的功能。你可以:

可能最有用的特征是插入常用的@-命令以及创建节点指针和菜单。

常用的GNU Emacs编辑命令

在大多数情况下,常用的文本模式命令以相同的方式在Texinfo模式下工作。Texinfo模式向GNU Emacs 的通用编辑功能中添加了新的编辑命令和工具。主要的不同在于填充。在Texinfo模式下,对段分隔变量 和语法表进行的重新定义以便使应该占据单独一行的命令不至于不经意地被包含在段落中。因此, M-qfill-paragraph)命令将填充段但不会把索引命令和相邻的行混合到 段中去。

此外,Texinfo还把变量page-delimiter设置成texinfo-chapter-level-regexp 的值;在缺省情况下,这是匹配章和它们的等价实体,比如说附录,的命令的常规表达式。把这个值用于页分隔器, 你可以使用C-x ]forward-page)命令和C-x [backward-page)命令 在章的标题之间转移,还可以用C-x pnarrow-to-page)命令转移到(narrow to) 某一章。(关于页命令的细节,参见GNU Emacs手册手册中的‘Pages’一节。)

你可以把Texinfo文件命名为任何你希望的名字,但按常规是使用‘.texinfo’‘.texi’‘.txi’或者`.tex'之一作为扩展名。长扩展名更好些,因为它们更清晰, 但较短的扩展名可能在限制了文件名长度的操作系统里是必须的。当你打开具有‘.texinfo’‘.texi’或者‘.txi’扩展名的文件时,GNU Emacs自动进入Texinfo模式。 还有,当你打开第一行是`-*-texinfo-*-'的文件时,Emacs也会切换到Texinfo模式。 如果你处于其它模式并且希望切换到Texinfo模式,键入M-x texinfo-mode

类似于其它Emacs特征,你可以按照你的意愿定制或增强Texinfo模式。特别地,键的定义很容易修改。 这里说的键定义是指的缺省或标准的定义。

插入常用的命令

Texinfo模式提供了把不同使用频率的@-命令插入缓冲区的命令。你可以使用这些命令来减少按键。

通过连续两次按下C-c而后再按@-命令的第一个字符,就可以插入命令:

C-c C-c c
M-x texinfo-insert-@code
插入@code{}并把光标放在花括号之间。
C-c C-c d
M-x texinfo-insert-@dfn
插入@dfn{}并把光标放在花括号之间。
C-c C-c e
M-x texinfo-insert-@end
插入@end并试图正确地插入下一个单词,比如说‘example’或者 ‘table’。(该命令不能正确地处理嵌套的表,它插入的是对应前面最近列表的单词。)
C-c C-c i
M-x texinfo-insert-@item
插入@item并且把光标放在下一行的开头。
C-c C-c k
M-x texinfo-insert-@kbd
插入@kbd{}并把光标放在花括号之间。
C-c C-c n
M-x texinfo-insert-@node
插入@node和一个按顺序给出‘Next’、‘Previous’和‘Up’节点的注释行。 把光标放在@node之后。
C-c C-c o
M-x texinfo-insert-@noindent
插入@noindent并把光标放在下一行的开头。
C-c C-c s
M-x texinfo-insert-@samp
插入@samp{}并把光标放在花括号之间。
C-c C-c t
M-x texinfo-insert-@table
插入一个在SPC之后的@table,并且把光标放在SPC之后。
C-c C-c v
M-x texinfo-insert-@var
插入@var{}并且把光标放在花括号之间。
C-c C-c x
M-x texinfo-insert-@example
插入@example并且把光标放在花括号之间。
C-c C-c {
M-x texinfo-insert-braces
插入{}并且把光标放在花括号之间。
C-c C-c }
C-c C-c ]
M-x up-list
从花括号之间向前移动到闭合花括号之后。键入C-c C-c ]要比键入C-c C-c } 容易些,但C-c C-c }更容易记忆;因此两种键入序列都可以使用。(还有,你可以通过键入 C-f从花括号之中移出。)

为了在已经存在的单词周围放置诸如@code{...}之类的命令,可以把光标放在单词 之前,并键入C-u 1 C-c C-c c。这使得编辑现有的普通文本变得简单了。前置参数的值告诉Emacs 应该把光标后的几个单词放入花括号之中---‘1’表示一个单词、‘2’表示两个 单词,等等。可以用负参数来表示光标以前的单词。如果你不给出前置参数,Emacs就插入@-命令字符串并把光标 放在花括号之间。只有那些在一行中操作一个或多个单词的@-命令,比如说@kbd@var, 才支持这一功能。

这一插入命令集合是在分析了在GNU Emacs ManualGDB Manual中各种@-命令使用 的频率之后确定的。如果你希望添加你自己的命令,你可以把键盘宏捆绑到一个键上、使用缩写或者在 ‘texinfo.el’中扩展代码。

C-c C-c C-dtexinfo-start-menu-description)是一个与其他插入命令不同的插入 命令。它在为菜单条目行提供描述的空白中插入节点的章或节的标题。(菜单条目含有三个部分,条目名、节点名以及 描述。只有节点名是必须的,但描述有助于解释节点的内容。参见菜单的各个部分 一节。)

为了使用texinfo-start-menu-description,把光标放在菜单条目行中并且键入C-c C-c C-d。 该命令寻找并复制与节点名相关联的标题,并把标题作为描述插入菜单条目;它把光标定位在被插入文本的开头以便你修改它。 如果菜单条目已经含有描述,该功能就不插入标题。

该命令只有助于编写描述;它不能作全部的工作。由于标题通常使用与节点名相同的单词,但有价值的描述往往与节点名不同, 因此你必须编辑插入的文本。

显示文件的章节结构

你可以通过使用C-c C-s命令(texinfo-show-structure)以显示Texinfo文件的章节结构。该命令 通过列举以诸如@chapter@section之类的@-命令开头的行来显示章节结构。它构造目录的内容。 这些行在另一个称为‘*Occur*’的缓冲区中显示。在那个缓冲区中,你可以把光标放在某一行上并且用C-c C-c 命令(occur-mode-goto-occurrence)转移到在Texinfo文件中对应的位置。

C-c C-s
M-x texinfo-show-structure
显示Texinfo文件中的@chapter@section以及类似的行。
C-c C-c
M-x occur-mode-goto-occurrence
转移到对应于‘*Occur*’缓冲区中光标所在行在Texinfo文件中所对应的行。

如果你通过输入C-u C-c C-s以带有前置参数的方式调用texinfo-show-structure,它就不仅仅 列出含有诸如@chapter@section之类@-命令的行,而且还列出含有@node 的行。你可以用带有前置参数的方式调用texinfo-show-structure命令以便检查@node行中的 ‘Next’、‘Previous’和‘Up’指针是否正确。

通常,在你编写手册时,你往往只关心当前章的结构。在这种情况下,你可以用C-x n nnarrow-to-region) 命令来标记你所感兴趣的缓冲区的特定区域,而且这时texinfo-show-structure将只处理该区域中的内容。为了重新作用于 整个缓冲区,使用C-x n wwiden)。(关于限定区域命令的更多信息,参见GNU Emacs手册 中的‘Narrowing’一节。)

除了提供texinfo-show-structure命令之外,Texinfo模式还设置了页分隔变量以便于章级别的@-命令相匹配。这使得你可以用 C-x ]forward-page)和C-x [backward-page)命令在章之间往复移动,可以 用C-x pnarrow-to-page)把当前区域限定为所在的章。关于页命令的更多信息,参见GNU Emacs手册 中的‘Page’一节。

更新节点和菜单

Texinfo模式提供了自动创建或更新菜单和节点指针的命令。由于这些命令几乎总是在你写完Texinfo文件之后用于更新指针,所以它们被称为 “更新”命令;但你可以用它们把‘Next’、‘Previous’和‘Up’指针插入空的@node行,或者在空文件中创建菜单。

如果你不使用更新命令,你就必须手写菜单和节点指针,这是一项乏味的工作。

你可以用更新命令来:

你还可以用这些命令更新某个区域或者整个Texinfo文件中的所有节点和菜单。

更新命令只能处理采用类似书籍的层次结构的普通Texinfo文件。在这样的文件里,结构化命令行必须是@node行的下一行, 但‘Top’@node行除外。(结构化命令行指的是以@chapter@section或者 类似命令开头的行。)

你可以在@node行的下一行,或者在一个@comment行的下一行,或者在一个@ifinfo 下一行使用结构化命令。@node行和结构化命令行之间的间隔不能超过一行;而且这一行只能是@comment 行或者@ifinfo行。

作用于整个缓冲区的命令要求‘Top’节点的下一行是带有@chapter或相同级别命令的节点。菜单更新命令将不会为只含有 @chapter级节点的Texinfo文件创建主菜单!菜单更新命令只在节点为低层次的节点创建菜单。为了创建章菜单, 你必须提供‘Top’节点。

由于引用其它Info文件的菜单条目并不引用当前缓冲区中的节点,菜单更新命令会删除这种菜单条目。这是菜单更新命令的一个缺陷。除了使用 菜单条目,用交叉引用来引用其它Info文件会更好些。任何更新命令都不会影响交叉引用。

Texinfo模式由五个更新命令是最常用的:其中两个是更新节点或一个节点(或区域)菜单的指针的;另两个用于更新文件中的所有节点指针和 菜单;最后一个,texinfo-master-menu命令,则用于为整个文件生成主菜单,也可以更新整个Texinfo文件中的所有节点和菜单。

texinfo-master-menu命令是基本的命令:

C-c C-u m
M-x texinfo-master-menu
创建或更新包含了所有其它菜单的主菜单(如果已经存在的菜单含有描述,这些描述页回合并进来)。 带有参数(如果是交互状态,就是前置参数,C-u)时,在创建主菜单之前首先创建或更新缓冲区中所有的节点和所有的普通 菜单。(关于主菜单的详情,参见‘Top’节点和主菜单一节。)为了使texinfo-master-menu 能够工作,Texinfo文件必须汉有‘Top’节点和至少一个后续节点。在对Texinfo文件进行大幅度修改之后,你可以这样输入:
C-u M-x texinfo-master-menu
或
C-u C-c C-u m
这将立即一次性地更新所有节点和所有菜单。

其它主要的更新命令完成类似的工作,设计它们的目的是使得人们可以在编写Texinfo文件的时候更新节点或菜单。

这些命令是:

C-c C-u C-n
M-x texinfo-update-node
为光标所在的节点插入‘Next’、‘Previous’和‘Up’指针(例如,把指针添加到光标之前的@node行中)。 如果@node行已经含有‘Next’、‘Previous’或‘Up’指针,就首先删除旧指针而后插入新指针。在带有参数 (如果是交互模式,就是前置参数,C-u)时,该命令更新区域中的所有@node行(区域指的是光标 的标记之间的文本)。
C-c C-u C-m
M-x texinfo-make-menu
在光标所在的节点内创建或更新菜单。在带有参数(如果时交互模式,C-u就作为前置参数),本命令为处于当前区域 之内或与当前区域重叠的节点创建或更新菜单。 只要texinfo-make-menu是更新已经存在的菜单,原菜单含有的描述都保留在新菜单中。这是通过从现存菜单中把 描述复制到具有相同节点名的新菜单条目中来实现的。如果节点名不同,描述就不会被复制到新菜单中。
C-c C-u C-e
M-x texinfo-every-node-update
为缓冲区中的所有节点插入或者更新‘Next’、‘Previous’和‘Up’指针。
C-c C-u C-a
M-x texinfo-all-menus-update
创建或更新缓冲区中的所有菜单。当带有参数(如果是交互模式,C-u就作为前置参数)时,在处理菜单之前首先插入或更新 所有的节点指针。如果主菜单已经存在,texinfo-all-menus-update命令就更新它;但如果主菜单不存在,本命令是不会 创建新的主菜单的。(用texinfo-master-menu命令创建新的主菜单。)在编写不必含有主菜单的文档时,你可以用下面 的命令:
C-u C-c C-u C-a
或
C-u M-x texinfo-all-menus-update
这将更新所有的节点和菜单。

变量texinfo-column-for-description指明了菜单描述应该对齐到那一行。虽然一般需要把它的值减少到24左右,但在 缺省状态下,它的值是32。你可以用M-x edit-options命令(参见GNU Emacs手册中的‘Editing Variable Values’一节)或 M-x set-variable命令(参见GNU Emacs手册中的‘Examining and Setting Variables’一节)设置该变量。

此外,texinfo-indent-menu-description命令可以用于把已经存在的菜单中的描述对齐到指定的列。最后,如果你愿意,你可以用 texinfo-insert-node-lines命令把遗漏的@node行添加到文件中。(详情请参见 其它更新命令一节。)

更新需求

为了使用更新命令,你必须把Texinfo文件的层次结构按照章、节、子节及类似的东西来组织。当你创建手册的层次结构时,不要一次‘下行’多个层次: 你可以在‘Top’节点之后放置章,而不世界;你可以在章之后放置节,但不是子节。但你可以一次‘上行’任意多个层次--例如,从子节到章。

在除了‘Top’之外的每个@node行的下一行中,都应该是带有诸如@chapter@section@unnumberedsubsec之类结构命令的行。

每个@node行/结构命令行的组合形式如下:

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

或者是这样(没有@comment行):

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

在这个例子中,‘Comments’即是节点的名字又是节的名字。下一个节点称为‘Minimum’,上一个节点称为‘Conventions’。 ‘Comments’节处于‘Overview’节点,这指明了‘Up’指针。(除了@comment行,你还可以编写@ifinfo行。)

如果文件汉有‘Top'节点,它的名字就必须是‘top’‘Top’,而且必须是文件的第一个节点。

菜单更新命令在章之中创建节的菜单,在节之中创建子节的菜单,等等。这意味着如果你想提供章的菜单,你就必须提供‘Top’节点。

顺便提一句,makeinfo命令将为按层次组织但缺少‘Next’、‘Previous’和‘Up’指针的Texinfo文件创建Info文件。因此,如果你 确信你的Texinfo文件将用makeinfo进行格式化,那么你就不必使用更新节点命令。(关于makeinfo的详情,参见 创建Info文件。)但是,makeinfotexinfo-format-...命令都要求 你在文件中插入菜单。

其它更新命令

除了五个主要的更新命令,Texinfo模式还有一些不太常用的更新命令:

M-x texinfo-insert-node-lines
在Texinfo文件的区域中的@chapter@section和其他节命令之前,插入遗漏了的@node行。 在带有参数的时候(如果处于交互状态,C-u就作为前置参数),texinfo-insert-node-lines就不仅仅插入 @node行,它还会把对应节点名作为章或者节的标题插入@node行。此外,它在已经存在但缺少的名字 @node行中,把节点名作为表插入@node行。因为节点名一般要比节或章的标题简单,所以你必须在插入之后 编辑节点名。例如,下面我们把整个缓冲区标记为区域并且在整个区域中插入@node行和标题:
C-x h C-u M-x texinfo-insert-node-lines
这条命令把节点名作为标题插入@node行;作为不同的动作,texinfo-start-menu-description命令(参见 插入常用命令)把标题作为描述插入菜单条目。然而,在两种情况下,你都需要编辑插入的文本。
M-x texinfo-multiple-files-update
在由多个分立的文件创建的文档中更新节点和菜单。如果把C-u作为前缀参数,就在顶层文件中创建并插入主菜单。带有数值前置 参数时,比如说C-u 2,就首先更新所有引入文件的全部的菜单和全部的‘Next’、‘Previous’和‘Up’指针,而后在顶层文件 中创建并插入主菜单。在@include文件的附录中描述了texinfo-multiple-files-update命令。参见 texinfo-multiple-files-update
M-x texinfo-indent-menu-description
把光标之后的菜单中的所有描述对齐到指定的列。你可以用本命令为描述腾出更多的空间。在带有参数(在交互状态下,把C-u作为 前置参数)时,texinfo-indent-menu-description命令对区域中的所有菜单和所有描述进行对齐。然而,本命令不会对多行 描述的第二行及以后的行进行对齐。
M-x texinfo-sequential-node-update
把当前节点后面节点的节点名和前面节点的节点名作为‘Next’或‘Previous’指针插入到当前节点,而不管节点本身的层次结构。这意味着子节的 ‘Next’节点可能是下一章。按顺序编排的节点对于小说或者其它按照顺序阅读的文档来说是有用的。(但是,在Info中,g *命令能够 使你按顺序通读文件,所以顺序编排的节点并不是必须的。)在带有参数的时候(在交互模式下,是前置模式),texinfo-sequential-node-update 命令按顺序更新区域中的所有节点。

把缓冲区内容格式化为Info

Texinfo模式提供了几条把整个Texinfo文件或Texinfo文件的一部分格式化为info的命令。通常,在你编写文档的时候,你只需要格式化 文件的一部分,也就是一个区域。

为了对区域进行格式化,你可以使用texinfo-format-region命令或者makeinfo-region命令:

C-c C-e C-r
M-x texinfo-format-region
C-c C-m C-r
M-x makeinfo-region
把当前的区域格式化为Info。

为了对整个文件进行格式化,你可以使用texinfo-format-buffer命令或者makeinfo-buffer命令:

C-c C-e C-b
M-x texinfo-format-buffer
C-c C-m C-b
M-x makeinfo-buffer
把当前的缓冲区格式化为Info。

例如,写完Texinfo文件之后,你可以输入如下命令:

C-u C-c C-u m
或者
C-u M-x texinfo-master-menu

这将更新所有的节点和菜单。而后输入下面的命令以创建Info文件:

C-c C-m C-b
或者
M-x makeinfo-buffer

为了使TeX或Info格式化命令能够工作,文件的头就必须包括一个含有@setfilename的行。

关于格式化为Info的详细信息,参见创建Info文件一节。

格式化与打印

对Texinfo文件进行排版和打印是一个多步骤的过程,第一步是为打印创建文件(称为DVI文件),而后是打印文件。有时,你还会创建索引。 为了创建索引,你必须在运行tex排版命令之后运行texindex命令;尔后你必须再次运行tex。 也可以运行能够自动根据需要创建索引的texi2dvi命令(参见texi2dvi进行格式化)。

通常,在你编写文档时,你只需要排版或打印文件的一部分以便观察它的效果。你可以使用texinfo-tex-region和相关的命令来达到目的。 使用texinfo-tex-buffer命令可以格式化缓冲区的所有部分。

C-c C-t C-b
M-x texinfo-tex-buffer
对缓冲区运行texi2dvi。除了对缓冲区运行TeX之外,本命令还自动根据需要创建或更新索引。
C-c C-t C-r
M-x texinfo-tex-region
对区域运行TeX。
C-c C-t C-i
M-x texinfo-texindex
运行texindex以便对用texinfo-tex-region格式化的Texinfo文件的索引进行排序。texinfo-tex-region 命令并不自动运行texindex;它只运行tex排版命令。你必须在调用texindex命令对原始索引文件进行排序 之后再次运行texinfo-tex-region命令。(通常,在你对区域进行格式化的时候并不格式化索引,而在格式化缓冲区的时候才格式化索引。 现在有了texi2dvi命令,就不怎么需要甚至不需要本命令了。)
C-c C-t C-p
M-x texinfo-tex-print
打印先前用texinfo-tex-buffertexinfo-tex-region格式化的文件(或文件的一部分)。

为了使texinfo-tex-region或者texinfo-tex-buffer能够工作,文件必须以`\input texinfo'行起头, 而且必须含有@settitle行。文件必须以只含有@bye的行结尾。(当你使用texinfo-tex-region时,你必须 在@settitle行的前后写上start-of-header行和end-of-header行。)

关于对其它TeX相关命令的描述,比如说tex-show-print-queue,参见格式化和打印硬拷贝

Texinfo模式概述

在Texinfo模式中,每组命令都含有以相同按键开头的缺省按键设置。所有Texinfo模式定制的命令都以C-c开头。按键有一定的助记性(mnemonic)。

Insert Commands

插入命令通过键入两个C-c以及要插入@-命令的第一个字符来调用。(对应于‘custom insert’,用C-c C-i可能更容易记忆。但 C-c C-c输入得更快。)

C-c C-c c       插入‘@code’.
C-c C-c d       插入‘@dfn’.
C-c C-c e       插入‘@end’.
C-c C-c i       插入‘@item’.
C-c C-c n       插入‘@node’.
C-c C-c s       插入‘@samp’.
C-c C-c v       插入‘@var’.
C-c C-c {       插入花括号。
C-c C-c ]
C-c C-c }       光标移到闭合的花括号之后。

C-c C-c C-d     把节点的节标题插入到菜单条目行中描述的位置上。

现实结构

texinfo-show-structure命令通常在限定的区域(narrowed region)中使用。

C-c C-s         列举所有的标题。

主更新命令

texinfo-master-menu命令创建主菜单;而且还可以用于更新文件中的所有节点和菜单。

C-c C-u m
M-x texinfo-master-menu
                创建或更新主菜单。

C-u C-c C-u m   以C-u为前置参数,首先创建或更新所有节点和常规菜单,而后创建主菜单。

更新指针

更新指针命令通过键入C-c C-u而后接着键入C-n以便调用texinfo-update-node,或者接着键入 C-e以便调用texinfo-every-node-update

C-c C-u C-n     更新节点。
C-c C-u C-e     更新缓冲区中的所有节点。

更新菜单

更新菜单命令通过键入C-c C-u而后接着键入C-m以便调用texinfo-make-menu,或者接着键入 C-a以便调用texinfo-all-menus-update。为了同时更新节点和菜单,在键入C-c C-u C-a 之前键入C-u

C-c C-u C-m     创建或更新某个菜单。

C-c C-u C-a     创建或更新缓冲区中的所有菜单。

C-u C-c C-u C-a 在带有C-u前置参数的情况下,首先创建或更新所有节点,而后创建或更新所有菜单。

格式化为Info

为了调用以Emacs Lisp编写的Info格式化命令,就首先键入C-c C-e随后键入C-r以使命令作用于当前区域,或者随后 键入C-b以使命令作用于整个缓冲区。

Info格式化命令是用C编写。为了调用makeinfo程序,可以首先键入C-c C-m接着键入C-r以使命令 作用于当前区域,或者随后键入C-b以使命令作用于整个缓冲区。

使用texinfo-format...命令:

C-c C-e C-r     格式化当前区域。
C-c C-e C-b     格式化当前缓冲区。

使用makeinfo

C-c C-m C-r     格式化当前区域。
C-c C-m C-b     格式化缓冲区。
C-c C-m C-l     更新(Recenter)makeinfo输出缓冲区。
C-c C-m C-k     中断(Kill)makeinfo的格式化工作。

排版与打印

为了调用TeX排版和打印命令,可以键入C-c C-t,而后是控制命令:键入C-r调用texinfo-tex-region、 键入C-b调用texinfo-tex-buffer,等等。

C-c C-t C-r     对区域运行TeX。
C-c C-t C-b     对整个缓冲区运行texi2dvi。
C-c C-t C-i     运行texindex。
C-c C-t C-p     打印DVI文件。
C-c C-t C-q     显示打印队列。
C-c C-t C-d     从打印队列中删除工作。
C-c C-t C-k     中断(Kill)当前的TeX格式化工作。
C-c C-t C-x     退出当前停止了的TeX格式化工作。
C-c C-t C-l     更新(Recenter)输出缓冲区。

其它更新命令

其它的更新命令由于并不常用,所以没有标准的键定义。

M-x texinfo-insert-node-lines
                在区域中插入遗漏的@node行。在带有前置参数C-u的情况下,把节标题用作节点名。

M-x texinfo-multiple-files-update
                更新多文件文档。在带有前置参数C-u 2的情况下,首先在所有引入文件中创建或更新全部的节点和菜单。

M-x texinfo-indent-menu-description
                对菜单项的描述进行对齐。

M-x texinfo-sequential-node-update
                按照严格的顺序插入节点指针。