dvipng は,dviファイルを直接PNG画像に変換するツールです. preview-latex の成果物として配布されています.日本語は非対応ですが,高速かつきれいなPNG出力が得られます.LaTeX数式をWeb用に使いたい場合のコンバータとして重宝しそうです(物理のかぎしっぽでも,LaTeX数式のコンバートにdvipngを利用しています).
http://sourceforge.net/projects/dvipng/ からソースを入手してコンパイルすれば良いですが,Vine Linuxなどの場合はapt-getで簡単にインストールすることができます.
Vine Linuxでは,dvipngのパッケージはVinePlus extrasに収められています(以下,Vine Linux 3.2で確認しました).これをapt-getでインストールするには,/etc/apt/sources.listの
rpm [vine] http://updates.vinelinux.org/apt 3.2/$(ARCH) main devel plus updates rpm-src [vine] http://updates.vinelinux.org/apt 3.2/$(ARCH) main devel plus updates
という部分で各行末に "extras" を加えて,
rpm [vine] http://updates.vinelinux.org/apt 3.2/$(ARCH) main devel plus updates extras rpm-src [vine] http://updates.vinelinux.org/apt 3.2/$(ARCH) main devel plus updates extras
とします.その後,
# apt-get update # apt-get install dvipng
でインストール可能です.2005年9月29日の時点で,VinePlus extrasに収められているdvipngのバージョンは1.6です.
ソースからインストールするには,
からリンクをたどり,dvipng-1.6.tar.gzなどを入手します.そしてtarボールからインストールするいつもの方法で
$ tar zxvf dvipng-1.6.tar.gz $ cd dvipng-1.6 $ ./configure $ make # make install
とします.Vine Linux 3.2ではおそらく,./configure時に「ライブラリがない」というエラーがいろいろ出てくると思いますので,そのつどライブラリを取ってきて,インストールします.Cygwinでは上記手順で問題なくインストールできたと思います.
数式のみをPNG画像にする目的で,実際に使ってみましょう.dviファイルが要りますから,
\documentclass[12pt]{jarticle} \usepackage{amsmath,amssymb,bm} \begin{document} \thispagestyle{empty} \[ \nabla \times \bm{V} = \frac{1}{h_1 h_2 h_3} \begin{vmatrix} h_1 e_1 & h_2 e_2 & h_3 e_3 \\ \frac{\partial}{\partial q_{1}} & \frac{\partial}{\partial q_{2}} & \frac{\partial}{\partial q_{3}} \\ h_1 V_1 & h_2 V_2 & h_3 V_3 \end{vmatrix} \] \end{document}
というLaTeXソースを smp.tex(smp.tex)という名前で保存し,コンパイルしておきます. smp.dvi(smp.dvi)というファイルができているはずなので,それをこれから使用します.
$ dvipng smp.dvi
とするとsmp1.pngというPNGファイル
が出力されます.余分な空白がありますね.
"-T tight" オプションを付けて
$ dvipng smp.dvi -T tight
とします.余白がなくなり,良い感じです.
背景色は "-bg" オプションにつづけて color special を付けて,指定します. デフォルトは白 ('rgb 1.0 1.0 1.0') です. TeXソースで \pagecolor 命令により color special を埋め込んだ dvi ファイル(色つきのdvi)には, このオプションは無効化されるので注意が必要です.
$ dvipng smp.dvi -T tight -bg 'rgb 1.0 1.0 0.4'
ここで "'rgb 1.0 1.0 0.4'" という部分が color special です.
"-bd 数字" オプションを使用すると,画像の端をピクセル値で透過にします. デフォルトでは "-bd 0" (つまり透過なし)です. "-bd 10" だと,下のように画像の周囲10ピクセルが透過されます.
$ dvipng smp.dvi -T tight -bg 'rgb 1.0 1.0 0.4' -bd 10
したがって, "-bd 1000" くらいにしておけば, だいたいどんな場合でも背景は全部透過されるでしょう.
$ dvipng smp.dvi -T tight -bg 'rgb 1.0 1.0 0.4' -bd 1000
このとき,透過部分と文字との境目は背景色に合わせてアンチエイリアシングされます. ここのページの背景色と合わせると
$ dvipng smp.dvi -T tight -bg 'rgb 1.0 1.0 0.8' -bd 1000
という感じです.できあがるのは8ビットPNGなので,IEでも大丈夫です.
前景色は "-fg" オプションにつづけて color special を付けて,指定します. デフォルトは黒 ('rgb 0.0 0.0 0.0') です. 背景色同様,color special を埋め込んだ dvi ファイルには無効です.
$ dvipng smp.dvi -T tight -fg 'rgb 1.0 0.0 0.0'
"-Q 数字" オプションで,アンチエイリアスのレベルを指定できます. この指定を有効にするためには,"--freetype0" オプション も同時に付けなければなりません. デフォルトでは "-Q 4" です.
$ dvipng smp.dvi -T tight --freetype0 -Q 1
この例ではアンチエイリアスを無効にしています.以下,いくつか試してみたもの.
2
$ dvipng smp.dvi -T tight --freetype0 -Q 2
3
$ dvipng smp.dvi -T tight --freetype0 -Q 3
4
$ dvipng smp.dvi -T tight --freetype0 -Q 4
5
$ dvipng smp.dvi -T tight --freetype0 -Q 5
6
$ dvipng smp.dvi -T tight --freetype0 -Q 6
7
$ dvipng smp.dvi -T tight --freetype0 -Q 7
8
$ dvipng smp.dvi -T tight --freetype0 -Q 8
9
$ dvipng smp.dvi -T tight --freetype0 -Q 9
10
$ dvipng smp.dvi -T tight --freetype0 -Q 10
20
$ dvipng smp.dvi -T tight --freetype0 -Q 20
アンチエイリアスレベルを上げれば良い,というものでもないようです. 一番読みやすいのは "-Q 5" あたりでしょうか.
"--gamma 数値" オプションで,出力画像にガンマ補正をかけることができます. デフォルトは 1.0 です.数字が1より小さい場合, フォントは明るく(背景色に近い色に)なります. 数字が1より大きい場合,暗く(前景色が強く)なります. 以下に出力例を並べます.
0.5
$ dvipng smp.dvi -T tight --gamma 0.5
0.7
$ dvipng smp.dvi -T tight --gamma 0.7
0.9
$ dvipng smp.dvi -T tight --gamma 0.9
1.1
$ dvipng smp.dvi -T tight --gamma 1.1
1.3
$ dvipng smp.dvi -T tight --gamma 1.3
1.5
$ dvipng smp.dvi -T tight --gamma 1.5
ガンマ補正が1より小さければスムーズな印象, 1より大きければくっきりした印象が強くなります. ディスプレイなどの環境にも依りますが, "--gamma 1.1" くらいが良い感じでしょうか.
前景色黒,背景色白,アンチエイリアスレベル5,ガンマ補正1.1
$ dvipng smp.dvi -T tight -bd 1000 --freetype0 -Q 5 --gamma 1.1
前景色黒,背景色#ffc,透過,アンチエイリアスレベル5,ガンマ補正1.1
$ dvipng smp.dvi -T tight -bg 'rgb 1.0 1.0 0.8' -bd 1000 --freetype0 -Q 5 --gamma 1.1
前景色赤,背景色#ffc,透過,アンチエイリアスレベル5,ガンマ補正1.1
$ dvipng smp.dvi -T tight -fg 'rgb 1.0 0.0 0.0' -bg 'rgb 1.0 1.0 0.8' -bd 1000 --freetype0 -Q 5 --gamma 1.1
Usage: ./dvipng [OPTION]... FILENAME[.dvi]
dvipsと似たオプション
-d # Debug (# is the debug bitmap, 1 if not given) -D # Output resolution -l # Last page to be output --mode s MetaFont mode (default ’cx’) -M* Don’t make PK fonts -o f Output file, ’%d’ is pagenumber -O c Image offset -p # First page to be output -pp #,#.. Page list to be output -q* Quiet operation -r* Reverse order of pages -T c Image size (also accepts ’-T bbox’ and ’-T tight’) -v* Verbose operation -x # Override dvi magnification - Interactive query of options
dvipsにはないオプション
-bd # Transparent border width in dots -bd s Transparent border fallback color (TeX-style color) --bdpi # Set the base (Metafont) resolution -bg s Background color (TeX-style color) --depth* Output the image depth on stdout --dvinum* Use TeX page numbers in output filenames -fg s Foreground color (TeX-style color) --follow* Follow mode --freetype* FreeType font rendering (default on) --gamma # Control color interpolation --gif Output GIF images (dvigif default) --height* Output the image height on stdout --noghostscript* Don’t use ghostscript for PostScript specials --nogssa fer* Don’t use -dSAFER in ghostscript calls --picky When a warning occurs, don’t output image --png Output PNG images (dvipng default) --strict When a warning occurs, exit --t1lib* T1lib font rendering (default on) --truecolor* Truecolor output -Q # Quality (T1lib and PK subsampling) -z # PNG compression level
# = number f = file s = string * = suffix, ’0’ to turn off
c = comma-separated dimension pair (e.g., 3.2in,-32.1cm)