Ptx:生成排列索引
ptx 读取一个文本文件,并生成一个排列索引,每个关键字都包含在其上下文中。
ptx [选项 ...] [文件 ...] ptx -G [选项 ...] [输入 [输出]]
-G(或等效的 –traditional)选项禁用所有 GNU 扩展并恢复到传统模式,从而引入一些限制并更改程序的一些默认选项值。当未指定 -G 时,GNU 扩展始终启用。ptx 的 GNU 扩展在本文适当的地方进行了记录。
当启用 GNU 扩展时,选项之后可能有零个、一个或多个文件。如果没有文件,程序将读取标准输入。如果有零个、一个或多个文件,它们给出了输入文件的名称,这些文件将依次读取,就像所有输入文件都被连接在一起一样。然而,每个文件之间都有一个完全的上下文断点,并且当请求自动引用时,文件名和行号指的是单个文本输入文件。在所有情况下,程序都将排列索引输出到标准输出。
当禁用 GNU 扩展时,即当程序以传统模式运行时,除了选项之外可能还有零个、一个或两个参数。如果没有参数,程序将读取标准输入并将排列索引输出到标准输出。如果只有一个参数,它将命名要读取的文本输入而不是标准输入。如果给出两个参数,它们分别给出了要读取的输入文件的名称和要生成的输出文件的名称。请注意,在这种情况下,由第二个参数给出的文件的内容将被破坏。这种行为是由 System V ptx 兼容性决定的;GNU 标准通常不鼓励使用不是由选项引入的输出参数。
请注意,对于任何命名为选项的值或作为输入文本文件的文件,可以使用单个破折号 ‘-’,在这种情况下,假定为标准输入。但是,在同一次程序调用中使用此约定一次以上是没有意义的。
一般选项
‘-G’
‘–traditional’
如前所述,此选项禁用ptx的所有GNU扩展并切换到传统模式。
‘–help’
在标准输出上打印简短的帮助信息,然后退出而不进行进一步处理。
‘–version’
在标准输出上打印程序版本,然后退出而不进行进一步处理。
字符集选择
按照目前的设置,ptx假设输入文件使用8位字符编码,在多字节区域可能无法正常工作。在单字节区域中,关键字的默认正则表达式允许使用外来字母或带有重音符号的字母。然而,关键字排序仍然很粗糙;它盲目地遵循底层字符集的顺序。
ptx的输出假定使用区域的字符编码。例如,在使用ptx的-T选项时,如果区域使用Latin-1
编码,您可能需要像'\usepackage[latin1]{inputenc}'
这样的LaTeX指令来正确渲染非ASCII字符。
‘-f’
‘–ignore-case’
在排序时将小写字母折叠为大写字母。
单词选择和输入处理
‘-b file’
‘–break-file=file’
此选项提供了另一种(替代-W)方法来描述哪些字符组成单词。它引入了一个名为Break文件的文件,该文件中包含不能成为单词一部分的字符列表;这个文件被称为Break文件。任何不在Break文件中的字符都是单词成分。如果同时指定了-b和-W选项,则-W优先,-b被忽略。
当启用GNU扩展时,避免将换行符作为断点字符的唯一方法是将所有断点字符都写入文件中,没有任何换行符,甚至没有文件末尾的换行符。当禁用GNU扩展时,空格、制表符和新行总是被视为断点字符,即使它们没有包含在Break文件中。
‘-i file’
‘–ignore-file=file’
与此选项关联的文件包含一个永远不会被认为关键字的单词列表。它被称为Ignore文件。文件中的每一行都恰好包含一个单词;单词之间的行尾分隔不受-S选项的值的影响。
‘-o file’
‘–only-file=file’
与此选项关联的文件包含一个将在共现输出中保留的单词列表;未在此文件中提到的任何单词都将被忽略。文件被称为Only文件。文件中的每一行都恰好包含一个单词;单词之间的行尾分隔不受-S选项的值的影响。
Only文件没有默认值。当同时指定Only文件和Ignore文件时,一个单词只有在Only文件中且不在Ignore文件中时才会被认为是关键字。
‘-r’
‘–references’
对于每一输入行,非空白字符序列的前导序列将被认为是一个引用,用于在结果排列索引中识别此行。
使用此选项,程序不会尝试从输出上下文中非常努力地删除引用,但在上下文正好在换行符处结束时,它可以成功实现这一点。如果选项-r与-S默认值一起使用,或者当禁用GNU扩展时,此条件总是满足,并且引用完全从输出上下文中排除。
‘-S regexp’
‘–sentence-regexp=regexp’
此选项选择描述行尾或句子尾的正则表达式。事实上,这个正则表达式并不是行尾或句子尾之间唯一的区别,输入行的边界在这个选项之外没有特殊意义。默认情况下,当启用GNU扩展且未使用-r选项时,使用句子尾。在这种情况下,此正则表达式是从GNU Emacs导入的:
[.?!][]\"')}]*\\($\\|\t\\| \\)[ \t\n]*
当禁用GNU扩展或使用-r选项时,使用行尾;在这种情况下,默认正则表达式只是:
\n
使用空正则表达式等同于完全禁用行尾或句子尾识别。在这种情况下,整个文件被视为一个大行或句子。用户可能希望禁止所有截断标志生成,通过选项-F ““。
当关键字恰好位于输入行或句子的开头时,这通常在输出上下文行开头创建一个未使用的区域;当关键字恰好位于输入行或句子的结尾时,这通常在输出上下文行结尾创建一个未使用的区域。程序尝试在这些未使用的区域内填充上下文;输入行或句子的尾部用于填充输出行左侧的未使用区域;输入行或句子的头部用于填充输出行右侧的未使用区域。
为了方便用户,许多C语言中的常见反斜杠转义序列都被ptx本身识别并转换为相应的字符。
‘-W regexp’
‘–word-regexp=regexp’
此选项选择描述每个关键字的正则表达式。默认情况下,如果启用GNU扩展,一个单词是字母序列;使用的正则表达式是'\w+'
。当禁用GNU扩展时,一个单词默认为以空格、制表符或换行符结尾的任何内容;使用的正则表达式是'[^ \t\n]+'
。
空正则表达式等同于不使用此选项。
为了方便用户,许多C语言中找到的常见反斜杠转义序列,如C语言中的常见反斜杠转义序列,都会被ptx本身识别并转换为相应的字符。
输出格式
输出格式主要受以下表格中描述的-O和-T选项控制。如果既没有选择-O,也没有选择-T,并且启用了GNU扩展,程序会选择一个适合哑终端的输出格式。每个关键字出现都会输出到一行的中心,周围是其左右上下文。每个字段都适当地对齐,以便可以方便地观察一致性输出。作为特殊功能,如果通过选项-A自动引用被选中,并且在左上下文之前输出引用,那么在引用之前添加一个冒号;这意味着这与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时,总输出宽度中不包括引用的宽度。
当禁用GNU扩展时,此选项会自动选择。
‘-F string’
‘–flag-truncation=string’
此选项将请求使用字符串string报告输出的任何截断。大多数输出字段理论上会向当前行或当前句子的开始或结束延伸,这是通过选项-S选择的。但是,有允许的最大输出行宽度,可以通过选项-w进行更改,该宽度进一步分为各种输出字段的空间。由于某个字段无法扩展到当前行或当前行的开始或结束以适应,因此会发生截断。默认情况下,使用的字符串是一个斜杠,如-F /
。
string可能有多个字符,如-F …
。此外,当string为空(-F ""
)时,截断标志被禁用,在这种情况下不会附加截断标记。
为了用户方便,许多通常在C语言中找到的反斜杠转义序列,由ptx本身识别并转换为相应的字符。
‘-M string’
‘–macro-name=string’
在选择生成适用于nroff、troff或TeX的输出时,选择另一个字符串代替’xx’。
‘-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}
因此,可以编写一个。请注意,当不产生引用时,即既不选择选项-A也不选择选项-r时,每个。选项-M可以用来将’xx’更改为另一个宏名称。
在这种输出格式中,一些特殊字符,如’$‘、’%‘、’&‘、’#‘和’_‘会自动用反斜杠保护。大括号’{‘和’}‘用反斜杠和一个美元符号(强制数学模式)保护。反斜杠本身产生序列\backslash{}
。尖括号’^‘和波浪线’~’分别产生序列^\{ }
和~\{ }
。基础字符集中的其他带变音符号的字符尽可能产生适当的TeX序列。其他非图形字符,如换行符和制表符,以及所有不是ASCII的其他字符,只是将其更改为恰好一个空格,没有特殊尝试压缩连续的空格。请告诉我如何改进TeX中的特殊字符处理。
ptx的GNU扩展
ptx的这个版本包含了一些在System V ptx中不存在的特性。这些额外的特性通过使用-G命令行选项被抑制,除非被其他命令行选项覆盖。一些GNU扩展无法通过覆盖来恢复,所以简单的规则是如果你关心GNU扩展,就不要使用-G。以下是这个程序和System V ptx之间的差异。
这个程序可以一次读取很多输入文件,它总是将结果写入标准输出。另一方面,System V ptx只读取一个文件并将结果发送到标准输出,或者如果在命令中给出了第二个文件参数,就将其发送到该文件。 没有由选项引入的输出参数是一种危险的实践,GNU尽可能避免这种情况。因此,为了在GNU和System V之间移植ptx,你应该总是使用单个输入文件,并始终期望结果在标准输出上。你可能还想在产品中使用ptx调用时自动配置-G选项,如果配置器发现已安装的ptx接受-G。
System V ptx中可用的唯一选项是选项-b、-f、-g、-i、-o、-r、-t和-w。所有其他选项都是GNU扩展,不会在这个列举中重复。此外,一些选项在启用GNU扩展时具有略有不同的含义,如下所述。
- 默认情况下,一致性输出不是为troff或nroff格式化的。它是为一个简单的终端格式化的。troff或nroff输出仍然可以通过选项-O选择。
- 除非使用-R选项,否则最大引用宽度从总输出行宽度中减去。在禁用GNU扩展的情况下,输出行宽度计算中不考虑引用宽度。
- 所有256字节,甚至ASCII NUL字节,都总是从输入文件中无不良影响地读取和处理,即使禁用了GNU扩展。然而,System V ptx不接受8位字符,一些控制字符被拒绝,波浪线’~’也被拒绝。
- 输入行长度仅受可用内存的限制,即使禁用了GNU扩展。然而,System V ptx仅处理每行的前200个字符。
- 断(非单词)字符默认为除底层字符集的所有字母(带变音符号或不带变音符号)之外的所有字符。当禁用GNU扩展时,断字符默认为空格、制表符和新行。
- 程序更好地利用了输出行宽度。如果禁用了GNU扩展,程序试图模仿System V ptx,但仍有一些轻微的布局错误,这个程序不能完全重现。
- 用户可以指定Ignore文件和Only文件。这是System V ptx不允许的。