見出し画像

奥義かどうかは判らないけれど

#TeX 特に#LuaTeX 更に本当は?#LuaLaTeX で #MetaPost を自在にお気楽極楽に扱う手法を少し書いてみよう。

 この文書の扉絵は #LuaLaTeX#luamplib というパッケージを用いて直接 #TeX の原稿(ソース)に #MetaPost のコードを書いて #TypeOut (所謂TeX文書の実体化)を施したものの一部です。見る人が見れば,これは易占の説明だとか何故 #MetaPost なのに手書き風な絵なのだろうとか様々思うのでしょうけど。

 先ずは #TeX そして特に #LuaTeX が実行できる環境にあることを前提にします。(詳しい事はググって調べましょう。)

 例えば扉絵の文書の場合,#TeX の書式は,次のようになっています。

%!TEX TS-program = lualatex
¥documentclass[report,a4paper]{ltjsbook}%
...<preamble>
¥usepackage{luamplib}%
...<preamble>
¥begin{document}
...<text>
¥begin{mplibcode}
<< MetaPost code >>
¥end{mplibcode}
...<text>
¥end{document}

 細かい文の中身やコードは省いている謂わば骨組みだけを抽出してみました。#TeX の原稿(プログラムソースのようなもの)はこのように様々にオプションの指定や仕様の設定が必要だったりするという事です。この基本設定オプションはpreamble(プリアンブル)と呼ばれる本文( ¥begin{document}..¥end{document} )の前に置かれる組版設定部(勝手命名)に記載します。

 この場合では #LuaLaTeX でTypeOutして,レポートの形式(つまり基本的にペラ紙一枚のもので本のような表紙などの体裁は構わない)でA4サイズの紙面というオプション([...]で囲まれた部分は概ね何かのオプション)でのLtjsbook(Lua TeX Japanese な本のタイプ)という形式で作成されたLuaLaTeX文書であるという風に読めます。

 そのあとにどんなフォントを使うかなど指定があれば様々書けるのですがそこも省略して,¥usepackage{luamplib}というLuaによるMetaPostのためのLibraryなPackageを用いるという#TeX の命令¥usepackage{パッケージ名}を入れてます。このお話の中心がこの #luamplib を用いた #MetaPost による描画の話だからというわけです。

 それらの後にやっと文書本体が¥begin{document}..¥end{document}に挟んで書区分けですが此処もテキストは省略。でその中に¥begin{mplibcode}
<< MetaPost code >>¥end{mplibcode}とMetaPostのプログラムソースを書き込めば良いというわけです。

 実際にTypeOutが試せるものを見てみましょう。例えばこんな感じです。

%!TEX TS-program = lualatex
¥documentclass[report,fleqn,a4paper]{ltjsbook}%
¥usepackage{luamplib}%
¥begin{document}%
○をMetaPostで描いてみよう。
¥begin{mplibcode}
beginfig(1);
draw fullcircle scaled 30mm;
endfig;
¥end{mplibcode}
¥end{document}%

 このテキストファイルにsample.texのように拡張子がtexなファイル名をつけてluatexでタイプアウトすれば,次のような文書がpdfで出来上がります。画像はpdfの一部です。

 本来 #MetaPost やその由来元な #MetaFont (名前の通りフォント創生のプログラム)は #TeX と独立して画像やフォントを創る為ののプログラム(というよりは指定されたデータからモノを実体化するアプリケーション)です。例えば https://ja.wikipedia.org/wiki/MetaPost を見ればサンプルから確認できる通り,一つの #MetaPost のソースで一度に幾つもの図版が用意できます。そうでないと幾つも図版が必要な場合幾つものMetaPostソースファイルを用意しなくてはならずそれを一々コンパイル(というかタイプアウトというか実体化というべきか)しなければならずとても煩雑になるわけで無駄が増えるからでしょうか。そんなわけで,一つのファイルから作られる図像には本来は区別が必要でありその為に一つ一つの図像ごとに,beginfig(図像番号);...endfig;というヘッダフッダというか開始命令終結命令が設定されており #luaTeX#luamplib を用いて直接 #MetaPost のコードを #TeX 文書中に書き込む場合でも,beginfig(図像番号);<<MetaPostソース>>endfig;の形式が必要だというわけです。うっかり忘れるとタイプアウトは正常に終わりますが折角の図像が現れません。

 実質的な #MetaPost のプログラムは draw fullcircle scaled 30mm; の一行だけでとてもシンプルです。構文など知らなくても読めるでしょう。「完全な円を30mmのスケールで描いてちょ」というモノです。なんとなく円の基本のスケールが直径で計られていることも感じられるでしょうか。半径が基本だと直径は60mmとなり,それにしては少し小さいよねという話です。

この記事が気に入ったらサポートをしてみませんか?