这个问题的灵感来自于SU上的这个。如何使用lp
ANSI 转义序列打印粗体或彩色?我知道如何在终端中显示粗体文本:
$ echo -e '\033[01;1m这个文本将是粗体\033[00;0m,这不会'
该文本将变为粗体,这不会
但是,当我直接通过管道将其传输到时,lp
我得到一个如下所示的文件:
01;1mthis text will be bold00;0m,this will not
因此,我认为执行此操作的方法是groff
创建一个 postscript 文件并打印它。看起来应该groff
能够做到这一点,我知道它可以正确地将手册页转换为 ps 文件,并在后记中保留手册页中粗体的内容。然而,该groff
文档非常庞大,对于没有 postscript 经验的人来说有点深奥。我尝试了各种选项组合,所有这些组合都会生成一个类似于上面一行的 postscript 文件:
echo -e '\033[01;1mthis text will be bold\033[00;0m,this will not' | groff >a.ps
echo -e '\033[01;1mthis text will be bold\033[00;0m,this will not' | groff -c >a.ps
echo -e '\033[01;1mthis text will be bold\033[00;0m,this will not' | groff -Pc >a.ps
echo -e '\033\[01;1m\]this text will be bold\033\[00;0m\],this will not' | groff -Tascii >a.ps
echo -e '\033[01;1mthis text will be bold'| groff -man >a.ps
echo -e '\033[01;1mthis text will be bold'| groff -mdoc >a.ps
echo -e '\033[01;1mthis text will be bold'| groff -me >a.ps
echo -e '\033[01;1mthis text will be bold'| groff -mm >a.ps
echo -e '\033[01;1mthis text will be bold'| groff -ms >a.ps
那么,如何使用lp
和groff
或任何其他工具组合从终端打印粗体或彩色文本?
答案1
groff
这与设计目的恰恰相反。
您所寻找的目标至少可以通过以下工具组合来实现:
aha
wkhtmltopdf
pdf2ps
来自幽灵脚本
喜欢:
printf '\e[31;1mfoo\e[mbar\n' |
aha |
wkhtmltopdf - - |
pdf2ps - output.ps
有点矫枉过正,但它确实有效。您也许可以跳过最后一部分,因为如今 PDF 与 postscript 一样容易打印:
printf '\e[31;1mfoo\e[mbar\n' |
aha |
wkhtmltopdf - output.pdf
或者您可以直接将其送入lp
进行打印。
答案2
PostScript 是一个编程语言用于在纸上放置标记。要使所述标记着色,您必须在程序中包含正确的指令。他们采取一个非常VT100 克隆理解的原始 ANSI 转义码的形式不同。
我不太记得 troff (当我用它写论文时,彩色打印机甚至不是梦想......),但是在 LaTeX 中可以编写彩色文本,然后翻译成 PDF 或 PS 进行打印像这样。但是拼凑一些处理转义序列并吐出 LaTeX 的东西不会太有趣,最好直接在 troff 或 LaTeX 中编写彩色/粗体/任何文本。
答案3
假设您的打印机子系统可以处理彩色 Postscript 文件,您可以groff
在终端上使用 和 Friends 来标记文本并为您的打印机生成带有颜色以及粗体和斜体字体的 Postscript 文件:
$ cat i
.warn
.color
This is ordinary.
.ft B
This is bold.
.ft I
This is italic.
.ft R
This is ordinary.
.gcolor red
This is red.
.gcolor green
This is green.
.gcolor blue
This is blue.
$ groff i >out.ps
$ lpr out.ps # printer subsystem must be able to handle postscript
您可以使用 ANSI 颜色转义序列轻松将完全相同的文件格式化为 ASCII,并将其显示在终端上:
$ groff -Tascii i # output appears, in colour, on your screen
您还可以使用-T
具有完全相同输入文件的其他输出设备:
$ groff -Thtml i
<!-- Creator : groff version 1.21 -->
<!-- CreationDate: Wed Oct 16 21:05:36 2013 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>This is not bold. <b>This is bold.</b> <i>This is
italic.</i> This is not bold. <font color="#FF0000">This is
red.</font> <font color="#00FF00">This is green.</font>
<font color="#0000FF">This is blue.</font></p>
<hr>
</body>
</html>
使用groff
作为标记语言,您可以从终端打印粗体或彩色文本。