コスティキャンのゲーム論pdf変換スクリプト
そういえば、昔『コスティキャンのゲーム論』のpdf変換スクリプトを作ったので公開します。
これは何?
コスティキャンのゲーム論はゲームを作る人の間では有名な文章みたいです。ただ、このサイトが昔ながらのサイトで、brで刻まれまくっているので結構読みづらく感じました。そこで適当にpdfへの変換スクリプトを書いた…訳ですがなにこのスクリプト読めない…
使い方
Python2系とBeautiful SoupとTeXをインスコします。
僕はどうやってやったか忘れましたがTeXに関してはインストーラを使えばいいのではないでしょうか。環境変数をたたくので多分インスコ後に再起動が必要です。PythonもPATHを通しておいてね!
適当にフォルダを作って、その中に適当な名前(test.pyでやりました。)で以下のスクリプトを保存してください。また、同じフォルダにsource.htmlという名前で『コスティキャンのゲーム論』のページをダウンロードしてください。
test.pyを実行してください。test.txtができると思います。(うまくいかなかったら作ったフォルダをカレントディレクトリにしてコマンドラインからやってくだしあ)
最後に、「platex test.txt」を実行して「test.dvi」をつくり、「dvipdfmx test.dvi」で「test.pdf」ができます。これで終わりです。
スクリプト本体
#encoding:cp932 import urllib2 from BeautifulSoup import Tag, NavigableString from BeautifulSoup import BeautifulSoup import codecs def countBreaks(start_): cnt = 0 if start_.__class__ == Tag and start_.name == 'br': cnt += 1 else: return 0, start_ while 1: if start_.nextSibling == None: break else: if start_.nextSibling.__class__ is Tag and start_.nextSibling.name == 'br': cnt += 1 start_ = start_.nextSibling else: if start_.nextSibling == '\n': start_ = start_.nextSibling else: break return cnt, start_ def parseMain(start_, in3br=False): nonfirst = False secondhr = False inh5 = False while(1): if nonfirst: if start_.nextSibling == None: return else: start_ = start_.nextSibling else: nonfirst = True try: if start_.name == u'hr': if secondhr: return else: secondhr = True except AttributeError: pass if (start_.__class__ is Tag): if start_.name == 'br': brcnt, start_ = countBreaks(start_) if brcnt == 1: yield "", start_ elif brcnt == 2: yield "\n\n", start_ elif brcnt == 3: if in3br: print "out 3br" return else: if (start_.nextSibling == None or start_.nextSibling == '\n') or unicode(start_.nextSibling).find(u"さて") != -1: yield "", start_ else: yield "\\begin{screen}", start_ for i in parseMain(start_, True): start_ = i[1] yield i[0], start_ if start_.nextSibling != None: start_ = start_.nextSibling start_ = countBreaks(start_)[1] yield "\\end{screen}", start_ elif start_.name == 'h4': str = unicode(start_.contents[0].string)[0:] str = str.replace(u"・", u"") yield "\\section{" + str+ "}\n", start_ inh5 = False elif start_.name == 'p': for i in parseMain(start_.contents[0]): start_ = i[1] yield i[0], start_ start_ = start_.parent elif start_.name == 'address': for i in parseMain(start_.contents[0]): start_ = i[1] yield i[0], start_ start_ = start_.parent elif start_.name == 'strong': for i in parseMain(start_.contents[0]): start_ = i[1] yield i[0], start_ start_ = start_.parent elif start_.name == 'span': yield unicode(start_.contents[0].string)[0:], start_ elif start_.name == 'h5': if inh5: str = unicode(start_.contents[0].string)[0:] str = str.replace(u"・", u"") yield "\\subsubsection{" + str+ "}\n", start_ else: str = unicode(start_.contents[0].string)[0:] str = str.replace(u"・", u"") yield "\\subsection{" + str + "}\n", start_ inh5 = True elif start_.name == 'em': yield "\\Conclusion{", start_ for i in parseMain(start_.contents[0]): start_ = i[1] yield i[0], start_ yield "}", start_ start_ = start_.parent else: pass else: if start_.string != None: str = unicode(start_.string) str = str.replace("\n", "") str = str.replace("&", "") str = str.replace(u"→", "") yield str, start_ else: yield "", start_ return f = codecs.open("source.html", "r") page = "\n".join(f.readlines()) page = page.replace(" ", "") f.close() soup = BeautifulSoup(page) body = soup.html.body f = codecs.open("test.txt", "w", "cp932") header = u""" \\documentclass{jsarticle} \\usepackage{ascmac} \\newcommand{\\Conclusion}[1]{{\\large{→#1}}} \\begin{document} \\title{コスティキャンのゲーム論\\\\ {\\small 言葉ではなく、デザインのみが、ゲームを語ってくれる}} \\date{} \\maketitle \\setcounter{tocdepth}{3} \\tableofcontents """ f.write(header) for i in parseMain(body.findAll('hr')[1]): f.write(i[0]) footer = """ \\end{document} """ f.write(footer) f.close()
汚くないですか?
ごめん
unicode(start_.nextSibling).find(u"さて") != -1とかないですよね
ごめん
分からないことあったら
聞いてね!
いろいろ紹介していただきマンモス
いろいろなところで紹介していただいています。ありがたやー
Vectorソフトレビューでオリハルコンブが紹介されました。http://www.vector.co.jp/magazine/softnews/100915/n1009152.html
Windows 100% 12月号で森武伝(Molybdenum)が紹介されました。
- 出版社/メーカー: 晋遊舎
- 発売日: 2010/11/13
- メディア: 雑誌
- クリック: 6回
- この商品を含むブログ (2件) を見る
Vectorソフトレビューに載るなんてつい最近まで夢のまた夢だったんだけどなー。小学生ぐらいのときはかなりお世話になったものです。さらには雑誌にも載るなんて。罰が当たりそうです。…でも大学に落ちる罰はいやだな…
サイト移転
一応受験生なのでブログは書きたくないなと思っていたのですが、isweb終了のお知らせでサイト移転を余儀なくされました。しかも時期がかなり急なので早めにしなければと。新しいサイトは
http://ashiato45.shichihuku.com/
です。すでに上のバナーのリンクも張り替えてあります。あと、新しいレンタルスペースはファイル要領制限が厳しくてうpしきれなかった分があるので、その分はVectorさんとSkyDriveさんにお任せすることにしました。Vectorのほうはまだ登録申請がすんでないのでそれからまた更新します。
ではでは。
積み本とか
メモ。
買った本
- 遊びと人間(ロジェ・カイオワ)
倫理の先生の紹介で。遊びについて体系的な分類をして、いろいろ考察してるみたい。冒頭のほう読んだら面白そうだったんだけど、途中でラテン語由来のカタカナ語がたくさん定義されてよくわからなくなり挫折。きちんと机の上で、単語表を作りながら読みたい本。
- 語源中心英単語辞典(田代雅雄)
語源から集めた英単語の本。面白そうだったから買った。電車とかで読む。
- 中高一貫ハイステージ数学幾何 上(林正人)
とある縁で購入。ユークリッド(エウクレイデス?)の原論を再構築したヒルベルトの公理を中学生向けに再編成して語る。多分受験に直接役に立つことはないと思うけど楽しそう。後ろの公理とか定理とか系とかの関係を表した図が圧巻。中学生向けだけど高校生に渡しても歯ごたえあるし、大人に渡しても理系じゃないと辛いと思う。
- じっくり学ぶ曲線と曲面(中内 伸光)
数学の先生の紹介で。でもまだ17頁ぐらいしか読んでないorz
1〜2巻を理解するまで買わない、と心に決めたにもかかわらず購入。そして読んだ、というか目を通したというほうが適切。最後のほうは定義ラッシュと不慣れとゆっくり読む余裕のなさで心が折れた。ごめんなさい。イプシロンデルタあたりは予備知識があったので割りとすんなり。対角線論法とか、なぜあれを思いつくのか謎。伝記とか読めばいいのかしら…
- いかにして問題を解くか(G・ポリア)
一・二年前に購入して流し読みし、そのまま友達に貸したけどまた読みたくなった。
中学生時代の愛読書。の割によく覚えていないので読み直したい。
エイプリルフール解答
dhi_arkさん*1が予備校の解答と解説を書いてくださいました。ありがとうございます!
http://ashiato45.hp.infoseek.co.jp/aprilfool/center_answer.pdf