数式を含むTeX文書からPukiWikiにローカルで変換する方法.
サーバー上でTeXが使えるならば,
などが使えるが,TeXがない+自分で管理しているサーバでない場合用に,
ローカル上で作成したTeX文書を変換して数式画像とPukiWikiフォーマットに変更された文書を生成する方法を記述する.
全体の流れ†
- TeXで文書を生成(例えば,test.tex)し,それがTeXを通ることを確かめておく.
- rx_tex2wikiで数式用TeXとPukiWiki用テキストを抽出する(test.eq.texとtest.wiki.txt).
- test.eq.texをTeXに通して,dviファイル生成.
- dvipngでdviファイルをgif画像に変換する.
- PukiWikiで新規ページを作って,test.wiki.txtの内容をコピー,
4で生成した画像ファイルを添付する.
2,4については以下参照.
数式用TeXとPukiWiki用テキストの抽出†
TeXの数式はインライン要素(文章中で"$"に囲まれた部分)とブロック要素の2種類がある.
ブロック要素は例えば,
\begin{equation}
〜
\end{equation}
のように囲まれた領域である.
手動でやる場合は,これらの数式環境を抽出して,下で紹介する方法で画像化,当該部分を
#ref(equation.gif,,100%)
のように変更すればよい.
ただ,長いTeXだととても面倒なので,ある程度自動化するプログラム(rx_tex2wiki)を実装した.
rx_tex2wikiのダウンロードは以下.
- 変更履歴
- v1.07 : quote環境を引用">"で置き換える機能追加,同じインライン数式が同じ行にあったときのバグ修正
- v1.05 : verbatim環境に対応,改行記号を変換するように変更,複数ファイルのD&Dに対応
- v1.03 : "\["の後にスペースなどがあっても認識するように変更
- v1.02 : パラメータ指定を追加・変更
- v1.0 : とりあえずひととおりの機能を作ったバージョン
- rx_tex2wikiの使い方
ダウンロードしたzipファイルを解凍すると,rx_tex2wiki.exeというファイルのみが入っている.
これに*.texファイルをD&Dするだけ.
D&D後,*.texファイルと同じフォルダに,*.wiki.txtと*.eq.texが作成される.
それぞれ,
- *.wiki.txt : いくつかのTeXの命令をPukiWikiのフォーマットに変更したもの.基本的にはdocument環境内のみを対象としている.数式の画像名は連番が自動的につけられ,その順番は*.eq.texでの記述順と対応している.
- *.eq.tex : 数式のみ取り出した数式画像生成用TeXファイル.下記の方法で画像化すれば,*.wiki.txt内のrefに指定された画像名と対応するものを生成できる.ただし,dviファイルは手動で生成する必要あり.
- 変換表 : 対応する命令
TeX命令名・環境名 | TeXの例 | 対応するPukiWikiフォーマット | 備考 |
数式環境(インライン) | $数式$ | &ref(*.eq*.gif,パラメータ,スケール,タイトル); | このPukiWikiの設定だと解像度150で70%ぐらいがちょうどいい. 画像タイプとスケールの設定は下参照 |
数式環境(ブロック) | \[ 数式 \] | #ref(*.eq*.gif,パラメータ,スケール,タイトル) | |
equation環境 | \begin{equation} 数式 \end{equation} | #ref(*.eq*.gif,パラメータ,スケール,タイトル) | 数式番号なし版(equation*)でも可 |
section環境 | \section{セクション名} | *セクション名 | |
subsection環境 | \subsection{セクション名} | **セクション名 | |
subsubsection環境 | \subsubsection{セクション名} | ***セクション名 | |
paragraph環境 | \paragraph{セクション名} | -セクション名 | |
enumerate環境 | \begin{enumerate} \item〜 \end{enumerate} | +〜 | 各\itemが連番になる |
itemize環境 | \begin{itemize} \item〜 \end{itemize} | -〜 | 各\itemが箇条書きになる |
figure環境 | \begin{figure} \includegraphics[〜]{画像ファイル名}&br \caption{キャプション} \end{figure} | | &ref(*.eq*.gif,,100%); | |CENTER:キャプション| | tabular環境などを使って画像を複数指定していても最後の1つのみ対応 キャプション無しの場合は単純に#ref(*.eq*.gif,,100%) |
verbatim環境 | \begin{verbatim} 〜 \end{verbatim} | #code(C){{〜}} | 私がverbatim環境を基本的にCのコードを載せるために使っているので,C,C++用のpukiwiki環境で囲むようにしている |
数式の重複チェックはしているので,同じ数式画像が出力されることはないはず.ただし,厳密に同じである必要がある(例えば,x^nとx^{n},xyとx yなどは違うものとして認識する).
- 設定
元のTeXファイルのプリアンブルに"%%TEX2WIKI"で始まる行を書くことで,変換のプロパティを設定できる.
設定できる項目は以下.
- 画像のスケール(パーセント,ピクセル数)
%%TEX2WIKI_EQUATION_SCALE=70%
%%TEX2WIKI_EQUATION_SCALE=100x100
- 画像のタイプ(拡張子で指定)
%%TEX2WIKI_EQUATION_TYPE=gif
- 参照パラメータ(nolink,around,centerなど)
%%TEX2WIKI_EQUATION_PARAMETER=nolink,zoom
- 画像のタイトル
%%TEX2WIKI_EQUATION_TITLE=title
パラメータを指定しなかった場合は,#ref(*.eq*.gif,,70%) となる.
dvipngを使った数式の画像化†
dvipngを使うことで,dviファイルから画像を生成する.複数ページのdviファイルはそれぞれのページごとに画像化され,連番付のファイルとして保存される.上記の*.eq.texでは1つのページに1つの数式のみとなるようにしてあるので,これをTeXに通して,dviを生成,*.eq.dviをdvipngに通すことで,PNGかGIFファイルを生成できる.数式にフルカラーは必要ないので,ここではGIFを生成する.GIFを生成するためのコマンドは以下.
dvipng %1 -T tight -D 150 -bd 1000 --freetype1 -Q 5 --gamma 1.1 --gif
%1にdviファイル名を指定する.各オプションの意味は,コマンドラインで単純に
dvipng
とすれば出てくる.上記のコマンドではできる限り空白を削除,解像度150,背景色白,FreeTypeフォント使用,アンチエリアシング精度5,ガンマ補正1.1,GIF出力を設定している.
複数ファイルのD&Dに対応したバッチファイルを以下に置く.