Printing
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
創建一個 postscript 文件並列印它。看起來groff
應該能夠做到這一點,我知道它可以正確地將手冊頁轉換為 ps 文件,並在後記中將手冊頁中的粗體內容保持為粗體。然而,對於groff
沒有後記經驗的人來說,文件是巨大的並且有點深奧。我嘗試了各種選項組合,所有這些都生成了一個類似於上面一行的 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
andgroff
或任何其他工具組合從終端列印粗體或彩色文本?
這與
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
進行列印。
PostScript 是一種用於在紙上標記的*程式語言。*要使所述標記著色,您必須在程序中包含正確的說明。它們採用與VT100 複製所理解的粗略 ANSI 轉義碼截然不同的形式。
我不太記得 troff(當我用它寫論文時,彩色列印機甚至都不是夢想……),但在 LaTeX 中,可以編寫翻譯成 PDF 或 PS 的彩色文本進行列印像這樣。但是拼湊一些處理逃逸和吐出 LaTeX 的東西不會很有趣,最好直接在 troff 或 LaTeX 中編寫彩色/粗體/任何文本。