見出し画像

奥義かどうかは判らないけれど(その3)

 さて,#LuaTeX (#LuaLaTeX)で #Luamplib というパッケージを用いて, #MetaPost で楽々お絵描き体験な記事です。第3弾。

 タイトルの画像のようなものも超絶簡単に描けるわけですがまだ3回目なので気になる方は色々遊んでみましょう。今回は色々簡単な作図の紹介です。

%!TEX TS-program = lualatex
¥documentclass[report,fleqn,a4paper]{ltjsbook}%
¥usepackage{luamplib}%
¥begin{document}%
¥noindent¥hfill
¥begin{mplibcode}
beginfig(1);
for i=-2 upto 7:draw ((i,-2)--(i,7)) scaled 3mm withcolor 0.5*(blue+0.5green)+0.5white;endfor;
for i=-2 upto 7:draw ((-2,i)--(7,i)) scaled 3mm withcolor 0.5*(blue+0.5green)+0.5white;endfor;
endfig;
¥end{mplibcode}
¥hfill~¥par
%
¥end{document}

をTypeOutすれば,

のように格子が描かれる事は前回紹介しました。少しプログラムを齧ったことがあれば直ぐ分かるように,所謂「for..nextなloopを廻して描く」というものです。MetaPostの命令は基本「;」を最後に打つのですが,for文の場合は,「for 変数 どう廻すか: <<繰り返す部分>> endfor;」という形で,「:」を用いるのがポイントです。

 for i=1 upto 100:<<...>> endfor; とすれば,iを1から始めて100まで(1刻みで増やしながら)<<...>>を繰返す。となります。

 刻みを1以外にしたければ,for d=1 step 1/10 until 2: のようにします。「1/10刻みで2まで」という事になります。簡単ですね。

%!TEX TS-program = lualatex
¥documentclass[report,fleqn,a4paper]{ltjsbook}%
¥usepackage{luamplib}%
¥everymplib{beginfig(1);}%
¥everyendmplib{endfig;}%
¥def¥mpTemp(#1,#2)(#3,#4)[#5,#6][#7]{%
for i=#1 upto #3:draw ((i,#2)--(i,#4)) xscaled #5 yscaled #6 withcolor #7;endfor;
for i=#2 upto #4:draw ((#1,i)--(#3,i)) xscaled #5 yscaled #6 withcolor #7;endfor;
}%
¥begin{document}%
¥noindent¥hfill
¥begin{mplibcode}
¥mpTemp(-2,-2)(7,7)[3mm,3mm][0.5*(blue+0.5green)+0.5white]
¥end{mplibcode}
¥hfill
¥begin{mplibcode}
¥mpTemp(-3,-2)(9,7)[7/3mm,10/3mm][0.5*(red+0.5green)+0.5white]
¥end{mplibcode}
¥hfill~¥par
%
¥end{document}

少し変えてみました。まず毎回毎回 beginfig(1); と endfig; を各お約束が面倒なので,¥everymplib{beginfig(1);} と ¥everyendmplib{endfig;}で,どのmplibcodeの環境でも最初に beginfig(1); を実行し,最後に endfig; を実行するという指定をしておきます。「毎度オプション」みたいな感じでしょうか。

あとは格子もよく使うのでTeXのマクロ化をしてみました。解読してみてください。図はこう描かれます。

簡単なものばかりもっとと思ったけど時間が掛かってるのでもう遅い時間なのでここまで。

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