401びぼーろく; plastex その3

(※結構うろ覚えの内容なのでそのうち書き直します⇒mathjaxが再度使えるようになったので戻しました。)

とうとう400を越した。
さて、plastexを使っていたけど、最近mathjaxが対応してくれていたところが見当たらなくなってしまった。
そこで既に用意されているdvisvgmを使って数式画像をsvgで表示してくれるように対応した。
使用したのはdebian(buster)のplastex。

debian公式パッケージだと数式が2つ以上の場合svgに変換してくれない。なぜだか一番目の数式だけsvgに変換されて他のは変換されない。どうやらdvisvgの仕様が変わったため(?)みたい。
ということでdebian(buster)でインストールしたpython-plastexの設定ファイルをいじって対応。

まずは

vi /usr/lib/python2.7/dist-packages/plasTeX/Imagers/dvisvgm.py


で以下の部分をコメントアウト(先頭に#をつける)する。


            try: os.rename(glob.glob(filename+'-*')[0], filename)
            except IndexError: break

どうやらその上の文章を読むとdvisvgmはページ番号を割り振るから取り除くと書いてある。このあたりが変わったのかな?
これで全ての数式をsvgに変換してくれるようになった。

しかしこのままコンパイルすると数式が表示されない。なぜだかheight,widthが0となっている。これもよくわからないが、とりあえず設定をいじって対応。


vi /usr/lib/python2.7/dist-packages/plasTeX/Imagers/__init__.py


結局うまい設定が分からなかったので #Crop an SVG image 以下の次のパラメータをNoneに設定。


              self.width = None
              self.height = None
              self.depth = None

さらに


                    img = PILImage.open(name)
                    width, height = img.size
                    scale = self.config['images']['scale-factor']
                    if scale != 1:
                        width = int(width * scale)
                        height = int(height * scale)
                        img.resize((width,height))
                        img.save(path)
                    else:



                    if os.path.splitext(name)[1].lower() == '.svg':
                        shutil.copyfile(name, path)
                        width = height = None
                    else:
                        img = PILImage.open(name)
                        width, height = img.size
                        scale = self.config['images']['scale-factor']
                        if scale != 1:
                            width = int(width * scale)
                            height = int(height * scale)
                            img.resize((width,height))
                            img.save(path)
                        else:
                            shutil.copyfile(name, path)

と変更。これはここの変更を手で反映させたもの
こうすると、styleタグが変なことになるが、とりあえず表示されるので良しとする。
行儀の良いブラウザなら大丈夫(かなぁ)。

さて、このまま放置すると数式部分(画像)がbaseline揃えになるのでplastexで生成されたcss ファイルの下記の内容を以下のように


img {                                                             
        border: none;        
        vertical-align: baseline;
}

から

img {                                                             
        border: none;        
        vertical-align: middle;
}

と書き直す。このあたりはsedとかで変更しても良いかも。
後はそれぞれのhtmlファイルに



 <meta name="viewport" content="width=device-width" >


を追加したら良いかな。疲れた。

さて、しばらくほっておいた計算のうまく行かない部分が見えてきた。
僕の数値計算では温度が低いとうまく計算してくれないらしい。なぜだ?

コメント

このブログの人気の投稿

471びぼーろく; ffmpegの音・映像ずれ修正

329びぼーろく; latexでヤング図を書く

531びぼーろく; python上でのヤコビ楕円関数