SSブログ

LaTeXからHTMLとMathJaxへ [LaTeX関連]

僕は仕事でもプライベートでも、ある程度のサイズになるひとまとまりのメモはLeTeXで書いている。特にこのブログの記事では、ただベタにHTMLを書くのでない限りはまずLaTeXで下書きを書いて、それをHTMLに変換してブログに貼っている。

なんでわざわざLaTeXなのか、というとなるべく紙に依存しないようにしたいのと、最近僕にはいろいろ問題があって、手で紙に文字を書くということが難しくなっているせいである。問題の詳細はいずれまた書くことになると思うんだけど、要するに紙と鉛筆の単なる代わりのLaTeXである(補助的にIllustratorを使う)。

まあ、それはいい。LaTeXの下書きをHTMLに変換するのにこれまではtthというすごくシンプルなものを使っていた。tthの出力する表やリストなどは体裁をあまり気にしなければ問題ないけど、数式はどうしようもなくへろへろなので、式のところだけLaTeXのpdf出力をpngに変換して貼りこんでいた。ところが先日MathJaxというのを知って使おうと思った。これでHTMLでの数式は格段に美しくなる。

ところが、地の文のHTMLへの変換に困ってきた。tthではいちいちtthが出力した式の部分を手動でLaTeXの数式環境に戻さないといけない。これは非常に煩わしい。式の部分はMathJaxで、ほかの表や図は適当にHTMLに変換してくれるのがあると嬉しい.....

ということでいろいろ探した。tex4htというのと、LaTeXMLというのを試したんだけど、なかなかうまくいかない。どちらもインストールしてちゃんと動かすまでの敷居もいいかげん高かったけど、それぞれ専用のスタイルを必要として(少なくともどちらもdocumentclassがjarticleのA4では通らないし、amsパッケージを使うとおかしかったりする)、tthのように適当にやってくれない。少なくとも僕の場合HTML に変換されるまで、細かい部分の修正がいっぱい必要になってしまった。

適当なサイズに分割したHTMLファイルと、全部をまとめた文書としてのpdfファイルを作るのに、それぞれ別のソースを用意しないといけない。書き換える部分をまとめたヘッダを作ってそれを切り替えればいいだろ、という人はいるだろうけど、それもめんどくさい(僕は年寄りなので本質的でないところに手間をかけるのには苦痛を感じる)。それに、amsなしにLaTeXを書くなんて僕にはありえないし。

どちらのツールも最終的にHTMLだけが必要で、pdfにできる必要はない、という人にはぜんぜん問題ないだろうけど、たとえ紙に印刷しないとしても、pdfのページの体裁は、概観のためには便利であると僕には思える(単に僕が紙依存世代だというだけかもしれないけど)。

しかし僕から見ればそもそもtex4htもLaTeXMLも頭固いんだよ。自己完結的な美しさを求めるのはTeXの周辺にありがちだけど、一貫性を重視するあまり何もかも「これに合わせろ」ということになってしまってるような気がする(tex4htとLaTeXMLのどっちだったか忘れたけど、中間ファイルをいくつも作るクセに、自分のやり方でdviファイルが作れない限り、頑としてHTMLファイルを一文字も出力しない)。だいたいがして何のためのツールなんだよ。しょせん変換先がHTMLなんだから適当でいいじゃん。僕みたいにブログの記事に貼るような場合は、どうせそのあと微調整が必要になるんだからさあ。

というのはあまりに日本人的な考え方かなあ。でも改めて考えれば、それでは僕の普段の姿勢を否定することになるよな(「論理的一貫性は思考のツールだよ」「抽象化はシンプルにするためにある」「『よきにはからえ』ってのは論理性の否定だぞ」云々々々)。

ということで、自分でlexとyaccで自分専用変換ツールを作ろうと思った。だって一番めんどくさい数式はLaTeXをそのまま出力すればいいだけじゃん、と思ってyaccのソースをえいやっと書き始めて、表を変換するところであっさり頓挫した。これってめちゃめんどくさいわ。変換先のHTMLの方は表現が全部入れ子になっていて構造は簡単で、LaTeXの解析の方がずっと難しい。

HTMLなら今見てるtokenだけで判断できて必要なところだけ置き換えればいいんだけど、LaTeXではメタなtokenが「バックスラッシュ」で始まってそれが入れ子になるのに、「バックスラッシュ」をエスケープにも使っているので、バックスラッシュ付きのtokenをすべて網羅しておかないといけない。ようするに自分の使いたいところだけえいやっと書けるようなものではなくて、BNFよりももっと図式的な書き方で、ちゃんと全体を書き下してからyaccを書かないとわけわからなくなる(頭が良くてたくさんをいっぺんに把握できる人ならBNFを書き下せるだろうけど、僕には無理)。逆ならずっとマシだったのに。

もちろん真面目にひとつずつ網羅すればいいだけなんだけど、だいたい解析の区切り文字を「バックスラッシュ」ではなくて特殊文字のエスケープと別にしてあれば手間は半分ぐらいになったのに(Knuth先生恨みます)。たとえば「@」とか「#」や「`」や「~」みたいなのほうがずっと簡単だったなあ。「@」や「#」なんて本文にまず使うことはないし。もう今更だけど。

ということで、どなたかいいツールをご存知ありませんか? lexとyaccのスケルトン(LaTeXの解析部分があってアクションが空っぽのとか)でもないかなあ。そんな都合のいいものなんて誰も作らないか。
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

macOS10.12 "Sierra"冤罪 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。