TeX -> PDF らっぱーすくりぷと
某ドラマの影響でか、pythonを少し触ってみる。
ちょうど、TeXをPDFに変換する作業をラクにしようと思っていたところだったので、良いタイミング。
実は、TeX環境を統合環境にするするいいながら未だにEmacs + YaTeXという。
しかもEmacsのバインドも、TeXコマンドもほとんど覚えてないという。
そして、portsで入れたpTeX等をアップグレードしたら、オプション指定し忘れたせいか、UTF-8だとエラーが出てしまうようになった。
基本はEUC-JPだからか。なのでplatexコマンドを--kanji=utf8で起動する必要がある。
ということで、一度Terminalに戻って、以下のようにする必要がある。
platex --kanji=utf8 filename.tex dvipdf filename.dvi open filename.pdf
最後の`open`はMac OS X のコマンドで、関連付けされたアプリケーションで開くコマンド。
生成されたPDFを確認するのに使います。
この3つのコマンドですが、シェルから履歴を辿るのも面倒なのでスクリプトにまとめることにしました。
あんまり凝らずにこんな感じに。
#!/usr/bin/env python # tex -> pdf translation script for Mac OS X # # Usage: tex2pdf.py [-p] filename.tex # # if -p flag is set, this script launches previewer with generated pdf. # # Requirement: {platex, dvipdf} command # and *.pdf associates with any previewer like Preview.app # so that file could open with `open` command. import os, sys class ArgumentError(Exception): def __init__(self, msg=""): self.message = "Argument is wrong: " + msg def __str__(self): return repr(self.message) tex = "" p_flag = False for e in sys.argv[1:]: if e == "-p": p_flag = True elif e.endswith(".tex"): tex = e else: raise ArgumentError("the argument must be '[-p] filename.tex'") # run shell command if len(tex) != 0: # tex -> dvi os.system("platex --kanji=utf8 %s" % tex) # dvi -> pdf dvi = tex[:-3] + "dvi" os.system("dvipdf %s" % dvi) # open pdf with Previewer if p_flag is set if p_flag: pdf = tex[:-3] + "pdf" os.system("open %s" % pdf) else: raise ArgumentError("No TeX file is specified.")
コメントは適当www
引っかかった点。
ArgumentErrorがなかったので、必要最小限のを作った。
さすがの、ミニマリズム。
ちょっとしたのを書くのにもimportが必要。でも、確かに見やすくなる傾向ある気がする。
シェルコマンドの実行は、よくある ` ` (バッククオート)で囲むのではなく、os.system() を用いる。
あと、endswith()がなにげに便利だ。suffixやprefix一致はあるということだ( prefixには startswith() )。
まー、統合環境だと全自動でやってくれることなんだけどねw
で、やっと気付いたんだけど。
プログラミング言語って結局、何かを実装する手段であって。
まず、“何か作りたい”というのがあって、次に来るもの。
で、俺はサーバーサイドの技術やネットワークの基礎が分かってない。
こういう仕組みを知ることが、実装力そのものになるわけであって。
だから、まずは根本的な仕組みから勉強しよう。
――と、そんなことを思ったある秋の夜。