「ptx(1)」-

生成文件的置换索引

命令语法格式

ptx [OPTION]… [INPUT]… (without -G)
ptx -G [OPTION]… [INPUT [OUTPUT]]

命令描述

命令ptx读取文本文件,并生成置换索引,每个关键字包含其上下文中。关于什么是置换索引参考「什么是置换索引(permuted index)?」部分中的介绍。

请注意,对于任何作为选项值的文件参数,或作为输入文本文件,可以使用单个短划线(“-”),在这种情况下,表示使用标准输入。但是,每个程序调用多次使用此约定是没有意义的。

以下各节介绍了各个选项。

命令支持的选项及含义

常规选项:影响一般程序行为的选项

–help
显示帮助信息。

–version
显示版本信息并退出。

-G, –traditional
选项-G(–traditional)禁用所有GNU扩展功能,并使用传统模式,因此会引入一些限制,并更改程序的几个默认选项值。如果未指定-G选项,则始终启用GNU扩展。在本文档中的适当位置记录了命令ptx的GNU扩展。有关完整列表,请参阅「在ptx中的兼容性」部分。

当启用GNU扩展时,选项后可能有零个、一个、多个文件参数FILE:

  • 如果没有文件参数FILE,则程序将从标准输入中读取数据。
  • 如果有一个或多个文件,它们指的是输入文件名,这些文件都是依次被读取的,就好像所有输入文件都被连接在一起一样。但是,每个文件之间存在完整的上下文中断,并且在要求自动引用时,文件名和行号会引用单个文本输入文件。
  • 在所有情况下,程序都将生成的置换索引输出到标准输出。

当未启用GNU扩展时,即当程序在传统模式下运行时,除选项外可能还有零个、一个、两个参数:

  • 如果没有参数,程序将读取标准输入,并将置换索引输出到标准输出中。
  • 如果只有一个参数,则该参数被视为要读取的文本,而不是从标准输入中读取。
  • 如果给出了两个参数,则它们分别为要读取的输入文件名和要生成的输出文件名。请注意,在这种情况下,第二个参数给出的文件内容将被销毁。此行为由System V的ptx兼容性决定;在GNU标准中,通常不鼓励出现非选项引入的输出参数。

如前所述,此选项禁用所有GNU扩展到ptx并切换到传统模式。

字符集选择:基础字符集注意事项

正如现在的设置,命令ptx(1)假定输入文件使用8位ISO 8859-1代码编码(也称为Latin-1字符集),除非ptx是为MS-DOS编译的,在这种情况下它使用IBM-PC的字符集。(GNU ptx不再适用于较小的MS-DOS机器。)与7位ASCII相比,字母字符集不同;这改变了正则表达式匹配的行为。因此,用于关键字的默认正则表达式允许外来字母或变音字母。然而,关键字排序仍然很粗糙;它非常盲目地遵循基本的字符集排序。

-f, –ignore-case
进行排序是忽略字母的大小写。

输入处理:输入字段,上下文和关键字选择

-b file, –break-file=file
此选项提供了一种替代(-W)方法,用于描述哪些字符组成单词。它引入了一个文件file,该文件包含一个字符列表,这些字符不能是一个单词的一部分;此文件称为“Break文件”。任何不属于Break文件的字符都是单词成分。如果同时指定-b和-W选项,则-W优先,-b被忽略。

当启用GNU扩展时,避免换行符(LF)作为中断字符的唯一方法是在文件中写入所有中断字符,但是不包含换行符(LF),甚至不在文件的末尾使用换行符(LF)。禁用GNU扩展时,即使未包含在Break文件中,空格、制表符、换行符也始终被视为中断字符。

-i file, –ignore-file=file
与此选项关联的文件file包含一个单词列表,这些单词永远不会被视为一致输出中的关键字。它被称为“Ignore文件”。该文件每行只包含一个单词;单词的行结束分离不受-S选项的值的约束。

-o file, –only-file=file
与此选项关联的文件file包含了将保留在一致输出中的单词列表;此文件中未提及的任何单词都将被忽略。该文件称为“Only文件”。该文件每行只包含一个单词;单词的行结束分离不受-S选项的值的约束。

Only文件没有默认值。如果同时指定了“Only文件“和“Ignore文件”,则仅当单词列在“Only文件“,并且不在“Ignore文件”中时,该单词才会被视为关键字。

-r, –references
在每个输入行上,非空白字符的前导序列将被视为一个引用,其目的是在结果置换索引中标识此输入行。有关参考生成的详细信息,请参阅「输出格式」部分。使用此选项可更改选项-S的默认值。

使用此选项,程序不会非常努力地从输出中的上下文中删除引用,但是当上下文完全在换行符结束时,它成功执行此操作。如果选项-r与-S默认值一起使用,或者禁用GNU扩展时,则始终满足此条件,并且完全从输出上下文中排除引用。

-S regexp, –sentence-regexp=regexp
此选项选择哪个正则表达式将描述行的结尾或句子的结尾。事实上,这个正则表达式不是行尾或句子结尾之间的唯一区别,输入行边界在此选项之外没有特殊意义。默认情况下,当启用GNU扩展,并且未使用-r选项时,将使用句末。在这种情况下,此正则表达式是从GNU Emacs导入的:

[.?!][]\”‘)}]*\\($\\|\t\\| \\)[ \t\n]*

每当禁用GNU扩展,或使用-r选项时,都会使用行尾;在这种情况下,默认正则表达式只是:

\n

使用空的正则表达式相当于完全禁用行尾或句子结束识别。在这种情况下,整个文件被认为是单个大行或句子。用户可能希望通过选项-F “”禁止所有截断标志生成。请参阅GNU Emacs手册中的「正则表达式语法」。

当关键字碰巧接近输入行或句子的开头时,这通常会在输出上下文行的开头创建一个未使用的区域;当关键字碰巧接近输入行或句子的末尾时,这通常会在输出上下文行的末尾创建一个未使用的区域。该程序试图通过包含它们中的上下文来填充那些未使用的区域;输入行或句子的尾部用于填充输出行左侧的未使用区域;输入行或句子的头部用于填充输出行右侧的未使用区域。

为了方便用户,通过ptx本身识别来自C语言的许多常见的反向转义转义序列,并将其转换为相应的字符。

-W regexp, –word-regexp=regexp
此选项选择将描述每个关键字的正则表达式。默认情况下,如果启用了GNU扩展,则单词是一系列字母;使用的正则表达式是’\w+’。禁用GNU扩展时,默认情况下,任何以空格、制表符、换行符结尾的字词;使用的正则表达式是'[^\t\n]+’。

空正则表达式相当于不使用此选项。请参阅GNU Emacs手册中的「正则表达式语法」。

为了方便用户,在C语言中许多常用的反向转义转义序列可以被识别,并由ptx本身转换成相应的字符。

输出格式:输出格式的类型和字段大小

输出格式主要由下列描述中的-O和-T选项控制。如果既未指定-O,也未指定-T,并且如果启用了GNU扩展,则程序将选择适合傻终端的输出格式。每个关键字出现都输出到一行的中心,由左右上下文包围。每个字段都是正确对齐的,因此可以很容易地观察到一致性输出。作为一项特殊功能,如果通过选项-A选择自动引用,并在左上下文之前输出,即,如果未选择选项-R,则在引用之后添加冒号,这与GNU Emacs下一个错误处理很好地接口。在此默认输出格式中,每个空白字符(如换行符和制表符)仅仅更改为一个空格,无需特殊尝试压缩连续空格。这可能在将来发生变化。除了那些空白字符外,底层的256个字符集的每个其他字符都是逐字传输的。

输出格式由以下选项进一步控制。

-g number, –gap-size=number
选择输出行上的字段之间的最小空白间隙的大小。

-w number, –width=number
选择每条最终行的最大输出宽度。如果使用引用,则根据选项-R的值来决定他们是包含或排除在最大输出宽度中。如果未选择此选项,即在左上下文之前输出引用时,最大输出宽度会考虑所有引用的最大的长度。如果选择此选项,即在右上下文之后输出引用时,最大输出宽度不考虑引用占用的空间,也不考虑它们之前的间隙。

-A, –auto-reference
选择自动参考。每个输入行都有一个由文件名和行号组成的自动引用,它们之间有一个冒号。但是,在读取标准输入时,文件名将为空。如果同时选择-A和-r,则仍会读取并跳过输入参考,但在输出时使用自动参考,从而覆盖输入中参考。

-R, –right-side-refs
在默认输出格式中,当未使用选项-R时,选项-r或-A的效果产生的任何引用都将放置在左上下文之前的输出行的最左侧。使用默认输出格式时,如果指定了-R选项,则引用将放置在右上下文之后的每个输出行的结尾。对于任何其他输出格式,选项-R将被忽略,但有一个例外:使用-R时,在-w给出的总输出宽度中,不考虑引用的宽度。

每当禁用GNU扩展时,都会自动选择此选项。

-F string, –flag-truncation=string
此选项将要求使用字符串string报告输出中的任何截断。大多数输出字段理论上延伸到当前行或当前句子的开头或结尾,如选项-S所选。但是有一个允许的最大输出行宽,可以通过选项-w进行更改,这可以为各种输出字段进一步划分空间。当一个字段必须被截断时,因为它不能超出当前行的开头或适应结尾,则会发生截断。默认情况下,使用的字符串string是单斜杠,如-F /。

字符串可能有多个字符,如-F …。此外,在string为空(-F“”)的特定情况下,禁用截断标记,并且在这种情况下不附加截断标记。

-M string, –macro-name=string
选择另一个要使用的字符串,而不是’xx’,同时生成适合nroff、troff、TeX的输出。

-O, –format=roff
选择适合nroff或troff处理的输出格式。每个输出行看起来像:

.xx “tail” “before” “keyword_and_after” “head” “ref”

因此可以编写一个’.xx’的roff宏来处理输出排版。这是禁用GNU扩展时的默认输出格式。选项-M可用于将“xx”更改为另一个宏名称。

在这种输出格式中,每个非图形字符(如换行符和制表符)仅仅更改为一个空格,没有特殊的尝试来压缩连续的空格。每个引号字符(‘”‘)会被加倍,因此它将由nroff或troff正确处理。

-T, –format=tex
选择适合TeX处理的输出格式。每个输出行看起来像:

\xx {tail}{before}{keyword}{after}{head}{ref}

所以可以写一个\xx定义来处理输出排版。请注意,当未生成引用时,即,既未选择-A选项也未选择选项-r,则禁止每个\xx调用中的最后一个参数。选项-M可用于将“xx”更改为另一个宏名称。

在这种输出格式中,一些特殊字符,如‘$’, ‘%’, ‘&’, ‘#’, ‘_’会自动用反斜杠保护。括号'{‘,’}’受反斜杠和一对美元符号保护(强制数学模式)。反斜杠本身产生序列\\{}。音调符号和波浪变相标记分别产生序列^\{ }和~\{ }。底层字符集的其他变音符号字符尽可能地产生适当的TeX序列。其他非图形字符(如换行符和制表符)以及不属于ASCII的所有其他字符仅仅更改为一个空格,没有特别尝试压缩连续空格。

兼容性

此版本的ptx包含System V的ptx中不存在的一些功能。除非被其他命令行选项覆盖,否则使用-G命令行选项可以抑制这些额外功能。有些GNU扩展无法通过覆盖来恢复,因此如果你关心GNU扩展,则简单的规则是避免使用-G。以下是此程序与System V的ptx之间的差异。

  1. 该程序可以一次读取多个输入文件,它总是在标准输出上写入结果的一致性。另一方面,System V的ptx只读取一个文件并将结果发送到标准输出,或者,如果命令上给出第二个文件参数,则将结果发送到第二个文件参数。没有通过选项来引入输出参数是一种危险的做法,在GNU中尽可能避免。因此,为了在GNU和System V之间可移植地使用ptx,你应该始终将它与单个输入文件一起使用,并始终期望结果在标准输出上。如果配置程序发现已安装的ptx接受-G选项,你可能还希望在使用ptx的产品中使用-G选项自动配置ptx调用。

  1. System V的ptx中唯一可用的选项是选项-b,-f,-g,-i,-o,-r,-t,-w。所有其他选项都是GNU扩展,在此不再重复。此外,在启用GNU扩展时,某些选项的含义略有不同,如下所述。

  1. 默认情况下,一致输出没有针对troff或nroff进行格式化。对于傻终端而言,它是相当格式化的。仍可通过选项-O来选择troff或nroff输出。

  1. 除非使用-R选项,否则从总输出行宽中减去最大参考宽度。禁用GNU扩展时,输出行宽度计算中不会考虑引用的宽度。

  1. 即使禁用GNU扩展,也始终从输入文件读取和处理所有256个字节,甚至是ASCII NUL字节,没有任何不利影响。但是,System V的ptx不接受8位字符,拒绝一些控制字符,并且也拒绝了波形符’~’。

  1. 输入行长度仅受可用内存的限制,即使禁用GNU扩展也是如此。但是,System V的ptx仅处理每行中的前200个字符。

  1. 中断字符默认为除了基础字符集的所有字母之外的每个字符,不管是否是变音符号。禁用GNU扩展时,中断字符仅默认为空格、制表符、换行符。

  1. 该程序更好地利用输出行宽。如果禁用GNU扩展,程序会尝试模仿System V的ptx,但仍有一些轻微的处理故障,这个程序无法完全重现。

  1. 用户可以指定Ignore文件和Only文件。System V的ptx不允许这样做。

退出状态

退出状态为零表示成功,非零值表示失败。

什么是置换索引(permuted index)?

置换索引(permuted index,也称为keyword-in-context,简称KWIC),是按字母顺序排列的关键字列表,并在其周围显示上下文文本。置换索引显示格式使得查找感兴趣的关键字变得容易,更重要的是有助于在关键字出现多次时识别特定实例,并且关键字本身可以用作直接访问它们所引用的文本或对象的链接。

最着名的关键字索引是出现在书籍背面的字母索引,其中列出了关键字以及关键字所出现的页面编号。使用索引的读者必须在列出的页面中进行查找,直到找到他寻找的特定参考。而置换索引通过显示周围文本和关键字,可以轻松找到所需的引用。为了便于阅读,对其进行了格式化,以便关键字在垂直列中对齐。这种格式在Unix操作系统的打印文档中的使用可能很熟悉。

该索引方法尤其适用于具有单行描述的一组实体:描述行本身用作上下文。库中的功能的描述,集合中的照片的描述,简短的引用或谚语都是合适的示例。

置换索引示例

对于文件f1,它的内容如下:

The quick  brown fox 
jumped over the fence

使用命令ptx f1生成的置换索引如下:

the fence                           The quick  brown fox  jumped over
                        The quick   brown fox  jumped over the fence
       brown fox  jumped over the   fence                      The quick
                 The quick  brown   fox  jumped over the fence
             The quick  brown fox   jumped over the fence
     The quick  brown fox  jumped   over the fence
fence                         The   quick  brown fox  jumped over the
    quick  brown fox  jumped over   the fence                        The

上面中制表符后面的对其的列(垂直方向看,The brown fence fox jumped over quick the)就是置换所有,这写字符两边显示的是上下文文本。正如最开始我们所说的:“置换索引通过显示周围文本和关键字,可以轻松找到所需的引用。”

相关手册

查看在线手册:http://www.gnu.org/software/coreutils/ptx

查看info手册:info ‘(coreutils) ptx invocation’

参考文献

更新日志

  • 07/07/2018 创建文章