MePoTeXを活用して,図形とグラフを究めよう!
(注1) MathJaxを使用しているので、 スマホでは表示に時間がかかることがあります。
(注2) 図やコードが文章に被って表示されるときは「再読み込み」して下さい。
(注3)モバイル利用(Android)でのメニュー選択は、 SiteMapを利用するか、 「長押し」から「新しいタブを開く」を選択してください。
■MePoTeXによる図形やグラフの作成法 [Map] |
|
|
[御案内] TeXを利用して数学プリントを作成するとき,
いろいろな図形やグラフを作成する必要があります.
それを作成するアプリはTeXのシステムにすでに含まれています.
「MetaPost」です.さらに,それをTeXソースの中で利用できるようにした
パッケージが「MePoTeX」です.詳細なマニュアルもあるのですが,
TeXを使い慣れていない場合は全体像を把握しにくいかもしれません.
そこで,ここでは,TeXを使い始めた方を念頭に, MePoTeXを用いた図形やグラフの作成方法について解説します. ただし,TeXのインストールはすでになされており, TeXによる通常文書は作成できるレベルにあることを前提とします. emathと類似したコマンドで 曲面の描画まで行うことができ、 図形をGhostscriptを経由しないEPSファイル(MPS)で保存することができます。 |
|
■「MePoTeX」とは? |
|
はじめに |
最初に,MePoTeXを利用するとどのような図形が作成可能であるかをみてみましょう. 下記の[1][2]は,MePoTeXパッケージに含まれるマニュアルにある図です. いちいち画像を\includegraphicsで取り込む必要はありません。 ローレンツアトラクターや球面調和関数のグラフも, TeXのソースファイルにMePoTeXのコードを記述するだけで済みます。 emathと併用すれば、数学教材の作成に他のアプリを利用する必要はない ようにさえ思えます! |
|
■MePoTeXとMetaPostのマニュアルとインストール
|
MePoTeXの概要 |
TeXのフォントを作成するツールとしてMetafont
があります.
これは,TeXの創始者であるDonald D. Knuth氏が作成したものです。
出版業界のフォントの成り立ちまで調べて作成したといわれています。
Metafontでは曲線でフォントの輪郭が作られますが,
その描画機能を取り出して図形やグラフの作成に生かそうとしたのが,
John D. Hobby氏によるMetaPostです.
Metafontはビットマップフォントを生成するのに対して,
MetaPostはPostscriptファイルを生成します.
つまり、MetaPostで生成される画像ファイルはEPS形式のファイルです。
さらに、そのファイルはTeXの処理体系の中で処理することができ、
通常のEPSのようにGhostscriptを経由する必要がありません。
その意味で、Purified EPSと呼ばれています。
このようなEPSを出力することができるのは、MetaPostだけです。
通常のEPSと区別するために、拡張子はMPSで表示することが推奨されています。
そして、このMetaPostをTeXのソースファイルの中で利用できるように
多数のマクロを追加して改良されたパッケージが、
「みなも」氏による「MePoTeX」です。
全体像は「こちら」を参照してください。
最新版は Ver 4.50 (2022.01.10) です。
手っ取り早く概要を把握したい方は「こちら」 (PDF1、 PDF2) を参照してください。 また、さっそく試してみたい方は、 下記は読み飛ばして「図形描画の基本」にお進みください。実際にインストールするにはTeXのバージョンに注意が必要なので、「インストール」の箇所には必ず目を通してください。 |
|
MePoTeXのコード |
MePoTeXでは、図やグラフがどのようにして描かれているのでしょうか?
プリアンブル部分を \documentclass{jsarticle} \usepackage[dvipdfmx]{graphicx,color} \usepackage{MePoTeX}とするとき、次のようなコードで放物線 \(\small y=4x-x^2\) と 直線 \(\small y=4-x\) のグラフが描画されます。
|
順番に解説すると、次のような内容になります。
詳細解説は「参照」をクリックしてください。
コマンドの体系はemathとは独自に作成されていますが、 自然と同じような書式になっています。 \sendMP{ }の括弧内には MetaPost のコードを直接書き入れることもできますが、 簡潔に記述できるようにマクロ化されています。 たとえば、「xdraw()」もMePoTeXのマクロです。この括弧内では、 線種や色などを細かく指定することができます。 このファイル名を、たとえば「mptest.tex」します。 出力先をPDFにしてコンパイルすると図が表示されますが、 ファイルを置いているフォルダーをみると、 「@mptest.mp」「@mptest001.mps」というファイルが生成されています。 「@mptest.mp」は、MePoTeXの形式で書かれた内容を MetaPostの形式で書き出したものです。 「@mptest001.mps」は、 MetaPostにより生成された図のEPSファイルです。 MetaPostが生成したことを示すために拡張子はmpsが使用されます。 このファイルを\includegraphicsで読み込むと、 他のTeXファイルでも利用することができます。 MPpic環境の数だけmpsファイルが生成されますが、 mpファイルは最後の図のものだけが残ります。 他に、sav、sft の拡張子を持つファイルも生成されます。 mp以外のファイルを、 別フォルダーに保存するようにすることもできます[参照]。 |
|
MetaPost |
MePoTeXを利用すると、
前述のようにTeXのソースファイルに直接書き入れることで
MetaPostの生成する図形が表示されます。
そこではMetaPostを意識する必要はありません。
MePoTeXを利用しない場合は、
まず、図形として、 「 TeXWiki:MetaPost」の冒頭で取り上げられている ハートマークを作成してみましょう。 heart.mpの内容は、次のようになります。 なお、MetaPostでは、2点間を 「..」でつなぐと曲線で結ばれ、 「--」でつなぐと線分で結ばれます。 prologues := 3; beginfig(1); % ハートマークを描く pickup pencircle scaled 2; draw (0,40)..(10,50)..(20,40) ..(8,20)..(0,0); draw currentpicture xscaled -1; endfig; end これを、MetaPostで処理します。 オリジナルのMetaPostの実行ファイルは「mpost.exe」ですが、 後述する理由により、実際には「r-mpost.exe」を利用すべきです。 日本語対応したものは「r-pmpost.exe」です。 逆にいうと、\binフォルダーにこれらの実行ファイルが含まれていない場合は、 かなり古いTeXシステムです。 その場合の対応は、「MePoTeXのインストール」の 箇所をみてください。 DOS画面で「r-mpost heart」とすると、 EPSファイルとして「heart.1」が生成されます。 このファイルをTeXで利用するには、拡張子をmpsに変更して、 「heart.mps」を\includegraphicsで読み込みます。\documentclass{jsarticle} \usepackage[dvipdfmx]{graphicx} \begin{document} \includegraphics{heart.mps} \end{document}MetaPostの生成するEPSファイルは、 TeXの処理体系で処理できるEPSファイルなので、 そのことを明示するため拡張子は「mps」とするようになっているようです。 Ghostscriptは呼び出されません。 仮に拡張子をepsのままにしても、 MetaPostから出力されるファイルは次の項目で述べる「Purified eps」なので、 Ghostscriptは経由しないで処理されます。 (注) MePoTeXのマニュアルによると、 MetaPostの実行ファイルをTeXから呼び出すときの動作に セキュリティホールが見つかったようです。 それを修正した実行ファイルは「r-mpost.exe」と 日本語化された「r-pmpost.exe」であり、 2019以降のTeXであれば、その\binフォルダーに含まれています。 MePoTeXを利用するとあまりMetaPostを意識しなくても済みますが、 少し込み入った処理をしようとすると、どうしてもMetaPostの仕組みについて ある程度理解している必要があります。 MetaPostについては、冒頭であげたマニュアル[3]を 参照してください。 |
|
Purified EPS |
MetaPostの生成するEPSファイルは、
通常のEPSファイルとは異なり、
Ghostscriptに頼らずともTeXが直接処理できるEPSファイルです。
区別するために、「Purified EPS」と呼ばれます。
画像の拡張子は、「EPS」ではなく「MPS」とする必要があります。
このようなEPSを生成できるのは
MetaPostに限られるようです。
TeXの\binフォルダーには、 既存のEPSファイルをMetapostの生成するEPSファイルに 変換するアプリが含まれています。「purifyeps.exe」です。 マニュアルらしきものは「\texmf-dist\doc\man\man1」にある 「purifyeps.man1.pdf」です。 いろいろなオプションの種類と簡単な使用例が書かれています。 利用するには、 「\texmf-dist\pstoedit\data」にある「mpost.fmp」が必要です。 このファイルを変換しようとするEPSファイルのあるフォルダーに コピーして、DOS画面のEPSファイルのあるフォルダーで purifyeps 入力ファイル.eps 出力ファイル.mps とします。出力ファイル名を指定しないと、 出力内容が画面に表示されて流れていくだけです。 ファイル保存するには出力ファイル名が必須です。 拡張子は「mps」とします。 「mpost.fmp」を当該フォルダーにコピーしないときは、 入力ファイル名を指定する前に、「--fontmap=」として ファイルのある場所をフルパスで指定し、 フォルダー名の最後で「\mpost.fmp」とします。 打ち込んで「ENTER」を押してから、 実行されまでに数秒間の空白時間が必要です。 エラーのときはその旨が表示されるので、 じっと待つことです。試みに、Ghostscriptに住む有名な虎さん(tiger.eps)を変換してみました。 変換後のファイル名は「tiger_p.mps」としました。 ファイルの冒頭部分を比較すると次のようになっており、 「tiger_p.mps」はMetaPostで生成されたことが記されています。
|
|
MePoTeXのインストール |
MePoTeXのファイル一式は、下記よりダウンロードできます。
Sift-JIS版とutf-8版のZIPファイルが登録されているので、
必要なファイルをダウンロードして解凍します。
解凍されたファイルのコピー先は、上記サイトの後半に書かれています。
基本的に必要なファイルは、.styファイルと、
各種のマクロが登録されている.mpファイルです。
指示にしたがい、私の場合は、.styファイルは
\texmf-local\tex\mepotexに、.
mpファイルは\texmf-local\metapostにコピーしました。
コピー後は、それらのファイルをTeXに認識させるために、
mktexlsr.exeを実行します。
ちゃんと動くかどうかを確認するには、 「manual」フォルダーにマニュアルのソースファイルが置いてあるので、 それをコンパイルしてみるとよいでしょう。 ただし、多数の画像関連ファイル(mps,sav,sft)が生成されるので注意してください。 ファイルの生成先をデスクトップにしていると、 あっという間にデスクトップがファイルで埋まってしまいます。 画像ファイルを保存するサブフォルダーをあらかじめ作成して、 そこに保存するように設定した方が良いでしょう[参照]。
■TeXのバージョンに注意
■Ver 4.50での主な更新内容 |
|
利用上の留意点 |
MePoTeXは、TeXの処理系の中で外部ソフトであるMetaPostを呼び出して
処理を行わせています。MetaPostの実行ファイルは、TeXをインストールした段階で、
すでに「\bin」フォルダーに含まれています。
MePoTeXを実際に利用すると、TeXを使いこなしてきた方であっても、
おそらくは見慣れないエラーに見舞われるかもしれません。
多くは、TeXがMePoTeXの指示により内部で実行しようとしている
MetaPostのエラーと思われます。
その場合は、前述した
「MPpic」環境内のコードを注意深く見直してください。
だいたいは単純ミスであることが多いです。
私の経験上では、特に、下記のことに注意してください。
|
|
他アプリとの比較 |
TeXのソースコードの中で曲面まで描画できるアプリとしては、
MePoTeXの他にも幾つかのアプリがあります。
いずれを利用すべきであるかは利用者側の好みの問題と思われますが、
下記に他のアプリの描画サンプルやコードを紹介しているサイトを
紹介しておきます。動画やHTMLでの利用は考えず
日々の数学教材の作成で利用するのであれば、
スタイルファイルやそのマクロを定義しているmpファイルを
インストールするだけで済み、
コードも簡潔に記述できるMePoTeXで十分なように思います。
MePoTeXは2000年にはver1.00が発表されているのに、 これまで利用がはかどらなかったのは、 おそらくは詳細マニュアルやサンプルがWeb公開されていなかったからでは ないかと思われます。Web検索で参照できるのは マニュアル[3]ですが、これは2006年次のものであり、 その内容はMePoTeXよりもMetaPostを中心とした解説です。 MePoTeXの多数のマクロは、その時点ですでに大部分が作成済みです。 本ページでは、MePoTeXの作者である「みなも」さんの了解を得て、 パッケージをダウンロードしないと閲覧できない詳細マニュアルを 登録しました。MePoTeXのマニュアル[1]に 多数掲載されているサンプルと、 下記に登録したサンプルとを比較して、 どちらが使いやすいか検討してみてください。
|
■図形描画の基本 |
|
■画像関連ファイルのフォルダー MePoTeXでは、 図形の定義はMPpic環境の中で行います。 mpsファイルはMPpic環境の数だけ生成されるので、 MPpic環境を何度も開くとその数だけmpsファイルが生成されます。 場合によってはファイルを置いているフォルダーがmpsだらけになるので、 特に出力先をデスクトップにしている場合は注意が必要です。 Ver4.50で新設されたマクロ「\mptSaveDir」を利用すると、 画像関連のファイルを別フォルダーに保存することができます。 あらかじめ別フォルダー(たとえば「sub」)を自分で作成しておき、 TeXのソースコードのプリアンブルで次のように指定すると、 コンパイル時に生成される拡張子が mps, sav, sft のファイルが そのフォルダーに格納されます。 \documentclass{jsarticle} \usepackage[dvipdfmx]{graphicx,color} \usepackage{MePoTeX} \mptSaveDir{sub} |
図形描画の基本 簡単な図形として、たとえば、 \(\small 0\leqq x\leqq 4,~0\leqq y\leqq 4\) の範囲に、 外枠と1辺が1の正方形を配置するには、 ドキュメント部分は次のようなコマンドになります。 個々のコマンドの意味は、この後で順を追って説明します。
|
(注) Webのモバイルフレンドリー表示の関係で、 全角の空白で調整して2行に分けて表示している箇所があります。 以下に提示されたサンプルコードをコピーして実行するときは、 全角の空白を削除するか、 または半角の空白かtabで置き換えてから実行してください。 |
描画範囲と単位 |
2行目では、単位あたりの長さと描画範囲が指定されています。
<1cm>を指定しないと<1bp>が仮定され、
内側の正方形OABCはほとんど点でしか表示されません。
1bp=1/72インチ=0.35mmです。逆にみると、1mm=2.83bpです。
横と縦の縮尺を変えたい場合、たとえば<1cm, 0.5cm>とすると、
縦が半分に縮小されます。縦を省略すると、横と同じ長さで設定されます。
横軸と縦軸の範囲を(p, q)の形で指定すると、 \(\small 0\leqq x\leqq p,~0\leqq y\leqq q\)を指定したことになります。 指定範囲内だけが描画されるわけではなく、 描画コマンドによっては指定した範囲を超えて描画されます。 負の範囲を指定するには、 (p1|p2, q1|q2) として「|」で区切って指定します。 「|」の左側は正の範囲、右側は負の範囲です。 たとえば、\(\small -1\leqq x\leqq 4,~-1\leqq y\leqq 4\) としたいときは 次のようにします。なお、 下図では座標軸を表示しています。
|
xdraw( )は、 指定された太さで2点間を線でつないでいきます。 太さを省略して xdraw() とするとデフォルトの太さ(0.6pt)で繋がれます。 xdraw() の「()」は省略できません。 最後の「cycle」は、最初の点と結んで閉じることを指定しています。 また、最初のxdrawを2行に分けて書いていますが、 1行に続けて書いてかまいません。 2行に分けたのは、スマホ等で閲覧したときに 表示が乱れないようにするモバイルフレンドリーのためです (以下、このことについてはいちいちコメントしません)。 |
|
\sendMP |
\sendMPにより、
{ }内に書かれたコマンドがMetaPostに引き渡されます。
個々のコマンドは「;」で区切る必要があるので気をつけてください。
最初は「;」を書き損ねてエラーとなる場合が多いです。
逆に、\sendMPの外側の「\mpt・・・」というコマンドでは
「;」をつける必要はありません。
「;」をつけてもエラーにはなりませんが、
「;」が図にも表示されます。
コンパイルが成功すると、図が表示されると同時に、
MetaPostのコードを書き込んだmpファイルと、
図形をPurified EPSの形式で書き込んだmpsファイルが
生成されます。
MetaPostにどのようなコマンドが引き渡されたのか、 一度は生成されたmpファイルの内容を見ておくとよいでしょう。 そのmpファイルをmpost.exeで実行すると 同じ図形ファイルが生成されますが、 MePoTeXをインストールしていない場合はエラーが生じると思われます。 生成されたmpファイルの上から2行目に「input mptUser.mp」と書かれていますが、 これにより、MePoTeXの作者である「みなも」氏により作成された MetaPostの多数のマクロをが呼び出されています。 MePoTeXがインストールされていないと、 そのマクロが見当たらないとしてエラーになると思われます。 \sendMP内に書き込むコマンドはMetaPostのコマンドですが、 簡潔に記述できるよう「みなも」氏により改良されています。 |
|
点の座標 |
数学で (a,b) と書いた場合は、平面上の点の座標を意味するときと、
ベクトルの成分表示である場合とがあります。
MetaPostでは、この記法を両方の意味合いで利用することができます。
ここでの例では、点の座標として利用しています。
まず、「pair O,A,B,C;」により、
これらの変数は2次元ベクトルまたは平面座標であることを宣言しています。
この宣言をしないと、左辺のAは数値変数と認識されてエラーとなります。
サンプルプログラムでは、点を2通りの方式で定義しています。 「B=(1w,1h)」の w, h は、横幅(width)と高さ(height)のことで、 1行目に書いた<1cm>が w, h の単位として設定されます。 <1cm, 0.5cm>とした場合は、1w=1cm、1h=0.5cmとなります。 w, hを省略して単に「B=(1,1)」とすると、Bは(1bp, 1bp)の点となります。 1bpは、1/72インチ=0.3527mmです。 もう一つの定義の仕方として、「u=1cm」を指定して、 (4u, 4u)のような指定の仕方をすることができます。 この指定を利用すると、MPpic環境の1行目で指定した単位とは別の単位で 指定することができます。 整数である必要はなく、0.5uやu/2などでもかまいません。 具体的な数との積では、積の記号「*」は省略することができます。 なお、MetaPostでの「z」は、単なる変数ではなくマクロであるようです。 O,A,B,Cではなく、z.O, z.A, z.B, z.Cとして定義すれば、 pairの宣言を省略することができます。 あるいは、z0,z1,z2,z3として定義することもできます。 その場合、たとえばz2の\(\small x, y\)座標は、それぞれ z2x, z2y として 参照することができます。 複素数の感覚で利用できるので、zを利用した方が良いようです。 なお、変数名を「color」宣言すると、 空間の点の座標やベクトルを定義することができます。 一見すると奇異に感じられますが、 color指定はRGB形式で3つの数を指定することによります。 \sendMP内で「color iro;」とすると、iro は3つの数の組 \(\small (a,b,c)\) からなります。その組の成分は任意の数でかまいません。 0〜1の範囲内の数からなるときは色指定として利用することができます。 つまり、「pair」宣言すると2次元ベクトル、「color」宣言すると3次元ベクトル として利用することができます。 さらには、「cmykcolor」宣言すると4次元ベクトルとして利用できます。 後述しますが、 色の指定の仕方は、RGB、HSB、CMYKの3種類あります。 MePoTeXで点を配置するコマンドは\mptPointです。 書式は複数通りありますが、1つは次の書式です。
\mptPoint{配置点}[点のラベル] つまり、\mptPoint を利用すると、点の座標とそれを保持する変数名、 そこに割り振るラベルと位置の指定、さらには黒丸の有無や直径の大きさまで 一度に指定できるということです。 これらの指定をMetaPostで行おうとすると、 それぞれについてのコマンドを書き並べる必要があります。 関連する指定を一つのコマンドでできるようにマクロ化されているのです。
|
|
座標軸 |
座標軸を書き入れるには\mptXaxis、\mptYaxisを利用します。
(参照:図)。
\mptXaxisは横軸に矢印をつけます。
「\mpt」はMePoTeXのTeX側のマクロであることを示しています。
これらはMetaPostのマクロではないので、
\sendMPの外側で記述します。外側では「;」を入れる必要はありません。
\sendMPの外側のコマンドに「;」をつけると、
図にも「;」が書き込まれます。
\mptXaxisは下記のような書式で記述します。\mptYaxisも同様です。
2行に分けていますが、続けて入力してかまいません。
\mptXaxis[ラベルの位置] ラベルの位置には、t, b, B, l, r の1つまたは2つを利用できます。 何も指定されないときは c(中央) が仮定されます。 ここでは [tr] としていますが、これはラベル文字「\(\small x\)」の 上部の右部が配置点にくるように指定するものです。 この場合の配置点は、矢印の先端です。そのまま配置すると文字が 矢尻とかぶるので、<0mm,-1mm> としてちょっと下に下げています。 その配置のされ方は、[ ]内をいろいろ変えて自分で試してみるとよいでしょう。 配置しようとする文字の左右上下を、配置点のどこに置くか?ということです。 その位置関係の詳細は下図のようになります。 MePoTeXのマニュアル[2]の3ページの図です。 \(\small hg(x)\) を配置する場合の図になります。 |
|
線で結ぶ |
2点間を線や曲線で結ぶには、描画コマンド「xdraw」を用います。
2点間を「--」で結ぶと線で、「..」で結ぶと曲線(3次ベジェー曲線)で結ばれます。
たとえば「xdraw(0.1pt)」は、
点を結ぶ「draw」というMetaPostのコマンドと、
結ぶ線の太さを指定するコマンドを合体させたMetaPostのマクロです。
MetaPostのコマンドで太さを指定するには、本来は
「pickup pencircle scaled 0.1pt;」と記述する必要があります。
簡潔に記述できるよう「みなも」氏により改良が図られているのです。
2点間を結ぶだけでなく、いろいろな図形をあらかじめ定義しておくと、
xdrawはその図形を描画することができます。
サンプルプログラムでは 四角形を描画するために「O--A--B--C--cycle;」となっていますが、 最後の「--cycle;」は、最初の点Oと結んで図形を閉じる巡回パスで あることを示しています。点を結んで得られる経路を「パス」と呼びます。 線を繋ぐだけであれば「O--A--B--C--O;」と同じことですが、 閉じられた内部の塗りつぶしを行うには、 最後は「--cycle;」としておく必要があります。
■曲線で結ぶ
|
|
目盛りとラベル |
|
座標軸に目盛りを打つには\mptDrawTickを、
座標の数値を書き入れるには\mptCoordを、
適当な位置に文字を書き込むには\mptLabelを、
それぞれ\sendMPの外側で使用します。
つまり、これらはTeX側のマクロです。
以下、順に説明します。
|
この図では、横軸のラベルの位置を矢印の先端の右側に配置するため、
[tr]を[l]に変更しました。
また、\sendMP内で、点の定義をz0,z1,z2,z3に変更しています。
「;」が必要なのは、\sendMP内のコマンドだけなので注意してください。
また、点の座標は、w, h などの単位つきで指定する必要があります。
目盛りを打つ(\mptDrawTick)
\mptDrawTick[xmin=0mm,xmax=2pt,
数値を入れる(\mptCoord)
\mptCoord(x開始, y開始)
文字を書き入れる(\mptLabel)
\mptLabel{座標}[ラベル位置] |
|
線種と色 |
|
線の太さは「xdraw( )」の括弧内の指定で変えることができますが、
この( )内では、
線種や矢印の種類、あるいは色を順不同で指定することができます。
線種
|
ここでは、繰り返しの「for--endfor」を利用しました。
倍率を1から1ずつ増やして、4まで描画しています。
「:」で区切って、繰り返す処理を記述します。
複数の処理を行うときは、それぞれを「;」で区切ります。
「s*u」を「su」にすると新たな変数を見なされてエラーとなります。
「tensen(倍率)」とすると、点線になります。 たとえば、「xdraw(1pt, tensen())」で指定すると、 1ptの点が2.5pt間隔で並びます。 tensen(2)とすると、2ptの点が 5pt 間隔で並びます。 「\mptLabel」を利用して、 指定した場所に倍率を表す数字を配置しています。 |
|
矢印
|
|
色 「xdraw( )」の括弧内で色を指定するには色名を入れるだけですが、 プリアンブルで「\usepackage[dvipdfmx]{graphicx,color}」を 組み込んでおく必要があります。色名は、 graphicパッケージで定義されている68色の名前を書き入れます。 他に、RGB、CMYK、HSB形式で定義された色も利用できます。 ただし、大文字と小文字を区別するので、入力には気をつけてください。 「yellow」でエラーが出て、いろいろ悩んでしまいました・・・。
|
色は、RGB形式の場合は(赤,緑,青)の3次元で表されます。
そのような形式の変数は「color」として宣言することができます。
色を表す場合、各成分は0〜1の値を取りますが、
3次元ベクトルや空間の点の座標を表す場合は、値の大きさに制限はありません。
デフォルトでは、
black=(0,0,0)、red=(1,0,0)、green=(0,1,0)、blue=(0,0,1)、white=(1,1,1)
が定義済みです。色のコードをRGB形式で示すとき、
通常は16進数で表示されますが、ここでは
十進数の 0〜1 の値で考える必要があるので、
十進のコードを255で割った値で指定します。
色を任意に指定したいときは、たとえば次のようにします。
まず、変数「iro」をcolor型の変数(3次元)として宣言し、 具体的な成分を定義します。 その後は、色名を指定する箇所で「iro」を使用することができます。 具体例は、下記のコードを見てください。 3つの成分での色指定には、RGBの他にHSB形式の色があります。 これは、色を色相(Hue)、彩度(Saturation)、明度(Brightness)の 3つの属性で数値化したものです。 単なる (a,b,c) はRGBですが、 HSBの色として使用するときは「hsb(a,b,c)」 として使用します。 色として利用するときは、各成分は 0〜1 の範囲の数で表します。 red, green, blue の初字を大文字にしてRed, Green, Blueも指定できますが、 ちょっと暗くなります。これらはCMYK形式で指定した色名のようです。 CMYK形式の色指定は、色をシアン(C)、マゼンタ(M)、黄色(Y)、黒(K)の 4つの色で指定するものです。 \sendMP内で、「cmykcolor iro;」などと指定すると、 「iro=(a,b,c,d);」という4次元ベクトルを定義できます。 色として利用するときは 0〜1 の値である必要がありますが、 任意の値で利用すると4次元ベクトルとして利用することができます。 下記では、色を RGB, HSB, HMYK形式の3つの形式で表示しています。 指定したiroの値は 0〜1 の範囲で適当に決めました。 iroa は、RGBでは255を掛けて(51,102,153)の色です。
|
|
JISカラー MePoTeXのマニュアルでは言及されていませんが、 MePoTeXのマクロを納めているフォルダーには「JIScolor.mp」があります。 中を見ると、JISの定める 和名の色のうち、 74色がローマ字の大文字で定義されています。 「\sendMP」の先頭に「input JIScolor.mp;」を挿入すれば、 これらの色を利用することができます。 TOKI、TUTUZI、SAKURA、BARA、SANGO、MOMO、BENI、ENZI、AKANE、AKA、SYU、TOBI、AZUKI、AKATYA、KAKI、RENGA、HIWADA、KURI、HADA、DAIDAI、TYA、KOGETYA、ANZU、MIKAN、KASSYOKU、TUTI、KOMUGI、KOHAKU、TAMAGO、YAMABUKI、OUDO、HIMAWARI、SUNA、KARASI、KI、UGUISU、MATTYA、KIMIDORI、KOKE、WAKAKUSA、MOEGI、KUSA、WAKABA、MATUBA、MIDORI、ROKUSYOU、HUKAMIDORI、MOeGI、WAKATAKE、AOTAKE、AOMIDORI、ASAGIMIZU、SORA、AO、AI、TUYUKUSA、KONZYOU、RURI、KON、GUNZYOU、KIKYOU、HUJI、AOMURASAKI、SUMIRE、SYOUBU、EDOMURASAKI、MURASAKI、KODAIMURASAKI、SIKON、AYAMEBOTAN、AKAMURASAKI、ZOUGE、
|
上記では、「\sendMP[10pt]」とすることで、 ここでの線の太さはすべて 10pt にしています。 上から順に、朱鷺(TOKI)、杏(ANZU)、朱(SYU)、草(KUSA)、藍(AI)です。 |
|
格子の描画 |
格子を描画するには、\mptDrawGridを利用します。
書式は、座標軸のときと同様です。
[ ]では、線種や色などを指定することができます。
(参照) \mptXaxis、 \mptDrawTick、 \mptCoord、 \mptLabel
|
上段の図では、[linetype=dashed hasen()]として破線を指定しています。
xdraw() のときと違い、「dashed」の後に指定する必要があります。
「dashed」は線種を変更する MetaPost のコマンドです。
[ ]内では、他に次のような指定をすることができます。
複数の指定をするときは、「,」で区切ります。
下段は[ ]内を
[pensize=2pt,linetype=
|
|
曲線で結ぶ |
|
ベジェー曲線 xdraw( )を利用して点間を「..」で結ぶと、 3次のベジェー曲線で結ばれます。 しかし、点の与え方によってはとんでもない曲線になったりします。 下図では、描画範囲が左側に大きくはみ出してしまうので、 範囲を \(\small -4\leqq x\leqq 4\) にしました。
|
接線方向 望むような曲線を得るために 指定した点での接線方向を指定することができます。 たとえば、点Oでの接線を80度方向としたいときは、 z.O{dir(80)}とします。点Bの左側では0度で右側が30度方向としたいときは、 {dir(0)}z.B{dir(30)}とします。( ) を省いて、それぞれ dir80, dir0, dir30 でもかまいません。負の角度で dir-30 でも大丈夫です。
|
張り詰め度 特定の箇所をあまり曲線にしたくないときは、 「tension」を間に挟みます。数値で、張り詰め方を指定します。 下図では、CD間に指定しています。
|
カール 端点で巻かせたいときは「curl」を用います。 数値で巻かせ方の度合いを決めます。
|
任意方向 結ぶ点を指定するとき、座標ではなく、 原点を中心に上下左右の方向と距離を指定することで点を表すこともできます。 途中に上述の「接線方向」「張り詰め度」「カール」を挟めば、 経過点を指定して自分の望む曲線を描くことができるでしょう。
|
上記では、原点からみたとき、右に4wの点A(4w,0)、
45度方向に \(\small 3\sqrt{2}\) の点(要するに B(4w,4h))、
上方向に4hの点 C(0,4h) を結んで「cycle」により原点に戻っています。
上記は、原点から見た点で指定しましたが、 座標をベクトルや複素数とみて、「次の点」に向けた方向を 加えていくことで描くこともできます。 その場合、\(\small {\rm AB}={\rm BC}=\sqrt{10}\) であり、 \(\small \angle{\rm OAB}=\tan^{-1} 3\doteqdot 71.6^{\circ}\) であることから、z1, z2, z3 はそれぞれ次のように定義することになります。 角度は、つねに水平方向からの角で考える必要があります。 図は同じです。
|
|
塗りつぶし |
指定された閉領域を色で塗りつぶしたり、斜線を引いたりするには
「xfill(色名や斜線タイプ)」か
「xfilldraw(色名や斜線タイプ)(境界線の色や太さ)」を用います。
最初の括弧では塗りつぶしに関する指定を、
2つめの括弧では境界線に関する指示を行います。
|
塗りつぶし 「xfill」や「xfilldraw」の色名や斜線は、次のように指定します。 境界線にこだわりがなく、内部の塗りつぶしの色と同一で良いときは、 「xfill( )」だけでかまいません。△OAEは、xfillを利用しています。
境界線 |