さっさと使いたい方は→こちらのまとめをどうぞ。青空キンドルの優れた機能に加えて、
ソニーリーダー PRS-T2 を購入し、主に昔読んだ本の再読に使っています。軽くて薄く、なかなか読みやすい端末で気に入っています。これで青空文庫を気軽に読めたらなあ、と思うのです。iPod touchにはbREADERという優れたアプリがあって、アプリ内で青空文庫データのダウンロードとレンダリングまでできます。PRS-T2にはそういった機能がなく、書籍販売サイト Reader Store には青空文庫があるものの、残念なことに2000件弱でしかありません(リーダー本体より、本を売りたいのですから当然ですが)。
あるとき、青空キンドルという大変便利なサイトがあることに気づきました。このサイトを利用すると、青空文庫の書籍を簡単にKindle用pdfに変換することができます。PRS-T2の表示能力はKindleと大差ないらしく、青空キンドルで変換されたpdfも普通に読むことができます。
同サイトによると、変換用のプログラムは、齋藤修三郎さんの青空文庫を読もう!を元にしているのだそうです。そのサイトで用いられている道具立ては、すべてオープンソースだったり、マックが最初から持っていたりするものだけです。
そこで、同様の環境を自分のマックの上で構築することを試みました。そうすればインターネット接続がない条件でも作業できますし、好きなフォントを埋め込むこともできます。作業に用いているのはSnow Leopardです。もともとがiBook G4から移行してきたシステムで、MacPortのPowerPC版TeXを入れようとした形跡もあります。クリーンな状態から組んだものではないことをご承知置き下さい。確認はしていませんが、PowerPCマックでも動くはずです(とはいえ、ソニーリーダー用転送ソフトeBook Transferが動かないかも←うごきません。また、LeopardのAutomatorではDoAoDDが動かず、DoAoURLがループしません(20121231確認))。
クヌース先生が開発した組版システムです。一種のプログラム言語の形で組まれており、さまざまなマクロが存在しますが、ランポール先生のLaTeXが特に有名で、「TeX使っている」といっても、生TeXではなくLaTeXであることがほとんどです。アスキー社はこれらに手を加え、日本語が通る上に縦書きをサポートする上位互換のシステムを開発しました。これがpTeX、pLaTeXです。以後、TeXといえばpLaTeXのことを指すことにします。
TeXは数多くの実行ファイル/データファイルからなる複雑なシステムで、しかも各ファイルをディレクトリツリーの正しい場所においた上で、環境変数と設定ファイルを適切に設定しなければなりません。昔はC(更に昔はPascal)のソースコードから自力でコンパイルしたものです。現在では後述のMacTeXのように、普通のアプリケーションと同じ感覚で導入できる良い時代になりました。
青空文庫のデータをrubyスクリプトでTeXデータに変換し、これをTeXによってpdfに変換しているようです。kindleに適した組版を実現するために、組版の仕方を指定するファイルを3種類使っています。
MacTeXからMacTex.pkgを入手します。2GBのファイルなので、ミラーサイトで近場を探してください。導入が済んだら、 MacTeX 2012 で日本語に従って、TeXShopを設定します(内部的な設定ファイルができます)。今の段階では「日本語のタイプセット」の部分は無視して、「TeXShop で使う」「otfパッケージを使う」の部分だけを参考にしてください。
同サイトのサンプルデータをTeXShopに読み込み、「タイプセット」ボタンを押して、正しくpdfが表示されればOKです。
ここまでで、「UTF-8で書かれた日本語TeXデータをpdfにする」ことができるようになりました。これはこれで、世界的に利用されている業界標準ツールを一つ、マックの上に組んだことになり、大変喜ばしいのですが、スタンドアロン青空キンドルを実現するには、まだ先があります。
なお、MacTeXを含むTeXLiveについて更に知りたい方は、奥村晴彦さんのMac - TeX Wikiをご覧下さい。
ここから先、ターミナルでの操作が出てきます。文字ベースで作業するのは生粋のマックユーザには受け入れがたいかもしれませんが、CP/M→MS-DOS→OS/2とやってきたものにとっては故郷みたいなものです。便利なので是非慣れてください。
通常ですとsudoというコマンドを使って、全てのユーザ向けの設定を行います。sudoは「他の利用者に成り代わって作業する」コマンドで、マックではスーパーユーザ(システムの全権を持ったユーザ)として作業する時に、suコマンドの代わりに使います。今回は「自分だけ」の変換システムということで、sudoコマンドを使わない範囲で作業します。ですから、うっかり失敗しても、システム全体や他のユーザには影響がないはずです。
変換作業用の次のファイルを得ます。
1-2は青空キンドルから得られます。3も同サイトから得られますが、実際に使うのはずっと後の方です(使わないですますこともできます)。4-5は青空文庫を読もう!の中の青空パッケージに含まれます。6は藤田眞作さんのfurikana.styを右クリック(ないしcontrol + クリック)して「リンクしたファイルを保存」して得ます。また、必須ではありませんが、Adobe Readerを用意しておくと便利です。
変換作業用のディレクトリ、たとえば AoKin を作成します。場所はどこでも構いません。ここに az2tex.rb をおきます。
ファインダで「自分のホームディレクトリ」を見てください。そこに「ライブラリ」(または「Library」)というフォルダがあります(Snow Leopardの場合。最近のMac OS Xでは隠しフォルダになっています)。判らなければ、「フォルダに移動」で「~/Library」を指定してみてください。ここに次のようなフォルダを作っていきます。
最後に作った「latex」フォルダに aozora.sty, 1010crop.sty, furikana.styをおきますが、必ず文字コードをUTF-8に変換してコピーしてください(私はJedit Xで行いました。マック標準の「テキストエディット」でも変換することができます。「環境設定」で、保存に使う文字コードを「自動」から「UTF-8」に変更してください)。azlogo.eps もここにおきます(「青空文庫」のロゴ)。
このディレクトリは、ターミナルから「~/Library/texmf/tex/latex」という名前で見えるはずです。ターミナルを開いて
と打ち込んでリターンを押してください(コンピュータ名:カレントティレクトリの部分は無視して構いません)いま置いたファイルが表示されるはずです。[コンピュータ名:カレントティレクトリ]ユーザ名% ls ~/Library/texmf/tex/latex
青空文庫から624_ruby_5668.zipをダウンロードして展開すると sangetsuki.txt というファイルができます(中島敦の『山月記』新字新仮名)。これを先ほどの AoKin ディレクトリにコピーします。
ターミナルから AoKin ディレクトリに移動して(ターミナルに cd とタイプして、ファインダの AoKin フォルダをドラッグ&ドロップし、リターンを押す)
とタイプしリターンを押すと、sangetsuki.tex ができます。これがTeXのデータです。これはJISコード(ISO-2022-JP)で書かれているので、エディタ他でUTF-8に変換します(最初からUTF-8にする方法は後述)。[コンピュータ名:カレントティレクトリ]ユーザ名% ruby -Ks az2tex.rb sangetsuki.txt
UTF-8に変換したtexファイルをTeXShopにロードし、タイプセットすると、pdfができます。プレビューでご覧下さい。
ここで、sangetsuki.texの最初の部分にある
を\usepackage[device=kindle2,size=normal]{aozora}
のようにしてからタイプセットすると字が小さくなります(最初からsmallにする方法は後述)。\usepackage[device=kindle2,size=small]{aozora}
今回導入したTeXはUTF-8で動きます(いろいろ思う所はありますが、ま、世の流れというやつで)。そこで az2tex.rb に修正を加え、JISではなくUTF-8で出力するようにします。エディタで az2tex.rb を開き、335行目からの
の# JISで出力 def normalize(l) Kconv::tojis(l.to_s) end
をKconv::tojis(l.to_s)
に変更します。Kconv::toutf8(l.to_s)
常に字を小さくしたい場合は、52行目からの
の# 文字サイズ、段組みのオプション require 'optparse' charsize = "normal" kindle = "kindle2"
をcharsize = "normal"
にします。charsize = "small"
この文書の最後にあるaz2texはこれらのカスタマイズを行った上、作者名・題名メタデータの埋込が有効になるように改造したものです。
さて、今作った sangetsuki.pdf をソニーリーダーに転送し、読んでみましょう。一応読める形にはなっていますし、大変軽くさくさくページがめくれて良い感じです。でも全編ゴシック体になってしまっています。文芸作品の感じではありません。ソニーリーダーの上で明朝体でpdfを表示するには、pdfの中にフォントを埋め込む(embed)必要があります。一番簡単なのは「プレビュー」の印刷メニューから「PDFに保存」することですが、残念ながらめくり方向が逆になってしまいます。そこで TeX の機能を用いて埋め込みます。
IPAフォントはオープンソースの日本語フォントで、IPAフォントのダウンロードにて公開されています。今回導入したTeXLive 2012はデフォルトで IPA, IPAex の二つのフォントを含んでおり、わざわざダウンロードしなくても簡単に利用することができるばかりか、ライセンス内容に同意すれば、フォントを埋め込んだ状態でpdf等のデータを再配布することができます。ライセンス内容は同サイトをご覧下さい。
ターミナルから、
とすると、IPAフォントを埋め込む設定になります。元に戻すには[コンピュータ名:カレントティレクトリ]ユーザ名% updmap --setoption kanjiEmbed ipa
とします。IPAexフォントを埋め込むには[コンピュータ名:カレントティレクトリ]ユーザ名% updmap --setoption kanjiEmbed noEmbed
とします。操作後再度タイプセットすればフォントが埋め込まれたpdfができます。[コンピュータ名:カレントティレクトリ]ユーザ名% updmap --setoption kanjiEmbed ipaex
IPAフォントは美しい実用的なフォントですが、マックに最初からついてくるフォントを使えないのはもったいない感じがします。そこでヒラギノフォントを埋め込んでみます。ただし、著作権の問題がでてきますので、これを埋め込んだpdfは個人利用に限ると思ってください。
先ほど作った ~/Library/texmf フォルダの下に、fonts, opentype, hiraginoというフォルダをこの順で掘っていきます。最終的には~/Library/texmf/fonts/opentype/hiraginoというディレクトリができるようにします。ここまでできたら、ターミナルで次のコマンドを打ちます。
cd ~/Library/texmf/fonts/opentype/hiragino ln -fs "/Library/Fonts/ヒラギノ明朝 Pro W3.otf" ./HiraMinPro-W3.otf ln -fs "/Library/Fonts/ヒラギノ明朝 Pro W6.otf" ./HiraMinPro-W6.otf ln -fs "/Library/Fonts/ヒラギノ丸ゴ Pro W4.otf" ./HiraMaruPro-W4.otf ln -fs "/Library/Fonts/ヒラギノ角ゴ Pro W3.otf" ./HiraKakuPro-W3.otf ln -fs "/Library/Fonts/ヒラギノ角ゴ Pro W6.otf" ./HiraKakuPro-W6.otf ln -fs "/Library/Fonts/ヒラギノ角ゴ Std W8.otf" ./HiraKakuStd-W8.otf ln -fs "/System/Library/Fonts/ヒラギノ明朝 ProN W3.otf" ./HiraMinProN-W3.otf ln -fs "/System/Library/Fonts/ヒラギノ明朝 ProN W6.otf" ./HiraMinProN-W6.otf ln -fs "/Library/Fonts/ヒラギノ丸ゴ ProN W4.otf" ./HiraMaruProN-W4.otf ln -fs "/System/Library/Fonts/ヒラギノ角ゴ ProN W3.otf" ./HiraKakuProN-W3.otf ln -fs "/System/Library/Fonts/ヒラギノ角ゴ ProN W6.otf" ./HiraKakuProN-W6.otf ln -fs "/Library/Fonts/ヒラギノ角ゴ StdN W8.otf" ./HiraKakuStdN-W8.otf(コピペしてターミナルに貼付ければOKです)
これはマックのフォントファイルに対する「シンボリックリンク」を作成する作業です。シンボリックリンクというのはエイリアスのようなものだと思ってください。これがすんだら、後はIPAフォントと同じように操作すれば埋め込まれます。
[コンピュータ名:カレントティレクトリ]ユーザ名% updmap --setoption kanjiEmbed hiragino
Adobe Readerを導入していると、Adobeの小塚フォントも使えます。
~/Library/texmf/fonts/opentype/kozukaをつくっておいて、
cd ~/Library/texmf/fonts/opentype/kozuka ln -fs "/Applications/Adobe Reader.app/Contents/Resources/Resource/CIDFont/KozGoPr6N-Medium.otf" ./KozGoPr6N-Medium.otf ln -fs "/Applications/Adobe Reader.app/Contents/Resources/Resource/CIDFont/KozMinPr6N-Regular.otf" ./KozMinPr6N-Regular.otfこれを埋め込むには、dvipdfmx の-fオプションで、kozuka.mapを指定してください(何を言っているのかは後で説明します)。
できあがった pdf をAdobe Readerで読み込み、「プロパティ」を見ると、実際に埋め込まれたフォントの種類が表示されます。埋込が確認できたらソニーリーダーに転送して読んでみましょう。今度は埋め込んだフォントで表示されるはずです。フォントを埋め込んでいないpdfよりは重いけれど、読書には問題がないレスポンスが得られることがわかると思います。
PRS-T2で実際に読んだところ、ヒラギノフォントを埋めこんだ場合、「カスタムビュー」→「画質の調整」を「標準」にするのが一番読みやすい感じです。
では次は、小栗虫太郎の「黒死館殺人事件」です。ファイルは1317_ruby_22263.zipです。このファイルを AoKin にコピーして展開すると、1317_ruby_22263という名前のフォルダができ、その中に本文(kokushikan.txt)と、大量の「なんとか.png」というファイル(挿絵)ができます。このpngファイルをEPSという形式にしないとタイプセットできません。
画像形式をPNGからEPSにするのは、MacTeXとともに導入される convert というプログラムで可能です。ターミナルで
とタイプしてみてください。ずらずらと英文で使い方の説明が出てきます。それを読むと、[コンピュータ名:カレントティレクトリ]ユーザ名% convert
とすると、画像ファイルをEPSに変換することができるようです。 一個一個処理すると大変なので、シェルスクリプトで一括変換します。次の5行をコピペして、 PNGtoEPS.sh という名前で AoKin ディレクトリに保存してください。[コンピュータ名:カレントティレクトリ]ユーザ名% convert 画像ファイル名 画像ファイル名.eps
#!/bin/sh for f in *.png do convert $f $f.eps doneついで、AoKinディレクトリで
というコマンドを実行してください。これで PNGtoEPS.sh というスクリプトが実行可能になりました。UNIXの世界(Mac OS XもUNIXの一つです)では、ファイルが実行可能かどうかは、そのファイルのフラグで決まります。+xというのが、実行可能フラグを立てろという指令を表しています(このスクリプトを実行する際、OSはスクリプトの最初の一行を読み、/bin/というディレクトリにあるshというプログラムを使ってこのスクリプトを解釈実行しようとします。実はaz2tex.rbの最初の行もまた、このrubyスクリプトを動作させる方法を書いているのです。ところが/usr/local/bin/にrubyが見つからないようで、上手く実行することができません)。[コンピュータ名:カレントティレクトリ]ユーザ名% chmod +x PNGtoEPS.sh
シェルスクリプト PNGtoEPS.sh は、「現在のディレクトリにある全てのPNGファイルをEPSに変換せよ」という命令を記述したものです。実際に使ってみましょう。今 AoKin ディレクトリにいるとします(カレントティレクトリの最後の部分が「/AoKin」)
新たに表示されたコマンドラインから、カレントティレクトリの最後の部分が「/AoKin/1317_ruby_22263」に変わったはずです。タイプするのが面倒ならば、cdと打ち込んだ後で、ファインダから1317_ruby_22263フォルダをドラッグ&ドロップしても同じです。ここで[コンピュータ名:カレントティレクトリ]ユーザ名% cd 1317_ruby_22263
とタイプすると、一瞬ですべてのPNGファイルがEPSに変換されます。「../」は、「一つ上のディレクトリ(フォルダ)」を表しています。今回は、変換作業をすべてターミナルからコマンドを打って行いましょう。[コンピュータ名:カレントティレクトリ]ユーザ名% ../PNGtoEPS.sh
いろいろエラーメッセージが出ますが、無事に kokushikan.pdf ができあがりました。フォントの埋込を指定してあれば、このpdfファイルの大きさはほぼ2.4MBになっているはずです(IPAexフォントの場合)。pdfができてしまえば、このフォルダの中の他のファイルは全てゴミ箱に入れて構いません。[コンピュータ名:カレントティレクトリ]ユーザ名% ruby -Ks ../az2tex.rb kokushikan.txt [コンピュータ名:カレントティレクトリ]ユーザ名% platex kokushikan.tex [コンピュータ名:カレントティレクトリ]ユーザ名% dvipdfmx -f kanjix.map kokushikan.dvi
簡単に説明しておくと、最初の行では上の方で出てきた ruby スクリプトを使って、青空文庫形式からTeXデータを生成します。二行目の platex が、TeXデータを印刷用の「デバイス独立」ファイルに変換するプログラムです(これがpLaTeXの本体)。三行目の dvipdfmx が「デバイス独立」ファイルをpdfに変換するプログラムです。昔はpdfではなくPostScriptに変換してGhostScriptで読むというのが主流でした。
実際にこのシステムで変換したpdfの例です。
上の例で、kanjix.map というファイル名が出てきました。これはTeXでmapファイルとよばれるもので、最終的な印刷物(pdf)を作るのに、実際にはどんなフォントファイルを使うのかを指定しています。ヒラギノフォントを埋め込む際の kanjix.map の一部を引用すると、
などとなっており、hminb-vというフォントが指示されたら、実際にはHiraMinPro-W6というフォントを使い(太い)、hminr-vならHiraMinPro-W3を使い(細い)印刷します。このHiraMinPro-W3などは、「ヒラギノフォントの埋込」の時に使った名前であることをご記憶でしょうか。hminb-h H HiraMinPro-W6 hminb-v V HiraMinPro-W6 hminbn-h H HiraMinProN-W6 hminbn-v V HiraMinProN-W6 hminl-h H HiraMinPro-W2 hminl-v V HiraMinPro-W2 hminln-h H HiraMinProN-W2 hminln-v V HiraMinProN-W2 hminr-h H HiraMinPro-W3 hminr-v V HiraMinPro-W3 hminrn-h H HiraMinProN-W3 hminrn-v V HiraMinProN-W3
では、この kanjix.map はどこにあるのでしょうか。それは次のディレクトリです。
ヒラギノフォントを埋め込む時の kanjix.map を例えば hiragino.map、IPAフォントを埋め込む時の kanjix.map を例えば ipa.map などの名前で同じディレクトリに保存しておけば、わざわざupdmapを使わなくても、~/Library/texlive/2012/texmf-var/fonts/map/dvipdfmx/updmap
のkanjix.map の部分をhiragino.mapやIPA.mapに変えれば、好きなフォントを埋め込めるようにできます。[コンピュータ名:カレントティレクトリ]ユーザ名% dvipdfmx -f kanjix.map なんとか.dvi
青空キンドルが利用している青キン明朝フォント aokin-mincho.ttf を使うには、次のようにします。次の8行をコピペして、aokin.map という名前で kanjix.map と同じディレクトリに保存してください。
rml H aokin-mincho.ttf rmlv V aokin-mincho.ttf gbm H ipag.ttf gbmv V ipag.ttf hminr-h H aokin-mincho.ttf hminr-v V aokin-mincho.ttf hminb-h H aokin-mincho.ttf hminb-v V aokin-mincho.ttf次に、aokin-mincho.ttf を
~/Library/texmf/fonts/opentypeにコピーします。後は
で青キン明朝フォントを埋め込めます。[コンピュータ名:カレントティレクトリ]ユーザ名% dvipdfmx -f aokin.map なんとか.dvi
ここまでの作業を自動化するために、こんなシェルスクリプトを作ると便利です。hiragino.mapの所は、適宜好きなフォントに変えてください。
#!/bin/sh ruby -Ks az2tex.rb $1.txt platex $1.tex dvipdfmx -f hiragino.map $1.dvi
#!/bin/sh ../PNGtoEPS.sh ruby -Ks ../az2tex.rb $1.txt platex $1.tex dvipdfmx -f hiragino.map $1.dvi
do_aokin1はPNGToEPS.shと同じようにchmod +x して、次のように使います。
[コンピュータ名:カレントティレクトリ]ユーザ名% ./do_aokin1 sangetsuki
do_aokin2は画像を含むフォルダをAoKinディレクトリコピーして、そのフォルダにcdした上で、
[コンピュータ名:カレントティレクトリ]ユーザ名% ../do_aokin2 kokushikan
#!/bin/sh FILENAME=$1 FN=${FILENAME%.txt} FNNODIR=${FN##*/} ruby -Ks az2tex.rb $FN.txt platex $FN.tex dvipdfmx -f hiragino.map $FNNODIR.dvi
これは
のように使います。少し便利にしてあり、kokushikan.txtの部分は任意のディレクトリ名を含んで構いません。つまり、青空文庫ファイルを展開してできたtxtファイルをドラッグ&ドロップして使えます。texファイルはtxtと同じディレクトリに、他のファイルは AoKin ディレクトリにできます。Automatorでシェルスクリプトを使えるらしいので、もっといろいろできそうです。[コンピュータ名:カレントティレクトリ]ユーザ名% ./doaokin1 kokushikan.txt
こうやって作った kokushikan.pdf をソニーリーダーに転送すると、ちょっと寂しいことが起こります。書名や著者名が出ません。寂しいだけでなく、不便です。az2tex.rbは、TeXファイルの最初の方に
と書名・著者名を指定してくれているのですが、dvipdfmxがこれをpdfに書き込んでくれないようです。そこで、書名・著者名をpdfに書き込むツールを使います。 lrf-epub-toolsから LRFTools-0.9.236.jar(これを書いている時の最新版)をダウンロードして、AoKinに入れてください。 kokushikan.pdf を 「小栗虫太郎-黒死館殺人事件.pdf」(著者名-作品名.pdf)と改名して、AoKin ディレクトリにもってきて、\title{黒死館殺人事件} \author{小栗虫太郎}
とします。これでAoKinディレクトリ以下にある、「著者名-作品名.pdf」というパターンのファイル名をもつpdfファイルが全て処理されます。[コンピュータ名:カレントティレクトリ]ユーザ名% java -jar LRFTools-0.9.236.jar updfmd ./
でもやっぱり著者名や作品名を埋めるのが面倒です。もともと青空文庫データがもっている項目を人力で入力するのは絶対に間違っています。実は、dvipdfmxはpdfへのメタデータ埋込機能を持っていて、題名や著者名をpdfに直接書き込むことができます。例えばsangetsuki.texの一番最初の部分に
と書き加えて platex, dvipdfmxで処理してみてください。できあがった sangetsuki.pdf をAdobe Readerで読んで「プロパティ」→「概要」と見ると、題名・著者名が正しく表示されています。ソニーリーダーで読み込んでも大丈夫です。この部分はaz2tex.rbを若干変更すれば自動的に追加することができるのですが、一行二行書き換える程度ではすまない変更なので、青空キンドルの管理者/作成者に改造版を配布できるか問い合わせてみようと思っています。\AtBeginDvi{\special{pdf:tounicode EUC-UCS2}} \special{pdf:docinfo << /Title (山月記) /Author (中島敦 ) >>}
OKをいただけたので公開します。az2texをaz2tex.rbのかわりに使ってください。出力はUTF-8、文字サイズはsmallに変更してあります。内部コードの自動判別部分はnDikiさんの記述を参考にしました。私はPascalでプログラミングを覚えたロートルでして(今でもGNU RとPascalばっかり使っています。でもrubyは面白そうですね)、Bourne Shellやrubyには暗いので、本来ならもっと上手に書けるのかもしれません。それにしても、\AtBeginDvi{\special{pdf:tounicode EUC-UCS2}}で動いちゃったってことは、内部コードがEUC-JPだってことなんですが、本当なのでしょうかねえ。
青空キンドルの管理者/作成者にはまた、高橋さんのaozora4readerもオープンソースで良さそうだ、と教えていただきました。重ね重ねありがとうございました。
次はダウンロードしたZIPファイルを直接扱えるようにスクリプトを改良します。こうすると余得があって、上のdo_aokin1とdo_aokin2とを統合できるのです。キモは二行目で、特定のディレクトリにZIPを展開させています。それを作業ディレクトリとして利用します。次のスクリプトを好きな名前(たとえばDoAoKin)で AoKin ディレクトリにコピペして、chmod +xしてください。
#!/bin/sh unzip -d work $1 cd work for f in *.png do convert $f $f.eps done for f in *.txt do FN=${f%.txt} ruby -Ks ../az2tex $FN.txt platex $FN.tex dvipdfmx -f hiragino.map $FN.dvi done cd ..これは
のように使います。フォルダからドラッグ&ドロップすると便利です。AoKinの下にworkというフォルダができ、そこにpdfその他がすべて収められます。[コンピュータ名:カレントティレクトリ]ユーザ名% ./DoAoKin ZIPファイル名
これで一応、青空キンドルのスタンドアロン版(もどき)ができました。有用なツールを開発配布してくださる作者/プログラマの方々、青空文庫を維持拡充してくださる文学愛好家の方々に感謝して、どんどん青空文庫を読みましょう。
次はAutomatorを使ってURLからpdfを作ることを企んでいます。そこまで行ってやっと「スタンドアロン版青空キンドル」を名乗れる気がします。でも、引数の受け渡しがよくわからないんだなあ…
やっとできました。AozoraPDFAuto.zipの中のDoAoDD、DoAoURLはそれぞれZIPファイルをドラッグ&ドロップしたり、URLをコピペしたりすると自動的にpdfを作るAutomatorアプリケーションです。DoAoDD、DoAoURLをAutomatorにドラッグ&ドロップすると中身が見えますから、走らす前にそれぞれの「シェルスクリプトを実行」の中の
cd ~/Documents/AoKinをご自身で設定した作業ディレクトリ(az2texのあるディレクトリ)に変更します。また、「DoAoURL」の「URLをダウンロード」の「場所」が同じディレクトリを指すようにしてください。DoAoDDはZIPファイルを落とすとpdfができ、DoAoURLは起動するとURLを聞いてくるので、青空文庫テキストファイルのURL(「黒死館殺人事件」なら「http://www.aozora.gr.jp/cards/000125/files/1317_ruby_22263.zip」)を入力するとpdfができます。できる場所は、この場合は ~/Documents/AoKin/work です。URLのコピペは、リンクの青文字部分(Safariのデフォ設定なら)を右クリック(あるいは control + クリック)して「リンクをコピー」を選ぶと簡単にすることができます。
短編集を作るには、pdfを束ねていく方法がよく用いられているようです。齋藤さんの「青空文庫を読もう!」には、もともと目次付の短編集を作る機能がありました。目次がつくと、もっと「本物」な感じがします。それを復活させようとしているのが、aozoracollection.zipです。一応動くようになったので公開します。齋藤さんのaozora.styから関係のありそうな所を切り出して、若干の修正を加えたものです。展開してできるaozoracollection.styを~/Library/texmf/tex/latexに入れれば使えます。
短編集を作るには、まず、元になる青空文庫のデータから、一本一本TeXファイルを作ります。上のDoAoURLを使うと楽です。ここでは大阪圭吉の作品をまとめてみましょう。「あやつり裁判」からayatsuri_saiban.texを、「石塀幽霊」からishibeiyurei.texを、という風に、こつこつTeXファイルを作って、適当なディレクトリにまとめて置きます。
同じディレクトリに、次の二つのTeXファイルを作ります。
\ifnum 42146=\euc"A4A2 \AtBeginDvi{\special{pdf:tounicode EUC-UCS2}}\else \AtBeginDvi{\special{pdf:tounicode 90ms-RKSJ-UCS2}}\fi \special{pdf:docinfo << /Title (大阪圭吉短編集) /Author (大阪圭吉) >>} \documentclass[a5paper]{tbook} \usepackage[deluxe]{otf} \usepackage{furikana} \usepackage{type1cm} \def\rubykatuji{\rubyfamily\tiny} \def\rubykatuji{\tiny}%for UTF package \usepackage[device=kindle2,size=small]{aozora} \begin{document} このファイルは、インターネットの図書館、青空文庫(http://www.aozora.gr.jp/)で作られました。入力、校正、制作にあたったのは、ボランティアの皆さんです。 \end{document}これを osaka_keikichi_tampen_title.tex という名前で同じディレクトリに保存し、
\ifnum 42146=\euc"A4A2 \AtBeginDvi{\special{pdf:tounicode EUC-UCS2}}\else \AtBeginDvi{\special{pdf:tounicode 90ms-RKSJ-UCS2}}\fi \documentclass[a5paper]{tbook} \usepackage[deluxe]{otf} \usepackage{furikana} \usepackage{type1cm} \usepackage[device=kindle2,size=small]{aozora} \usepackage{aozoracollection} \def\rubykatuji{\rubyfamily\tiny} \title{大阪圭吉短編集} \author{大阪圭吉} \date{} \begin{document} \maketitle \tableofcontents \articleinput{ayatsuri_saiban} \articleinput{ishibeiyurei} \articleinput{ugokanu_geigun} \articleinput{kankanmushi} \articleinput{kanno_yobare} \articleinput{kichigai_kikansha} \articleinput{ginza_yurei} \articleinput{koki} \articleinput{kosui_shinshi} \articleinput{sankyojin} \articleinput{sannoji_ryokokai} \articleinput{shino_kaisosen} \articleinput{chinnyusha} \articleinput{departno_kokeiri} \articleinput{todaiki} \articleinput{tomurai_kikansha} \articleinput{hakuyo} \articleinput{hanatabano_mushi} \articleinput{yureizuma} \articleinput{osaka_keikichi_tampen_title} \end{document}これを適当な名前で同じディレクトリに保存します。ここでは、osaka_keikichi_tampen.texという名前で保存したとします。ターミナルでそのディレクトリに移動しておいて、
これでできあがりです。\articleinputで指定した順序で目次に登場します。それぞれのTeXファイルに題名・作者を指定する命令が埋め込んであるので、最後のosaka_keikichi_tampen_title.texを加えないと「幽霊妻」が全体の題名になってしまいます。こうやって作ったサンプルを示します。[コンピュータ名:カレントティレクトリ]ユーザ名% platex osaka_keikichi_tampen [コンピュータ名:カレントティレクトリ]ユーザ名% platex osaka_keikichi_tampen [コンピュータ名:カレントティレクトリ]ユーザ名% dvipdfmx osaka_keikichi_tampen
\articleinputのかわりに\ArticleInputを使うと作者名も入ります。aozoracollection.styのかわりにaozorapoems.styを使うと、各題名が独立したページになりませんので、詩集などに適しています。次はAutomatorで簡単にできないか考えてみます。
自動化はなかなか困難だと感じてきました。aozoracollection.styに若干修正を加え、久生十蘭の「顎十郎捕物帳」に対応させました。このシリーズはタイトルがすべて「顎十郎捕物帳」となっており、各巻をサブタイトルで分けています。articleinputを使うと、目次が全て「顎十郎捕物帳」になってしまいます。そこで、articleinputsubtitleというのをでっちあげました。
\ifnum 42146=\euc"A4A2 \AtBeginDvi{\special{pdf:tounicode EUC-UCS2}}\else \AtBeginDvi{\special{pdf:tounicode 90ms-RKSJ-UCS2}}\fi \documentclass[a5paper]{tbook} \usepackage[deluxe]{otf} \usepackage{furikana} \usepackage{type1cm} \usepackage[device=kindle2,size=small]{aozora} \usepackage{aozoracollection} \def\rubykatuji{\rubyfamily\tiny} \def\rubykatuji{\tiny}%for UTF package \title{顎十郎捕物帳} \author{久生十蘭} \date{} \begin{document} \maketitle \tableofcontents \articleinputsubtitle{01sutekubo} \articleinputsubtitle{02inarino_tsukai} \articleinputsubtitle{03miyakodori} \articleinputsubtitle{04kamaitachi} \articleinputsubtitle{05nezumi} \articleinputsubtitle{06sanninme} \articleinputsubtitle{07tako} \articleinputsubtitle{08korikenjo} \articleinputsubtitle{09tanchono_tsuru} \articleinputsubtitle{10nobuseridaimyo} \articleinputsubtitle{11godaisanno_norimono} \articleinputsubtitle{12kanrinmaru_uketori} \articleinputsubtitle{13entobune} \articleinputsubtitle{14handokachifu} \articleinputsubtitle{15hidakagawa} \articleinputsubtitle{16kikukosui} \articleinputsubtitle{17hatsuharu_tanukigassen} \articleinputsubtitle{18eitaikyo} \articleinputsubtitle{19ryogokuno_okujira} \articleinputsubtitle{20kinposa} \articleinputsubtitle{21kagoyano_kyaku} \articleinputsubtitle{22kohadano_sushi} \articleinputsubtitle{23nekomeno_otoko} \articleinputsubtitle{24imori} \articleinput{ago_juro_torimonocho_title} \end{document}のように使います。ago_juro_torimonocho_title.texは例によって、
\ifnum 42146=\euc"A4A2 \AtBeginDvi{\special{pdf:tounicode EUC-UCS2}}\else \AtBeginDvi{\special{pdf:tounicode 90ms-RKSJ-UCS2}}\fi \special{pdf:docinfo << /Title (顎十郎捕物帳) /Author (久生十蘭) >>} \documentclass[a5paper]{tbook} \usepackage[deluxe]{otf} \usepackage{furikana} \usepackage{type1cm} \def\rubykatuji{\rubyfamily\tiny} \def\rubykatuji{\tiny}%for UTF package \usepackage[device=kindle2,size=small]{aozora} \begin{document} このファイルは、インターネットの図書館、青空文庫(http://www.aozora.gr.jp/)で作られました。入力、校正、制作にあたったのは、ボランティアの皆さんです。 \end{document}のような中身です。ただし、24imori.texはaz2texで処理しただけでは駄目で、
\ifnum 42146=\euc"A4A2 \AtBeginDvi{\special{pdf:tounicode EUC-UCS2}}\else \AtBeginDvi{\special{pdf:tounicode 90ms-RKSJ-UCS2}}\fi \special{pdf:docinfo << /Title (顎十郎捕物帳) /Subtitle (蠑/UTF{8788}) /Author (久生十蘭) >>} [中略] \title{顎十郎捕物帳} \subtitle{蠑\UTF{8788}} \author{久生十蘭} \date{} \begin{document}のように蠑螈の「螈」のコードを手動で指定する必要があります。
しばらく運用しているうちに、いくつか不足点に気づきました(上述の話にも少し絡みます)。文字の大きさの指定を反映したり、フランス語のセディーユ(çのひげ)やæのような合字を扱ったりすることがうまくできないようです。Rubyプログラミングができればなんとかできるのかな。とりあえず、手動でTeXソースを弄った例をいくつか。
「猫」では、TeXお得意の数式機能も用いました。単なる四角い枠を描く命令がなかったかなあ。ドグラ・マグラの名刺や切手欄に使うと格好いいのですけど。ここで、外字の使い方も書いておきます。ドグラ・マグラにでてくる三重感嘆符や「惻隠」の「隠」でこざとへんをりっしんべんに替えたもの(U+61DA)は、ヒラギノフォントにもありません(三重感嘆符はUTF8自体にないようです)。これらは外字(一種の「絵」)として表示させる必要があります。このような外字は、自由に使えるグリフ集積所、GlyphWikiのデータをもとにInkscapeを用いて生成すると便利です。
まず、GlyphWikiで、u61daと二重感嘆符(u203c)を検索し、「パス」を保存します。ファイル名は、それぞれ u61da.path.svg および u203c.path.svg です。u61da.path.svgをInkscapeにロードし、オブジェクトをグループ化した上で(Object>Group)半時計方向に90度回します。これは縦書きに合わせるためです。この画像をEPS形式で保存します(仮に、u61da_2.eps という名前にします)。その際、convert texts to pathにチェックを入れてください。
次は、このEPS画像を文字として表示するように、TeXの命令を書きます。
\newcommand{\inn}{\kern0zw\raisebox{-0.5zw}{\includegraphics[width=1zw]{u61da_2.eps}}\kern-0zw}これを、TeX文書の最初の方に書いておきます。TeXは\innという命令を見ると、この行を思い出して、u61da_2.epsを文字のように一文字の幅(縦書きなのでここでは上下の長さ)におさめて表示しようとします。\kernは横方向(同じくここでは上下方向)に、\raiseboxは高さ方向(同じくここでは左右方向)に文字をずらす命令で、タイプセットした結果をみて適当な位置に合わせます。u203c.path.svg も同様に、びっくりマークを一つ増やした上で横に倒し、u203c_2.eps という名前で保存し、TeXの命令を加えます。こうして作ったのが「ドグラ・マグラ」の外字ファイルとTeXファイルであり、IPA版「ドグラ・マグラ」pdfです。黒死館殺人事件では、穴冠に石が外字なので、それを作成し、更に本文中に数多く出てくる外字を埋め込む位置を微調整し(aozora.styにわずかな変更を行いました。aozora.sty.zipが改訂版です)、作者の序をつけるなどしたものが「黒死館殺人事件」の外字ファイルとTeXファイルであり、IPA版「黒死館殺人事件」pdfです。ここでは、90度回転させるのをTeX側で行っています。「ページ中央に書く」のが簡単なのが、ページの概念のあるTeXならではです。
さらに調子に乗ったのが、橋本進吉博士の書籍の外字ファイルとTeXファイル、およびこれをもとにしたIPA版「古代国語の音韻に就いて」「駒のいななき」pdf、IPA版「国語音韻の変遷」pdfです。IPAではフォントが足りないので、できればご自身の手でヒラギノフォントを使って作り直してください(ヒラギノフォントだと罫線の向きも合います)。「国語音韻の変遷」に出てくる括弧付漢数字は括弧付アラビア数字にしました。音声記号をしめす括弧も、単純なかぎ括弧([])にしました。縦書きの本文に横書きの音声記号がまざる難しい原稿で、なんとか読める程度にまでしかできませんでした。それでも、高校生の頃、岩波文庫の「古代国語の音韻に就いて」を読んで、世の中にはこんなに頭のいい人がいるのか、なんて面白いんだろうと感心したことを思い出しました。岩波さん電子書籍化頼みますよ。勉強系ですと、折口信夫のIPAex版「『古代研究』第一部 民俗学篇第一」pdf、IPAex版「『古代研究』第一部 民俗学篇第二」pdfも面白そうです。それぞれのソースは第一、第二です。これもヒラギノフォントで出力すると罫線の向きが正しくなります。
折口信夫を読んでいたらやはり傍線が欲しくなり、それを書いていたらアクサンの自動展開もできそうだと思うようになりました。まだ試験中ですが、試してみたい方は、次のようにしてください。まず、aozora.styとaz2texを傍線版aozoraスタイルのものに交換します。ついでTeX&MetaPostであそぼうから udline25.lzh を入手し、展開し、出てくる udline.sty をUTF8に変換して、aozora.styと同じディレクトリに入れます。
傍線を引くこと自体は udline.styのolコマンドに、アクサン等を付けるのはTeXに任せています。olコマンドの中では引数をもつコマンドを{}で守らないといけないので、az2texではそこに一工夫しています。「黒死館殺人事件」に出てくる長い傍線や「アッシャー家の崩壊」の冒頭も正しく表示します。制限として、次のようなものがあります。
まだ全パターンを確認できていませんが、それなりに動くようになりました。折口の「能楽に於ける「わき」の意義」が随分読みやすくなりました。朔太郎の「純情小曲集」の「あやめ香水」「のすたるじや」にはやっぱり傍線がないと… プログラムの動作を徳冨蘆花の「みみずのたはこと」(IPA版pdf)でご確認ください。ソースはこちら。「黒死館殺人事件」、「古代国語の音韻に就いて・駒のいななき」、「国語音韻の変遷」、「『古代研究』第一部 民俗学篇第一」、「『古代研究』第一部 民俗学篇第二」も傍線付のものに入れ替えました。
アクサンの自動展開を組み込んだ副作用として、「アクセント分解」を数式として処理しようとしてplatexが途中で止まるということが起こりにくくなったはずです。
年越し用にどうぞ:折口信夫の「『古代研究』第二部 国文学篇」(IPAex版pdf)とソース(\oomidashiを\nakamidashiにしてタイプセットしてください)、南方熊楠の「十二支考」(IPAex版pdf)とソース(外字が多くて哭きました)。
国木田独歩の「小春」その他を処理できるようにaz2texとaozora.styを修正しました。20130109版をお試しください。また、青空文庫に数多くの大物がやってきたのを記念して、 室生犀星の「抒情小曲集」(IPA版pdf)、柳田国男の「遠野物語」(IPA版pdf)およびそれらのソース(室生犀星、柳田国男)をどうぞ。残念ながらIPAフォントには括弧付き数字グリフがないので、「抒情小曲集」が正しく表示されません。是非ヒラギノフォントでタイプセットしてください。
20130103追記。字下げと同じ行に見出しの終了がある場合(例えば、[#7字下げ][#中見出し]※[#始め二重括弧、1-2-54]二※[#終わり二重括弧、1-2-55][#中見出し終わり])(国木田独歩「小春」)、中見出しが消えていました。20130102版のaz2texではこの点が修正されています。ここにアップロードした中では、折口信夫「『古代研究』第一部 民俗学篇第二」の「偶人信仰の民俗化並びに伝説化せる道」がこの問題のため影響を受けていました。また、U+5EA4の文字が、ヒラギノフォントにもIPAフォントにも存在しないことに気づいていませんでした。「『古代研究』第二部 国文学篇」がこの影響を受けていました。以上のpdfとソースを訂正後のものにすげ替えました。
さらに追記。南方熊楠の「十二支考」(IPAex版pdf)とソースについて、ヒラギノフォントでもなおグリフが不足していたため外字を追加しました。お詫びに、岡本綺堂の「支那怪奇小説集」(IPA版pdf)およびソースもどうぞ(「中国怪奇小説集」として知られていますが、ここでは綺堂が付けた本来の題名に戻してあります)。いずれもIPA, IPAexフォントではだいぶグリフが足りませんので、是非ヒラギノフォントを用いてタイプセットしてください。
さらにさらに追記。20130102版のaz2texにかなりの修正をおこない、20130106版とし、リンクを張り直しました。「猫」に出てくる、アクセント分解内の注記の処理が主です。これで「猫」が無修正でpdfにできるようになりました(寒月先生の講演に出てくる数式部分の処理は流石に手動です)。また、UTFコマンドをpdfメタデータとして渡す際エラーが出ないようにしました。Rubyに慣れていないので、力づくでwhileループを回しています。「魔都」に出てくる中見出しの処理が次の課題です。字の大きさの指定を自動的に反映するのは難しいだろうなあ。
今年の2月中には大倉燁子がそろい、室生犀星もだいぶ出てくるので楽しみです。青空文庫の関係者、工作員の皆様には頭が下がりっぱなしです(→大倉燁子の短編集(IPA版pdf)とソース)。
追記4。昨夜NHK教育テレビをつけたらベートーヴェンの番組で、ついつい岩波文庫で愛読したロマン・ロランの「ベートーヴェンの生涯」を再読したくなりました。その過程でアクセント分解の手抜き処理の問題が明らかになり(「l'espoir」なんかが幻想的なコードになる)、第二交響曲を聴きながら最低限のバグをとったのが az2tex 20130107版です。これでも「文献」の処理がうまくいきません。またアクセント付き文字の変換表に出てくる「ダイエレシス付きY」を実装することができませんでした(RubyやTeXでの表現は簡単ですが、本文中に例えば「Vincent d'Indy: 」というのが出てきます。このコロンがyを修飾するものではないことは簡単な方法ではわかりません。ヴァンサン・ダンディの綴りを知っているか、他の部分との関係で、コロンが著者と題名の境界を示す部分であると判断できないと無理です。似たような問題で、英語の e'er o'er などが出ても面倒です)。折角なので、ロマン・ロラン著、片山敏彦訳、「ベートーヴェンの生涯」 (IPA版pdf)およびソースをどうぞ。
追記5。上記、「ベートーヴェンの生涯」の「文献」のアクセント分解が上手く処理できなかったのは、「〔 〕」の中に全角ダッシュ(Windowsシフトジスの815C)があったからでした。青空文庫のアクセント符号付きのラテン・アルファベットに、「複数の文からなる段落の一部に、アクセント分解が使われている場合は、段落全体を「〔 〕」でくくってください。」、「一般の括弧として用いられている「〔 〕」は、次のように、そのまま入力してかまいません。」とあるので、「〔 〕」を見たら全てアクセント分解処理をしてしまっていいのですが。いまのところ安全運転のために、「〔 〕」内が所謂半角英数字のみで構成されている時に限ってアクセント分解を行っています(az2tex 20130109版では全角ダッシュを含めるように幾分制限を緩めました)。
追記6。「縦中横」を実装してみました。20130202版です。残念なことに、これを使って、中谷宇吉郎「雪」を処理してみるとかなり処理を落としますね。手動で手直しし、他の雪関係の随筆と合本にしたのが「雪他」(IPAex版pdf)です。グリフが若干足りないので、是非ヒラギノを使ってタイプセットしなおしてください。ソースはこれです。画像ファイルとして提供されている数式をTeXの数式機能で置き換えてあります。
吉川英治の「宮本武蔵」が出ましたね。ついつい読みふけってしまいます。吉川英治『宮本武蔵』(IPA版pdf)をどうぞ。「序」から「円明の巻」まで8ファイルひとそろいです。「空の巻」にでてくる二重引用符の受け側(CID=7957、U+201D)がIPAフォントにないので、別のグリフにかえるか、ヒラギノでタイプセットしなおすとよいかと。TeXソース(吉川英治『宮本武蔵』(TeX))はここで説明しているスタンドアロン青キンで自動出力したものですが、ソニーリーダーがpdfのサブタイトル・メタデータを表示してくれないので、そこだけわずかにいじってあります。同様に吉川英治『私本太平記』(IPA版pdf)およびTeXソース(吉川英治『私本太平記』(TeX))もどうぞ。やっぱり「婆娑羅帖」以外の全てのファイルで二重引用符の受け側(CID=7957、U+201D)のグリフが足りません。吉川英治『随筆 私本太平記』(IPA版pdf)、吉川英治『随筆 宮本武蔵』(IPA版pdf)および両者のTeXソース(吉川英治『随筆 私本太平記』『随筆 宮本武蔵』(TeX))では、二重引用符に加え、下が長い「吉」(U+20BB7)と丸(U+329E)が足りません。また、ソースのファイル名のtypoのためTeXファイル名がzuihitsu_miyamoto_muasashi.texになっています。
久々に aozoracollection.sty を改訂しました。20130312版です。articleinputコマンドに手を入れ、短編集の中に副題がある場合、扉に表示するようにしました。このテストに作成した短編集です。萩原朔太郎「夢」他(IPA版pdf)とソースをどうぞ。「猫町」の副題<散文詩風な小説>が表示されているのがわかると思います。
az2texも若干修正しました。青空文庫のファイルには、ルビが入っていないものも結構あり、その場合【テキスト中に現れる記号について】が存在しません。この場合の誤動作を解決したものが20130314版です。この修正で、朔太郎の「易者の哲理」や、片山広子の多くの作品が自動処理できるようになりました。
追記7。Gutenbergのジョン・サイレンスものと吉川英治を読むのに忙しく全然手が入っていません。これで鳴門秘帖も明日になると全巻揃うのか…いつ読めばいいんだろう…
2013年4月18付で吉川英治「私本太平記 04 帝獄帖」に小さな修正が入っています。04teigoku_jo.texの2267行から2270行にかけて、
夜に入った。笠置のこぼれも交じっている風ですが、 晩には、検断の大将、\ruby{糟谷宗秋}{かすやむねあき}と高橋刑部左衛門も加わって、べつな協議に更けた。 検断の二将は言った。 「\——{}今暁、からめ捕ッた宮方の残党中には、あきらかに楠木勢の敗残や、彼らは一様に何を問うても頑として口を開きません。……いまなお\Ruby{拷問}{ごうもん}中ですが」を次のように修正します。
夜に入った。 晩には、検断の大将、\ruby{糟谷宗秋}{かすやむねあき}と高橋刑部左衛門も加わって、べつな協議に更けた。 検断の二将は言った。 「\——{}今暁、からめ捕ッた宮方の残党中には、あきらかに楠木勢の敗残や、笠置のこぼれも交じっている風ですが、彼らは一様に何を問うても頑として口を開きません。……いまなお\Ruby{拷問}{ごうもん}中ですが」
中谷宇吉郎がだいぶ出そろったので、科学論色の濃いものと薄いものとに分類して中谷宇吉郎随筆集一(IPAex版pdf)と中谷宇吉郎随筆集二(IPA版pdf)を作りました。例によって「横組」の部分はTeXの機能を直接使って実現してあります。ソースは中谷宇吉郎随筆集一と中谷宇吉郎随筆集二です。これらと「雪他」(IPAex版pdf)で現時点で青空文庫に入っている中谷宇吉郎の作品はコンプです。今まさに読み直されるべき著作群ですね(『「茶碗の湯」のことなど』追加して再アップロードしました)。