研究で必要な雑多な知識をごった煮で
プロフィール

termoshtt

Author:termoshtt
大学院生
専攻:流体物理学
Editor: vim
Language: C++,python

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--/--/-- --:-- スポンサー広告 TB(-) CM(-)
今回はMPlibについて。

LuaTeXの機能としてあげられている、MetaPostのサポート。
実際にはMPlibというMetaPostを外部ライブラリ化して、
Luaインターフェイスを追加したライブラリを通して行うらしい。

MetaPostとはTeXでよく使われるコマンド型の描画ツールです。
(奥村本、付録Fより)
METAFONTでグラフとかを書いてepsにできるようにしたものらしい。
多分有名な物なので、詳細は略。

LaTeXで使える描画ツールとしては
TeXWikiで紹介されているようにたくさんあるわけだが、
LuaTeXではMetaPostをそのまま使える様にすることを選んだ。

MPlibの開発に関していくつか資料を見つけた。
MPlib: MetaPost as a reusable component
MetaPost developments: MPlib project report
ようは現代的に、外部ライブラリ化してLuaからよびたかったらしい。
apiのリファレンスはこちら

と前置きはこんな感じ。使ってみる。
texliveでluatexが入っている環境ではluamplibは既にインストール済みだったので、
特にインストール作業はなし。

\documentclass{article}
\usepackage{luamplib}
\begin{document}
\begin{mplibcode}
prologues := 1;
beginfig(1);
draw (0,0)--(100,0)--(100,100)--(0,100)--cycle;
label("some text",(50,50));
endfig;
\end{mplibcode}
\end{document}

パッケージluamplibを使う様に指定して、
MetaPostのコードをmplibcode環境で囲めばいい。
この例では四角形のなかに"some text"と表示される。
そのままだと日本語は通らない。

Luaから使う場合。How to use mplib directly from lua?から拝借。

\documentclass{article}
\usepackage{luamplib}
\begin{document}
\directlua{dofile('test.lua')}
\directlua{ StartMP() }
\end{document}


local mpkpse = kpse.new("luatex", "mpost")

local function finder(name, mode, ftype)
if mode == "w" then
return name
else
return mpkpse:find_file(name,ftype)
end
end

function StartMP()
local mplib = require('mplib')
local mpx=mplib.new({find_file=finder,ini_version=true})
local result = mpx:execute('input plain;')
result=mpx:execute('beginfig(1); draw fullcircle scaled 20 withcolor red; endfig;')
local t,e,l = result.term,result.error,result.log
if result.status>0 then
tex.print([[Result of mplib execute is unsuccessfull.]])
else
if result.fig then
tex.sprint('Converted something: \\vrule\\vbox{\\hrule')
local converted=luamplib.convert(result)
tex.sprint('\\hrule}\\vrule')
else
tex.print([[No figure output.]])
tex.print([[Log:]])
tex.print(l)
end
end
mpx:finish()
end

急に長くなったが、基本的には
require('mplib")で読み込み、
mpx = mplib.new(...)でMetaPostのインタプリタを用意し、
result = mpx:execute('...')でMetaPostを図に変換している。
あとはエラー処理のコードと、
mplib.newの引数に渡すfind_file関数を用意している。
この関数がないと動かない。
これはapiリファレンスにデフォルトでローカルのファイルしか探さないから
と書いてあるが、だからなぜ使えないかわからなかった(苦)。

kpseとはLuaTeXのパッケージの一つで、
公式のリファレンスにのっているのでそちらを参考に。


普通に使う分にはmplibcode環境で大体事足りそうなので、
とりあえず使えるようになったことにして、まとめた事にする。
日本語の対応の関連は日本語対応版のjmpostあたりの話をそのうち探ってみることにする。

2012/01/03 01:00 TeX TB(0) CM(0)
検索フォーム
ブロとも申請フォーム
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。