파이썬 등으로 작성된 파일을 syntax highlight로 PDF화
하고 싶은 일
hogehoge.py
같은 소스 코드를 syntax highlight와 함께 pdf 파일로 변환
경위
얼마 전에 사용했던 a2ps처럼
% cat hogehoge.txt | a2ps | lpr -Pprinter_name
느낌으로, 간편하게 인쇄할 수 있는 툴을 잠시 찾고 있었습니다.
그러나,
이런 툴이 보이지 않기 때문에, 부득이하게 자작.
pdf 파일을 낭비하지 않고 파이프를 사용해 프린터에 흘려 넣는 것을 생각했습니다만, 조금 생각하지 않고.
우선 pdf를 출력하기로 결정했습니다.
정책
% cat hogehoge.txt | a2ps | lpr -Pprinter_name
내 환경
하드웨어 & OS
소프트웨어
제대로 작성
소스를 붙여 둡니다. 이상한 일을 하고 있거나, 이렇게 하면 더 좋다!
등의 의견을 주시면 좋겠습니다.
code2pdf#!/usr/bin/env python
import sys
import os
import subprocess
if len(sys.argv) < 2:
print('Usage: %s FILENAME' % (sys.argv[0]))
sys.exit()
args = sys.argv
filename = sys.argv[1]
extension = filename.rsplit('.',1)
if extension[1] == 'py':
LANG = '{.python .numberLines}'
elif extension[1] == 'sh':
LANG = '{.sh .numberLines}'
elif extension[1] == 'html':
LANG = '{.html .numberLines}'
elif extension[1] == 'htm':
LANG = '{.html .numberLines}'
else:
LANG = ''
f = open(filename)
body = f.read()
f.close()
data_out = '# ' + filename + '\n' + '```'+ LANG +'\n' + body + '\n```'
subprocess.run(['pandoc',\
'-o',extension[0]+'.pdf',\
'--pdf-engine=lualatex',\
'-V', 'documentclass=bxjsarticle',\
'-V', 'classoption=pandoc,jafont=ipaex',\
'--highlight-style=kate',\
# '-H', '~/local/header.tex', # プリアンブルに書き込む
'-V', 'linestretch:0.75',\
'-V', 'pagestyle:empty',\
'-V', 'geometry:top=8truemm',\
'-V', 'geometry:bottom=12truemm',\
'-V', 'geometry:left=20truemm',\
'-V', 'geometry:right=12truemm',\
'-V', 'papersize=a4',\
'-V', 'fontsize:9pt'],\
input=data_out, text=True, encoding='UTF-8')
사용법
$ code2pdf hogehoge.py
마무리
위의 코드를 pdf로 한 것을 스크린 캡처했습니다.
syntax highlight의 색상은 변경할 수 있습니다.
현재 사용 가능한 설정은 --list-highlight-styles
옵션으로 확인 가능합니다.
내 환경에서의 실행 결과는 다음과 같습니다.
$ pandoc --list-highlight-styles
pygments
tango
espresso
zenburn
kate
monochrome
breezedark
haddock
이 페이지에는 색상 견본이 있습니다.
pandoc_highlight
아울러 확인해 주세요.
미래의 도전
#!/usr/bin/env python
import sys
import os
import subprocess
if len(sys.argv) < 2:
print('Usage: %s FILENAME' % (sys.argv[0]))
sys.exit()
args = sys.argv
filename = sys.argv[1]
extension = filename.rsplit('.',1)
if extension[1] == 'py':
LANG = '{.python .numberLines}'
elif extension[1] == 'sh':
LANG = '{.sh .numberLines}'
elif extension[1] == 'html':
LANG = '{.html .numberLines}'
elif extension[1] == 'htm':
LANG = '{.html .numberLines}'
else:
LANG = ''
f = open(filename)
body = f.read()
f.close()
data_out = '# ' + filename + '\n' + '```'+ LANG +'\n' + body + '\n```'
subprocess.run(['pandoc',\
'-o',extension[0]+'.pdf',\
'--pdf-engine=lualatex',\
'-V', 'documentclass=bxjsarticle',\
'-V', 'classoption=pandoc,jafont=ipaex',\
'--highlight-style=kate',\
# '-H', '~/local/header.tex', # プリアンブルに書き込む
'-V', 'linestretch:0.75',\
'-V', 'pagestyle:empty',\
'-V', 'geometry:top=8truemm',\
'-V', 'geometry:bottom=12truemm',\
'-V', 'geometry:left=20truemm',\
'-V', 'geometry:right=12truemm',\
'-V', 'papersize=a4',\
'-V', 'fontsize:9pt'],\
input=data_out, text=True, encoding='UTF-8')
$ code2pdf hogehoge.py
마무리
위의 코드를 pdf로 한 것을 스크린 캡처했습니다.
syntax highlight의 색상은 변경할 수 있습니다.
현재 사용 가능한 설정은 --list-highlight-styles
옵션으로 확인 가능합니다.
내 환경에서의 실행 결과는 다음과 같습니다.
$ pandoc --list-highlight-styles
pygments
tango
espresso
zenburn
kate
monochrome
breezedark
haddock
이 페이지에는 색상 견본이 있습니다.
pandoc_highlight
아울러 확인해 주세요.
미래의 도전
$ pandoc --list-highlight-styles
pygments
tango
espresso
zenburn
kate
monochrome
breezedark
haddock
Reference
이 문제에 관하여(파이썬 등으로 작성된 파일을 syntax highlight로 PDF화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mashi0727/items/3cfd8cca403af1df7336텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)