Top/article/LaTeX-eqs-to-PNG-and-SVG
English | Japanese
English | Japanese

Menu

  • Top
  • Akihiko Yamaguchi 山口 明彦
  • Project プロジェクト
  • Text テキスト
  • Recent articles 最近の記事
  • Articles 記事一覧 (a to z)
  • Search 検索

Tags タグ †

  • [c++][bash][python][latex][php]
  • [linux][windows][mac][android]
  • [math][algorithm][idea][trick]
  • [liboctave][opencv][git][ros]
  • [setting][bug][general]
↑

Recent articles 最近の記事 †

2019-07-02
  • article/Display-Unix-Time
  • article/Synchronize-Linux-Time-to-Remote
2018-09-27
  • article/python-multimode-singleton
2018-09-02
  • article/rosinstall-git-default-remote
2017-07-28
  • article/SubMenu
2017-03-05
  • article/Import-a-different-version-of-OpenCV-in-Python
2015-08-17
  • article/DRC-finals-2015
2015-01-05
  • article/Upgrade-Android-to-Lollipop
2015-01-01
  • article/Kernel-panic-of-Linux-when-using-Xtion
  • article/Do-not-skip-freeing-data-when-using-tri-mesh-in-ODE
Access: 1/4220 - Admin
These search terms have been highlighted:[linux]

Convert LaTeX equations to PNG and SVG

LaTeX の数式を PNG と SVG に変換する

[latex][trick][linux]
2008-09-24

似たような話題は検索すればいくらでも見つかる.が,イマイチなのが多い(ような気がする).ここでは日本語とかも出力できる方法を解説する.かなり力技なので環境依存性が強いかも.

環境:

  • linux (debian - lenny)

用意するツール(コマンド):

  • platex (tex を dvi に変換できればなんでもOK)
  • dvipdfmx
  • gs (ghostscript)
  • pstoedit
  • sed
  • convert (imagemagick)

step 1. PDF をフォント埋め込みで生成できるようにする †

とりあえず, platex などで, hoge.dvi が生成できているとする.この dvi から pdf を「フォント埋め込み」で生成する.(普通にできる人はこのステップを飛ばして下さい)

ポイントは,フォントマップファイル: pdffonts.map を用意すること.例えば,

pdffonts.map*1 :

 rml    H   KozMinProVI-Regular.otf
 rmlv   V   KozMinProVI-Regular.otf
 gbm    H   KozGoProVI-Medium.otf
 gbmv   V   KozGoProVI-Medium.otf

のような感じ.ただし KozMinProVI-Regular.otf とかを持っていることが前提. パスが通っていないフォルダにこれらのファイルがある場合は, dvipdfmx を実行するフォルダにこれらのリンクを作成しておく必要があるようだ.

ほかのケースについては, dvipdfmxで日本語フォントを埋め込んだpdfをつくる方法 を参照.

次に,

 dvipdfmx -f pdffonts.map -o hoge.pdf hoge.dvi

のようにして pdf を生成する. acroread とかで確認すると,フォントが埋め込まれていることが確認される.

↑

step 2. SVG を生成する †

gs を使って pdf をいったん eps に変換し,それから pstoedit で svg に変換するという流れ.

 gs -q -r20480 -sDEVICE=epswrite -sOutputFile=hoge.eps \
   -dNOPAUSE -dBATCH -dSAFER -dEPSCrop -dEPSFitPage -dUseCropBox \
   hoge.pdf

このようなコマンドを実行すると hoge.eps が生成される(オプションの意味はちゃんと理解してません).次に,

 pstoedit -f plot-svg -dt -ssp -sclip hoge.eps | \
   sed 's/<rect[^<>]\+id=\"background\"[^<>]*>//g' > hoge.svg

のようにして, hoge.svg に変換する.ここで sed を通しているのは, pstoedit の出力のままだと白い背景が残ってしまって邪魔だからだ.

FIXME:

  • ページサイズをぴったりにできない
  • 日本語の句読点(,.)が出力されない
↑

step 3. PNG を生成する †

gs で直接 pdf から png を生成し, convert でトリミングする.

 gs -q -sDEVICE=pngalpha -sOutputFile=hoge.png -r150 \
   -dNOPAUSE -dBATCH -dSAFER -dEPSCrop -dGraphicsAlphaBits=4
   -dTextAlphaBits=4 -dMaxBitmap=50000000 hoge.pdf

これでとりあえず png が生成できる.解像度は -r150 で指定(大きい程画像がでかい).背景は透過. -dGraphicsAlphaBits=4 -dTextAlphaBits=4 -dMaxBitmap=50000000 は,アンチエイリアス (antialiasing) のためのオプション.かなりきれいになる. 最後に,

 convert -trim +repage hoge.png hoge.png

のようにしてトリミングすれば終り.

20080925035641.png

これは解像度 -r80 で作ったPNG.ブログに貼るために小さくしたが,実際はもう少し大きい方がいいかも.

↑

まとめ †

すべての作業を bash スクリプトでまとめておく(改良版).

#!/bin/bash -x
ifile=latex-eq  # 入力ファイル (${ifile}.tex)
fontsmap=pdffonts.map  # フォントマップ
pngres=150  # PNG の解像度

error=1
if platex -halt-on-error ${ifile}.tex; then
  if platex -halt-on-error ${ifile}.tex; then
    if dvipdfmx -f ${fontsmap} -o ${ifile}.pdf ${ifile}.dvi; then
      error=0
    fi
  fi
fi

gs -q -r20480 -sDEVICE=epswrite -sOutputFile=${ifile}.eps -dNOPAUSE -dBATCH -dSAFER -dEPSCrop -dEPSFitPage -dUseCropBox ${ifile}.pdf

pstoedit -f plot-svg -dt -ssp -sclip ${ifile}.eps | \
  sed 's/<rect[^<>]\+id=\"background\"[^<>]*>//g' > ${ifile}.svg

gs -q -sDEVICE=pngalpha -sOutputFile=${ifile}.png -r${pngres} -dNOPAUSE -dBATCH -dSAFER -dEPSCrop -dGraphicsAlphaBits=4 -dTextAlphaBits=4 -dMaxBitmap=50000000 ${ifile}.pdf
convert -trim +repage ${ifile}.png ${ifile}.png

*1 gbm,gbmvが間違っていたので修正した@Nov.12,2008.



Last-modified:2014-12-30 (Tue) 19:21:22 (3806d)
Link: article/Copy-paste-vector-figures-drawn-with-Inkscape-to-Power-Point(3805d) article/Seven-tools-for-writing-papers(3805d) article/Script-to-convert-LaTeX-eqs-to-PNG-and-SVG(3806d)
Site admin: Akihiko Yamaguchi.
Written by: Akihiko Yamaguchi.
System: PukiWiki 1.5.0. PHP 5.2.17. HTML conversion time: 0.013 sec.