enscriptおよびConsolas TrueTypeフォントを使用した印刷エラー

enscriptおよびConsolas TrueTypeフォントを使用した印刷エラー

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

Mx、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フォントに適した幅の値を選択する必要があります。

関連情報