web-dev-qa-db-ja.com

groffは、解釈されたANSIエスケープ文字を使用してpsファイルを作成できますか?

この質問は SUのこれ に触発されています。 lpおよびANSIエスケープシーケンスを使用して太字または色を印刷するにはどうすればよいですか?たとえば、ターミナルに太字のテキストを表示する方法を知っています。

$ echo -e '\ 033 [01; 1mこのテキストは太字になります\ 033 [00; 0m、これはしません'
このテキストは太字になります、これは太字になりません

ただし、これをlpに直接パイプすると、次のようなファイルが表示されます。

01;1mthis text will be bold00;0m,this will not

したがって、これを行う方法は、groffを使用してポストスクリプトファイルを作成し、それを印刷することだと思います。 groffはこれを実行できるはずです。これにより、manページをpsファイルに正しく変換し、manページの太字をポストスクリプトの太字のままにしておくことができます。ただし、groffのドキュメントは膨大で、ポストスクリプトの経験がない人にとっては難解です。オプションのさまざまな組み合わせを試しましたが、そのすべてが上記の行のようなポストスクリプトファイルになります。

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、またはその他のツールの組み合わせを使用して、端末から太字または色付きのテキストを印刷するにはどうすればよいですか?

2
terdon

これは、groffが行うように設計されていることの逆です。

あなたが探しているものは、少なくともこのツールの組み合わせで達成することができます:

お気に入り:

printf '\e[31;1mfoo\e[mbar\n' |
  aha |
  wkhtmltopdf - - |
  pdf2ps - output.ps

少しやり過ぎですが、それでうまくいきます。 PDFは最近のポストスクリプトと同じくらい簡単に印刷されるので、おそらく最後の部分をスキップできます。

printf '\e[31;1mfoo\e[mbar\n' |
  aha |
  wkhtmltopdf - output.pdf

または、印刷のためにlpに直接フィードすることもできます。

4

PostScriptは、紙にマークを付けるためのプログラミング言語です。上記のマークを色付けするには、プログラムに正しい指示を含める必要があります。それらは非常に VT100クローンが理解する粗いANSIエスケープコードとは異なる形式を取ります。

私はtroffのことをあまり覚えていません(そして私がそれを使って論文を書いたとき、カラープリンターは夢でさえありませんでした...)が、LaTeXではPDFまたはPSをそのまま印刷します。ただし、エスケープセキュリティを処理し、LaTeXを吐き出すものを組み合わせるのはそれほど楽しいことではありません。色付き、太字、その他のテキストを直接troffまたはLaTeXに記述してください。

2
vonbrand

プリンタサブシステムが色付きのポストスクリプトファイルを処理できると仮定すると、ターミナルでgroffとその仲間を使用してテキストをマークアップし、プリンタの色と太字および斜体のフォントでポストスクリプトファイルを生成できます。

$ 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

ASCIIとまったく同じファイルをANSIカラーエスケープシーケンスで簡単にフォーマットして、端末に表示できます。

$ 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を使用すると、端末から太字または色付きのテキストを印刷できます。

1
Ian D. Allen