とうとう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" >
を追加したら良いかな。疲れた。
さて、しばらくほっておいた計算のうまく行かない部分が見えてきた。
僕の数値計算では温度が低いとうまく計算してくれないらしい。なぜだ?
0 件のコメント:
コメントを投稿