Linux tbl命令介绍
tbl命令是table的缩写,它的全称是table formatter,它的作用是将troff输入文件中嵌入的表格描述转换成troff能理解的命令。它可以让你在文档中插入各种样式的表格,如有边框、无边框、双重边框、居中、对齐等。它还可以与eqn预处理器配合,让你在表格中使用数学公式。
Linux tbl命令适用的Linux版本
tbl命令是GNU项目的一部分,它是groff文档格式化系统的组成部分。它可以在任何安装了groff的Linux系统上运行,如Ubuntu, Debian, Fedora, CentOS等。如果你的系统没有安装groff,你可以使用以下命令来安装:
- 对于基于Debian的系统,如Ubuntu,你可以使用apt命令:
[linux@bashcommandnotfound.cn ~]$ sudo apt update
[linux@bashcommandnotfound.cn ~]$ sudo apt install groff
- 对于基于Red Hat的系统,如Fedora,你可以使用dnf命令:
[linux@bashcommandnotfound.cn ~]$ sudo dnf update
[linux@bashcommandnotfound.cn ~]$ sudo dnf install groff
- 对于基于Red Hat的系统,如CentOS 7,你可以使用yum命令:
[linux@bashcommandnotfound.cn ~]$ sudo yum update
[linux@bashcommandnotfound.cn ~]$ sudo yum install groff
- 对于基于Red Hat的系统,如CentOS 8,你可以使用dnf命令:
[linux@bashcommandnotfound.cn ~]$ sudo dnf update
[linux@bashcommandnotfound.cn ~]$ sudo dnf install groff
Linux tbl命令的基本语法
tbl命令的基本语法如下:
tbl [options] [files...]
其中,options是一些可选的参数,用来控制tbl的行为,files是要处理的输入文件,如果没有指定文件,或者文件名为"-",则从标准输入读取。
tbl命令的常用选项有:
- -C:启用兼容模式,即使.TS和.TE后面跟着的不是空格或换行符,也能识别它们为表格开始和结束的标志。
- -v:打印版本号,然后退出。
tbl命令的输入文件中,需要用.TS和.TE两个宏来标记表格的开始和结束,表格的描述可以有多个部分,每个部分之间用.T&来分隔。表格的描述包括以下几个部分:
- 表格的全局选项,用来设置表格的样式,如边框、居中、行高等。
- 表格的格式说明,用来指定表格的列数、列宽、列对齐、列类型等。
- 表格的数据,用来填充表格的内容,每行一个数据项,数据项之间用制表符或指定的分隔符分隔。
- 表格的文本块,用来在表格中插入段落或其他格式的文本。
Linux tbl命令的常用选项或参数说明
tbl命令的全局选项有以下几种,它们可以用逗号、空格或制表符分隔,必须以分号结束:
选项 | 参数 | 说明 |
---|---|---|
allbox | 无 | 给表格的每个单元格加上边框 |
box | 无 | 给表格加上边框 |
center | 无 | 将表格居中显示,如果不指定,则默认左对齐 |
decimalpoint | (c) | 设置数值列中的小数点为字符c,而不是默认的点号 |
delim | (xy) | 设置eqn的开始和结束分隔符为x和y,而不是默认的$ |
doublebox | 无 | 给表格加上双重边框 |
expand | 无 | 使表格的宽度与当前行宽相同,如果有x类型的列,则忽略此选项 |
frame | 无 | 同box |
linesize | (n) | 设置边框的线条大小为n点,而不是默认的0.4点 |
nokeep | 无 | 不使用分散来防止表格被分页 |
nospaces | 无 | 忽略数据项中的前导和后置空格 |
nowarn | 无 | 关闭表格超出行宽的警告 |
tab | (x) | 设置数据项的分隔符为字符x,而不是默认的制表符 |
tbl命令的格式说明有以下几种,它们可以用逗号、空格或制表符分隔,必须以点号结束:
格式 | 说明 |
---|---|
n | 数值列,右对齐,小数点对齐 |
a | 字母列,左对齐 |
c | 居中列 |
l | 左对齐列 |
r | 右对齐列 |
s | 跨列 |
^ | 跨行 |
b | 底部对齐 |
i | 中间对齐 |
t | 顶部对齐 |
d | 下降 |
f | 字体 |
e | eqn |
m | 数学 |
p | 段落 |
v | 垂直 |
w | 宽度 |
x | 扩展 |
z | 零宽度 |
Linux tbl命令的实例
实例1:创建一个简单的无边框表格
如果你只想创建一个简单的无边框表格,你可以使用以下的输入文件:
.TS
tab(@);
l l l
Name@Age@Gender
Alice@20@Female
Bob@22@Male
Charlie@21@Male
.TE
其中,tab(@)表示使用@作为数据项的分隔符,l l l表示三列都是左对齐的字母列,Name@Age@Gender是表格的第一行,也就是表头,后面的三行是表格的数据。注意,每一行的数据项的个数必须和列的个数相同,否则会出错。
你可以使用以下的命令来处理这个输入文件,并输出到标准输出:
[linux@bashcommandnotfound.cn ~]$ tbl simple.txt | nroff -Tascii
你会得到以下的输出:
Name Age Gender
Alice 20 Female
Bob 22 Male
Charlie 21 Male
你可以看到,这是一个简单的无边框表格,每一列都是左对齐的,数据项之间用空格分隔。
实例2:创建一个有边框的表格
如果你想给表格加上边框,你可以在全局选项中使用box或frame选项,例如:
.TS
box;
tab(@);
l l l
Name@Age@Gender
Alice@20@Female
Bob@22@Male
Charlie@21@Male
.TE
你可以使用同样的命令来处理这个输入文件,并输出到标准输出:
[linux@bashcommandnotfound.cn ~]$ tbl box.txt | nroff -Tascii
你会得到以下的输出:
+--------+-----+--------+
|Name |Age |Gender |
+--------+-----+--------+
|Alice |20 |Female |
+--------+-----+--------+
|Bob |22 |Male |
+--------+-----+--------+
|Charlie |21 |Male |
+--------+-----+--------+
你可以看到,这是一个有边框的表格,每个单元格都被一个+号和一条横线或竖线分隔。
实例3:创建一个有双重边框的表格
如果你想给表格加上双重边框,你可以在全局选项中使用doublebox或doubleframe选项,例如:
.TS
doublebox;
tab(@);
l l l
Name@Age@Gender
Alice@20@Female
Bob@22@Male
Charlie@21@Male
.TE
你可以使用同样的命令来处理这个输入文件,并输出到标准输出:
[linux@bashcommandnotfound.cn ~]$ tbl doublebox.txt | nroff -Tascii
你会得到以下的输出:
##+--------+-----+--------+##
||Name |Age |Gender ||
##+--------+-----+--------+##
||Alice |20 |Female ||
##+--------+-----+--------+##
||Bob |22 |Male ||
##+--------+-----+--------+##
||Charlie |21 |Male ||
##+--------+-----+--------+##
你可以看到,这是一个有双重边框的表格,每个单元格都被两个#号和两条横线或竖线分隔。
实例4:创建一个有标题的表格
如果你想给表格加上一个标题,你可以在表格的数据部分的第一行使用.TC宏,例如:
.TS
box;
tab(@);
l l l
Name@Age@Gender
.TC
Student Information
_
Alice@20@Female
Bob@22@Male
Charlie@21@Male
.TE
其中,.TC表示表格的标题,后面跟着标题的内容,这里是Student Information,下划线表示标题和表格之间的分隔线,你可以省略它,或者用其他字符代替。
你可以使用同样的命令来处理这个输入文件,并输出到标准输出:
[linux@bashcommandnotfound.cn ~]$ tbl title.txt | nroff -Tascii
你会得到以下的输出:
+----------------------+
|Student Information |
+--------+-----+--------+
|Name |Age |Gender |
+--------+-----+--------+
|Alice |20 |Female |
+--------+-----+--------+
|Bob |22 |Male |
+--------+-----+--------+
|Charlie |21 |Male |
+--------+-----+--------+
你可以看到,这是一个有标题的表格,标题居中显示,标题和表格之间有一条分隔线。
实例5:创建一个有数学公式的表格
如果你想在表格中使用数学公式,你可以在格式说明中使用e或m选项,表示该列是eqn或math类型的列,然后在数据部分使用eqn的语法来写数学公式,例如:
.TS
box;
tab(@);
l e l
Name@Score@Grade
Alice@\( \sqrt{90} \)@A
Bob@\( \frac{80}{2} \)@B
Charlie@\( \int_0^1 x^2 dx \)@C
.TE
其中,e表示eqn类型的列,(和)表示eqn的开始和结束分隔符,你也可以在全局选项中用delim选项来改变它们,eqn的语法可以参考eqn手册。
你可以使用以下的命令来处理这个输入文件,并输出到标准输出:
[linux@bashcommandnotfound.cn ~]$ tbl math.txt | eqn | nroff -Tascii
注意,你需要在tbl和nroff之间加上eqn命令,来处理数学公式。
你会得到以下的输出:
+--------+-------+-------+
|Name |Score |Grade |
+--------+-------+-------+
|Alice | 9.49 |A |
+--------+-------+-------+
|Bob | 40.00 |B |
+--------+-------+-------+
|Charlie | 0.33 |C |
+--------+-------+-------+
你可以看到,这是一个有数学公式的表格,数学公式被计算出来,并显示在表格中。
实例6:创建一个有不同对齐方式的表格
如果你想在表格中使用不同的对齐方式,你可以在格式说明中使用r, c, l, b, i, t等选项,表示右对齐、居中、左对齐、底部对齐、中间对齐、顶部对齐等,例如:
.TS
box;
tab(@);
r c l b i t
Name@Age@Gender@Height@Weight@Hobby
Alice@20@Female@165@50@Reading
Bob@22@Male@180@70@Swimming
Charlie@21@Male@175@60@Joking
.TE
其中,r c l b i t表示六列分别是右对齐、居中、左对齐、底部对齐、中间对齐、顶部对齐的列,Name@Age@Gender@Height@Weight@Hobby是表格的第一行,也就是表头,后面的三行是表格的数据。
你可以使用以下的命令来处理这个输入文件,并输出到标准输出:
[linux@bashcommandnotfound.cn ~]$ tbl align.txt | nroff -Tascii
你会得到以下的输出:
+--------+-----+--------+--------+--------+---------+
| Name | Age |Gender |Height | Weight |Hobby |
+--------+-----+--------+--------+--------+---------+
| Alice | 20 |Female | 165 | 50 |Reading |
+--------+-----+--------+--------+--------+---------+
| Bob | 22 | Male | 180 | 70 |Swimming |
+--------+-----+--------+--------+--------+---------+
|Charlie | 21 |Male | 175 | 60 |Joking |
+--------+-----+--------+--------+--------+---------+
你可以看到,这是一个有不同对齐方式的表格,每一列都按照指定的方式对齐,表头和数据之间有一条分隔线。
实例7:创建一个有跨列和跨行的表格
如果你想在表格中使用跨列和跨行的单元格,你可以在格式说明中使用s和^选项,表示跨列和跨行,然后在数据部分使用^和_来表示跨列和跨行的数据项,例如:
.TS
box;
tab(@);
l s s
l ^ l
Name@Score@Grade
Alice@\( \sqrt{90} \)@A
Bob@\( \frac{80}{2} \)@B
Charlie@\( \int_0^1 x^2 dx \)@C
.TC
Average@.TB
\( \frac{\sqrt{90}+\frac{80}{2}+\int_0^1 x^2 dx}{3} \)
.TE@_
.TE
其中,l s s表示第一行有三列,分别是左对齐、跨列、跨列的列,l ^ l表示第二行有三列,分别是左对齐、跨行、左对齐的列,Name@Score@Grade是表格的第一行,也就是表头,后面的三行是表格的数据,其中^表示跨行的数据项,_表示跨列的数据项,.TC表示表格的标题,后面跟着标题的内容,这里是Average,.TB和.TE表示文本块的开始和结束,文本块中使用eqn的语法来写数学公式,表示平均分。
你可以使用以下的命令来处理这个输入文件,并输出到标准输出:
[linux@bashcommandnotfound.cn ~]$ tbl span.txt | eqn | nroff -Tascii
注意,你需要在tbl和nroff之间加上eqn命令,来处理数学公式。
你会得到以下的输出:
+--------+-----------------+
|Average | 30.16 |
+--------+-----------------+
|Name |Score |Grade|
+--------+-----------+-----+
|Alice | 9.49 |A |
+--------+-----------+-----+
|Bob | 40.00 |B |
+--------+-----------+-----+
|Charlie | 0.33 |C |
+--------+-----------+-----+
你可以看到,这是一个有跨列和跨行的表格,Average是一个跨列的标题,( \frac{\sqrt{90}+\frac{80}{2}+\int_0^1 x^2 dx}{3} )是一个跨行的数据项,它们都被计算出来,并显示在表格中。
实例8:创建一个有不同宽度的表格
如果你想在表格中使用不同的宽度,你可以在格式说明中使用w选项,表示指定的宽度,然后在括号中给出宽度的值,例如:
.TS
box;
tab(@);
l w(5n) l
Name@Age@Gender
Alice@20@Female
Bob@22@Male
Charlie@21@Male
.TE
其中,w(5n)表示第二列的宽度是5个数字的宽度,n表示数字的宽度,你也可以用其他的单位,如i表示英寸,c表示厘米,p表示点等,Name@Age@Gender是表格的第一行,也就是表头,后面的三行是表格的数据。
你可以使用以下的命令来处理这个输入文件,并输出到标准输出:
[linux@bashcommandnotfound.cn ~]$ tbl width.txt | nroff -Tascii
你会得到以下的输出:
+--------+-----+--------+
|Name |Age |Gender |
+--------+-----+--------+
|Alice | 20 |Female |
+--------+-----+--------+
|Bob | 22 |Male |
+--------+-----+--------+
|Charlie | 21 |Male |
+--------+-----+--------+
你可以看到,这是一个有不同宽度的表格,第二列的宽度是固定的,而第一列和第三列的宽度是自适应的。
Linux tbl命令的文本块
如果你想在表格中插入一段段落或其他格式的文本,你可以在格式说明中使用p选项,表示该列是段落类型的列,然后在数据部分使用.TB和.TE宏来标记文本块的开始和结束,例如:
.TS
box;
tab(@);
l p l
Name@Description@Gender
Alice@.TB
Alice is a smart and kind girl.
She likes to read books and play chess.
.TE@Female
Bob@.TB
Bob is a brave and strong boy.
He likes to climb mountains and swim in the sea.
.TE@Male
Charlie@.TB
Charlie is a funny and friendly boy.
He likes to tell jokes and make friends.
.TE@Male
.TE
其中,p表示段落类型的列,.TB和.TE表示文本块的开始和结束,文本块中可以使用troff的命令来控制文本的格式,如换行、字体、缩进等。
你可以使用以下的命令来处理这个输入文件,并输出到标准输出:
[linux@bashcommandnotfound.cn ~]$ tbl text.txt | nroff -Tascii
你会得到以下的输出:
+--------+---------------------------------+--------+
|Name |Description |Gender |
+--------+---------------------------------+--------+
|Alice |Alice is a smart and kind girl. |Female |
| |She likes to read books and play | |
| |chess. | |
+--------+---------------------------------+--------+
|Bob |Bob is a brave and strong boy. |Male |
| |He likes to climb mountains and | |
| |swim in the sea. | |
+--------+---------------------------------+--------+
|Charlie |Charlie is a funny and friendly |Male |
| |boy. | |
| |He likes to tell jokes and make | |
| |friends. | |
+--------+---------------------------------+--------+
你可以看到,这是一个有文本块的表格,文本块中的文本会自动换行和对齐,你也可以用troff的命令来调整它们的格式。
Linux tbl命令的注意事项
在使用tbl命令时,你需要注意以下几点:
- tbl命令只是一个预处理器,它不会直接输出表格,而是生成troff能理解的命令,你需要用troff或nroff或groff来处理它们,如果你要使用数学公式,你还需要用eqn来处理它们。
- tbl命令的输入文件中,必须用.TS和.TE来标记表格的开始和结束,否则tbl命令会忽略它们,如果你在.TS和.TE之间有其他的troff命令,它们会被当作表格的一部分,可能会导致错误。
- tbl命令的输入文件中,每一行的数据项的个数必须和列的个数相同,否则会出错,如果你的数据项中有制表符或指定的分隔符,你需要用引号或反斜杠来转义它们。
- tbl命令的输入文件中,如果你要使用eqn或math类型的列,你需要用eqn的语法来写数学公式,你也需要在tbl和troff之间加上eqn命令来处理它们,如果你的数学公式中有分隔符,你需要用引号或反斜杠来转义它们。
- 如果你的系统没有安装groff,会出现bash: tbl: command not found。
Linux tbl命令的相关命令
除了tbl命令,还有一些与表格相关的命令,它们是:
troff命令
troff命令是一个文本格式化程序,它可以处理tbl生成的命令,以及其他的宏和命令,来生成格式化的文档。它可以输出到不同的设备,如PostScript, PDF, HTML等。你可以使用以下的语法来调用troff:
troff [options] [files...]
其中,options是一些可选的参数,用来控制troff的行为,files是要处理的输入文件,如果没有指定文件,或者文件名为"-",则从标准输入读取。
troff的常用选项有:
- -t:表示输入文件中包含tbl命令,需要用tbl来预处理。
- -e:表示输入文件中包含eqn命令,需要用eqn来预处理。
- -T:表示输出的目标设备,如ascii, ps, pdf, html等。
- -m:表示使用指定的宏包,如man, ms, mm等。
nroff命令
nroff命令是一个文本格式化程序,它与troff类似,但是它只能输出到ASCII设备,如终端或打印机。它可以处理tbl生成的命令,以及其他的宏和命令,来生成格式化的文档。你可以使用以下的语法来调用nroff:
nroff [options] [files...]
其中,options是一些可选的参数,用来控制nroff的行为,files是要处理的输入文件,如果没有指定文件,或者文件名为"-",则从标准输入读取。
nroff的常用选项有:
- -t:表示输入文件中包含tbl命令,需要用tbl来预处理。
- -e:表示输入文件中包含eqn命令,需要用eqn来预处理。
- -T:表示输出的目标设备,如ascii, latin1, utf8等。
- -m:表示使用指定的宏包,如man, ms, mm等。
groff命令
groff命令是一个文本格式化程序,它是GNU项目的一部分,它是troff和nroff的兼容和增强版本。它可以处理tbl生成的命令,以及其他的宏和命令,来生成格式化的文档。它可以输出到不同的设备,如PostScript, PDF, HTML, ASCII等。你可以使用以下的语法来调用groff:
groff [options] [files...]
其中,options是一些可选的参数,用来控制groff的行为,files是要处理的输入文件,如果没有指定文件,或者文件名为"-",则从标准输入读取。
groff的常用选项有:
- -t:表示输入文件中包含tbl命令,需要用tbl来预处理。
- -e:表示输入文件中包含eqn命令,需要用eqn来预处理。
- -T:表示输出的目标设备,如ascii, ps, pdf, html等。
- -m:表示使用指定的宏包,如man, ms, mm等。
评论区