enscript
次のPythonスクリプトを使用してPDFソースコードのリストを作成しようとしています。
import numpy as np
def f1(x):
return x * x * np.sin(x)
私は次のコマンドラインを使用しています。
enscript --filter="cat %s | iconv -f utf-8 -t iso-8859-1" -v -rG --font="Consolas@12" --highlight=python -o - -M Letter --color=0 -X 88591 test_enscript.py | ps2pdf - a.pdf
AFM: scanning path...
AFM: reading font map "/usr/local/share/enscript/afm/font.map"
AFM: reading font map "/home/arrigo/fonts/Consolas/font.map"
downloading font "Consolas"
states: autoloading `lang_enscript' from `/usr/local/share/enscript/hl/lang_enscript.st'
states: autoloading `style_emacs' from `/usr/local/share/enscript/hl/style_emacs.st'
states: autoloading `default_faces' from `/usr/local/share/enscript/hl/default_faces.st'
states: autoloading `python' from `/usr/local/share/enscript/hl/python.st'
processing file "test_enscript.py"...
[ 1 page * 1 copy ] left in -
1 character was missing
スペースがiso-8859エンコーディングに正しくマップされていないようです。 Consolasフォントファイルのインストール手順に従いました。ここ。私はscriptがこのファイルをレンダリングできるはずだと思います。 Ubuntu 23.10で実行しています。どんなアイデアがありますか?
答え1
私もフォントの専門家ではなく、フォントに「空白」文字がないことは役に立たないようです。ただそれを必要としないからです。絵enscript
ラップする位置などを計算できるように、文字の幅を知る必要があります。
実際の解決策はありませんが、ここに2つの可能なトリックがあります。最初の方法は、?
後続のPostScriptの文字を空白に置き換えることです(PDFになる前)。これは入力に実際の文字がないと仮定します?
。たとえば、次の行はimport numpy as np
次のように生成します。
59 690 M
(?numpy?as?np) s
M
x、y位置に移動するコマンドでも、s
文字列を印刷するコマンドでもあります(...)
。 PostScriptは文字列をでラップします。固定幅のフォントがあるため、これらの「?」を「」に置き換えるコマンドを()
追加できます。sed
sed '/(.*)/s/?/ /g'
.afm
別のアプローチは、ファイルにスペース文字メトリックを追加することです。まだ形式を読んでいませんが、その場で1行を追加して項目数を増やすことができるようです。たとえば、callig15.afm
次のようにreportlabに空白文字(10進数32)のエントリがないことがわかりました。
....
StartCharMetrics 168
C 0 ; WX 143 ; N grave ; B 30 744 113 831 ;
...
C 29 ; WX 394 ; N fl ; B -188 -231 811 523 ;
C 33 ; WX 206 ; N exclam ; B 40 -7 392 341 ;
...
アイテム数を168個から169個に増やし、次C 32
の項目を追加できます。
sed -i fonts/callig.afm -e '
/StartCharMetrics/s/168/169/
/^C 29 /a\
C 32 ; WX 555 ; N space ; B 0 0 0 0 ;
'
これは私にとって効果的なようです。WX 555
フォントに適した幅の値を選択する必要があります。