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 글꼴 파일 설치 지침을 따랐습니다.여기. 나는 enscript가 이 파일을 렌더링할 수 있어야 한다고 생각합니다. 우분투 23.10에서 실행하고 있습니다. 어떤 아이디어가 있나요?
답변1
나도 글꼴 전문가가 아니며 글꼴에 "공백" 문자가 없는 것은 도움이 되지 않는 것 같습니다. 단지 그럴 필요가 없기 때문입니다.그림enscript
래핑할 위치 등을 계산할 수 있도록 문자의 너비를 알아야 합니다 .
실제 해결책은 없지만 여기에 두 가지 가능한 트릭이 있습니다. 첫 번째 방법은 ?
후속 PostScript의 문자를 공백으로 바꾸는 것입니다(PDF가 되기 전). 이는 입력에 실제 문자가 없다고 가정합니다 ?
. 예를 들어, 다음 import numpy as np
줄은 다음을 생성합니다.
59 690 M
(?numpy?as?np) s
M
x,y 위치로 이동하는 명령이기도 하고, s
문자열을 인쇄하는 명령 이기도 합니다 (...)
. PostScript는 문자열을 로 래핑합니다 . 고정 너비 글꼴이 있으므로 이러한 "?"를 ""로 바꾸는 명령을 ()
추가할 수 있습니다.sed
sed '/(.*)/s/?/ /g'
.afm
또 다른 접근 방식은 파일 에 공백 문자 메트릭을 추가하는 것입니다 . 아직 형식을 읽어보지는 못했지만, 그 자리에서 한 줄을 추가해서 항목 수를 늘릴 수 있을 것 같습니다. 예를 들어, 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
글꼴에 적합한 너비 값을 선택해야 합니다 .