groff 可以创建带有解释的 ANSI 转义字符的 ps 文件吗?

groff 可以创建带有解释的 ANSI 转义字符的 ps 文件吗?

这个问题的灵感来自于SU上的这个。如何使用lpANSI 转义序列打印粗体或彩色?我知道如何在终端中显示粗体文本:

$ 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

那么,如何使用lpgroff或任何其他工具组合从终端打印粗体或彩色文本?

答案1

groff这与设计目的恰恰相反。

您所寻找的目标至少可以通过以下工具组合来实现:

喜欢:

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作为标记语言,您可以从终端打印粗体或彩色文本。

相关内容