Printing

groff 可以使用解釋的 ANSI 轉義字元創建 ps 文件嗎?

  • November 12, 2016

這個問題的靈感來自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 文件:

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

那麼,如何使用lpandgroff或任何其他工具組合從終端列印粗體或彩色文本?

這與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進行列印。

PostScript 是一種用於在紙上標記的*程式語言。*要使所述標記著色,您必須在程序中包含正確的說明。它們採用與VT100 複製所理解的粗略 ANSI 轉義碼截然不同的形式。

我不太記得 troff(當我用它寫論文時,彩色列印機甚至都不是夢想……),但在 LaTeX 中,可以編寫翻譯成 PDF 或 PS 的彩色文本進行列印像這樣。但是拼湊一些處理逃逸和吐出 LaTeX 的東西不會很有趣,最好直接在 troff 或 LaTeX 中編寫彩色/粗體/任何文本。

引用自:https://unix.stackexchange.com/questions/70450