はじめに
プレゼンテーションで数式を使いたいときに,どのツールを利用するか,というのは(発表の中身を無視すれば)大事な要素の一つです。
殆どすべてのスライドに数式が登場し,$\LaTeX$そのものに慣れている人であれば,$\LaTeX$でスライド形式のpdfを作成できるパッケージbeamerなどを使ってスライドを作成するほうが,おそらく一番いいと思います。
逆に,前スライド中に一つや二つ程度しかスライドが出てこないのであれば,PowerPointやKeynoteなど,自分の使いやすいツールでスライドを作成し,数式の部分は付属の数式エディタを用いるか,その書体が気に入らない場合には数式を画像に変換したものを貼り付けるといった方法があるかと思います。
今回は,この$\LaTeX$記法で書いた数式を画像に変換する簡単な方法を紹介したいと思います。
また,この記事の中で本人はvimとその関連ツールを使っていますが,あまり自動化にこだわらないのであれば,別に手動でも簡単に編集と変換が行えます。
お世話になるツールはこちら
また,これらを合わせて利用するためのシェルスクリプトを使います。
dvipng
まず,dvipngですが,これはその名称から明らかなようにtexファイルをコンパイルしたあとに生成されるdviファイルから,png形式(実はgifもいける)の画像を生成するスクリプトです。
TeXLiveでTeXをインストールしてきた場合,デフォルトで入っている場合が多いかと思います。
fig_test.tex
ファイルに対してこのスクリプトを
platex fig_test.tex
dvipng -T tight -bd 1000 fig_test.dvi
のように実行すると,fig_test.tex
が
\documentclass[43pt]{jsarticle}\usepackage{amsmath}\usepackage{amssymb}\usepackage{amsthm}\usepackage{ascmac}\pagestyle{empty}% "\vector{a}" でベクトル\def\vector#1{\mbox{\boldmath\(#1\)}}\begin{document}\begin{align*}
f(x) &= \int^{\infty}_{-\infty}\mathrm{d}x \frac{\sin x}{x}\\&= \pi\end{align*}\newpage$\vector{x} =(x_{1}, x_{2})$\newpage$\mathcal{C}$\end{document}
のようであったとき,各ページごとに数式を画像に変換したものが作成されます(fig_test1.png
, fig_test2.png
, fig_test3.png
のように番号付けされる)。
このときオプション-T tight
によって空白部分が切り抜かれ,-bd 1000
によって背景に透過処理が施された数式画像が生成されます。
シェルスクリプト'texmath'
さて,このdvipngだけでもかなり簡単に画像作成ができることが分かるかと思いますが,さらにこれを便利に使用するために,新しく画像群を作成するときに使うためのシェルスクリプトを書いてみました。
#!/bin/sh# written by Shotaro Fujimoto (https://github.com/ssh0)# first edited: 2015-11-03# using latexmk rc filelatexmkrc="$HOME/.latexmkrc_dvipng"# texmath templatetexmath_template="$HOME/.vim/template/template.texmath"# default outputdir is setted to $imgdirimgdir='img'if["$1"="-e"];thenecho"$1"if[ -f "$2"];thentexfile="$2"echo"${texfile} already exists."elsetexfile="fig_2"
cat "$texmath_template"> "$texfile"fi
vim "$texfile"elif[ ! -f "$1"];thenecho"$1 doesn't exist."exit 1
elif[ -f "$1"];thentexfile="$1"
latexmk -r "$latexmkrc""${texfile}"\&& latexmk -c "${texfile}"\&& dvipng -T tight -bd 1000"${texfile%.tex}.dvi"\&& rm *.fls
fi
オプションや引数の扱いがぞんざいなのは基本的に自動化する過程で使用することを視野に入れており,コマンドラインから実行することをあまり考えていなかったので,このような形になりました。
latexmk
上のシェルスクリプトに関連して~/.latexmkrc_dvipng
には以下のように書いておきます。
#!/usr/bin/perl$latex='platex -interaction=nonstopmode -kanji=utf-8 %O %S';$pdf_mode=0;
$pdf_mode = 0
とすることによって,自動でpdf化する機能を無効にすることができます。
詳しくはlatexmkのマニュアルを参照してください。
LaTeXのテンプレート
template.texmath
には以下のように書くことによって,数式を書くのに便利なプリアンブルを入れた状態で編集を始めることができるようになります。
\documentclass[43pt]{jsarticle}\usepackage{amsmath}\usepackage{amssymb}\usepackage{amsthm}\usepackage{ascmac}\pagestyle{empty}% "\vector{a}" でベクトル\def\vector#1{\mbox{\boldmath\(#1\)}}\begin{document}\end{document}
コマンドラインからの使い方は簡単で,
texmath fig_test.tex
とすると,latexmkを使ってコンパイルを行った後に,中間ファイルを削除して,dviファイルからdvipngでpngファイルを作成します。
flsファイルだけ何故かうまく消せなかったので,これは手動で消しています。
Vimを使ってファイルを保存するたびに画像を生成するようにする
これをvimから使用する方法ですが,vim-quickrunをつかうと,任意のタイミングで任意のコマンドを実行することができるので,
今回はファイルの保存時にファイル名がfig*.tex
である場合に,texmathをそのファイルに対して実行することにします。
これを実現するには,~/.vim/ftplugin/tex_quickrun.vim
に,以下のように書きます。
" LaTeX Quickrun (texmath)letg:quickrun_config['texmath'] = {
\ 'runner' : 'vimproc',
\ 'command' : 'texmath',
\ 'outputter' : 'error',
\ 'outputter/error/success' : 'null',
\ 'outputter/error/error' : 'quickfix',
\ 'srcfile' : expand("%s"),
\ 'exec': '%c %s',
\}
augroup latex_autocompile
autocmd!ifg:quickrun_user_tex_autorun !=0autocmdBufWritePost,FileWritePost *.tex :QuickRun
autocmdBufWritePost,FileWritePost fig*.tex :QuickRun -type texmath
endif
augroup END
実は他にいろいろ書いていたりするのですが,今回関係するのはこの部分だけです。
非同期処理のためにvimprocを使用しています。
先ほどのシェルスクリプトtexmathにファイル名を引数として渡して実行する形になっています。
まとめ
たくさん数式の画像がほしい時に,便利に使うことができると思います。
MacだとLaTeXiTなるものがあるらしく,そんなのがほしいなぁと考えてこのようなことになりました。
何かの参考になれば幸いです。