emath利用によるグラフの作成

in [TeXの部屋]

emathを利用した関数グラフや図形の作成手順を取りまとめました。

emathを利用して数学教材のTeXロードを駆け抜けよう!

  • MathJaxを使用しているので、 スマホでは表示に時間がかかることがあります。
  • モバイル利用(Android)でのメニュー選択は、 SiteMapを利用するか、 または「長押し」から「新しいタブを開く」を選択してください。
■emath利用による関数グラフや図形の作成


[御案内] TeXを利用して数学プリントを作成するとき, 「emath」パッケージは必需品というべきです. 詳細なドキュメントが同包されているので, そのドキュメントを見れば使いこなすことができるはずですが, TeXを使い慣れていない場合は, ドキュメントが詳しすぎて全体像を把握しにくいかもしれません.
 そこで,ここでは,TeXを使い始めた方を念頭に, emathを用いた数学プリントの作成方法について解説します. ただし,TeXのインストールはすでになされており,TeXによる通常文書は 作成できるレベルにあることを前提とします.

★このページには数学絡みで訪れる方が多いと思われますが、 世の中の多くの事象は「正規分布」ではなく 「ベキ分布」に支配されているようです。ベキ分布:リンク集」も参照してください。


[お知らせ] 下記を出版しました。PCやスマホで使える本格的な数式処理ソフトMaximaの解説書です。 手持ちのスマホやPCで、文字式や微分積分の計算、方程式の解法、関数グラフの確認ができます。計算問題やグラフ問題の解答を作るときに非常に重宝します。フリーソフトなので一度試してみてください。 コマンドはAndroid版もPC版も同一なので、 iPhoneを所持している方はPC版のコマンドレファレンスとして利用することができます。

いつでも・どこでも・スマホで数学!
PC・スマホに無料インストールできる数式処理ソフトMaximaの解説書です。
試し読み 森北出版 amazon 楽天 honto 7net 紀伊國屋電子版読書メーター

■「emath」とは?
 emathパッケージは,中学校や高校で数学プリントを作る際に必要な記号や 環境を集めたLaTeXのマクロ集で,tDBこと大熊一弘氏により作成されたものです. 日本の数学の教科書の記号とTeXの標準の記号は微妙に異なったりしていますが, そのような部分の修正が施されています.たとえば, 中学数学では相似の記号が使われますが,この記号はTeXのコマンドにはありません. また,TeXの標準書式では記述が面倒な箇所を, 簡単な記述で済ませられるようなコマンドが用意されています.

 さらには,TeXを使って数学プリントを作成するときに, 「この線はもっと太くしたい」「この矢印の角度はもうちょっと広げたい」など, 「こういう風にできれば良いな〜」と思うことが全て網羅されているといっても 過言ではありません.もともとは, ニフティ(現在の、@Nifty)のTeXに関するフォーラム(FTEX)の中で 出されたいろいろな意見・議論・要望を組み入れながら作成されてきたもので, 長い歴史があります。 現在でも、emath掲示板でのやりとりの中で進化し続けています. 著者自身は、20年以上も前の知識で使用していたりするので, ときおりemathをバージョンアップすると, 新たなドキュメントのページ数の多さに驚いたことがあります.

 ダウンロードしたemathを解凍すると, 3つのフォルダー[sty][doc][pdf]が生成され, それぞれにファイルが納められています. 必要とするファイルは[sty]にあるファイルです.まるごと, スタイルファイルが納められているフォルダーの適当な箇所にコピーするか 移動しておきます.私の場合は, TeXは[pTeX]というフォルダーに納めており,emathのファイルは 「pTeX\share\texmf-local\tex\platex\emath」に配置しています. 納めた後は,ファイルの場所を認識させるために「\pTeX\bin\mktexlsr.exe」 を実行しています.

 emathに関するドキュメントは[pdf]フォルダーに格納されています. そこには全部で7つのサブフォルダーがあり, その中に具体的なpdfファイルが納められています. 通常使用で目を通しておくべきものは, [emath]に入っているsample.pdf(155頁)と, [emathP]に入っているsampleP.pdf(280頁)です. 他にも5種類のドキュメントがありますが, それらはemathを使用しているうちに,必要に応じて利用すればよいでしょう. 最初は,どんな内容なのか目次をさらっと眺めておくだけでよいと思います.
 「さらっと眺める」とはいっても、上記の2つのドキュメントだけで 400頁以上になります。最初から全部を読む必要はありません。 まず、sample.pdfとsampleP.pdfの目次部分だけを見て、 どのようなことが可能になるかを把握してください。 その後で、自分の必要とする機能の箇所をしっかり読めばよいと思います.

2つのドキュメントファイルを個別に開くのが面倒な場合は, emathWikiの「使用PDF」の箇所から閲覧することができます.ただし, emathをダウンロードしたときに添付されるドキュメントファイルと, 必ずしも内容が一致しているわけではないようなので注意してください. 通常使用の場合は,emathとemathpの2つのドキュメントだけで十分だと思います. さらに,実際に利用するのは,その中に書かれている中の一部のコマンドです.

emathWiki: 「emath」の情報がまとめられています. 左側メニューの内容は,下記の通りです.
  • 「使用PDF」の箇所では, emathに同包される主なドキュメントを、 ダウンロードすることなく閲覧することができます.
    • 「sample.pdf」では,いろいろな記号の説明、 図のまわりへのテキストの回り込み(mawarikomi環境), 番号付け(enumerate環境,edaenumerate環境)に関する細かい設定の仕方, そして、 itemizeやdescriptionなどのlist環境での行間の調整の仕方等について解説されています.
    • 「sampleP.pdf」では,picture環境支援マクロの解説がなされており, 図形や関数のグラフに関することに加えて, 作表に関する細かい解説がなされています.
      ただし,増減表に関するいろいろな設定が, 以前はemathPで定義された「hyou」を使用していましたが, emathWikiでは「Obsolete」と表示されます. 現在は使われておらず「array」に統一されたようです.
    • 「samplePp.pdf」は,関数のグラフ描画でPerlを使用する場合のドキュメントです. 関数の定義が複雑になってくると, それを定義するのも煩雑であり,さらにその処理にも時間がかかります.そこで, その関数に関する処理部分をPerlに任せてしまおうということです. 当然ながら,最初にPerlをインストールしておく必要があるので, 「Perlとは何か」を含めて,あるレベル以上の知識が必要です. それをインストールできた場合について, Perlとの連携の仕方や,Perlを利用する場合のコマンドについて解説されています.
      emathでの関数グラフに慣れてきて,もっと複雑な関数のグラを描きたい, あるいはコンパイルスピードに不満を感じてきたようなときに挑戦するとよいでしょう. Perlとの連携は,すでに2005年にはなされていますが, 私自身はPerlは使用しないでemathを利用してきました.
    • 「samplPs.pdf」は,図形をいったんepsファイルに落として, それを利用するやり方について解説されています. 新たにpszahyou環境が用意され, その中で図形はepsファイルとして書き出され, 文字の配置はpicture環境の中で行われます.
       「eps」として保存されることにありがたみを感じ取ることができるようであれば, じっくりと眺めてみるとよいでしょう.
    • 私は長年emathのお世話になってきましたが, perlを組み込むことなく,通常のemathの使用だけで済んでいます. 関数定義も、せいぜい2行未満で済んでおり, 後半の2つのドキュメント(samplePp, samplPs)は読んだことがありませんでした. このページを作成するにあたって初めて目を通しています.
    • ただし,以上の記述は,それらの機能が不要であることを述べているわけでは ありません.TeXの初心者にとっては,かなりハードルが高いだろうというだけです. 「パソコンに強い」方は,Perlやepsを駆使すれば,より快適なemath生活を 送ることができるでしょう.
  • 「emath講座」では,いろいろな数学の場面で必要となるemathのコマンドについて, LaTeXの書式も示しながら解説されています. TeXのソースコードと出力がつねに併記されているので, 自分の思うような出力を得るにはどのように記述すべきかが分かりやすいです。
  • 「五十音順」では, emathのコマンドが五十音順に整理されて登録されています. この箇所をみると,自分の知りたい使い方が探しやすいと思います.
  • 「アルファベット順」では, emathのコマンドがアルファベット順に整理されて登録されています. コマンドを覚えていて,その使い方を確認するときに利用すると便利だと思います.
  • 「中学校数学」や「高校数学」の箇所では, それぞれの学習項目に応じて,使用するコマンドの書式や使用例が登録されています.
▲戻る(トップメニュー)

■プリントの判型指定
おそらく,このページを閲覧される方は数学教員の方が多いと思われ, 作成したい教材プリントのイメージはお持ちと思われます. プリントの判型は,B5,A4, B4のいずれかの場合が多いと思われます. B5やA4の場合は,通常のTeX文書の作成方法にならえばよいでしょう.

私の場合は,B4横置きの2段組で作成しています. 具体例は,こちらを参照してください. 横幅が広いので,3段組や4段組にすることもできます. その場合のやり方は,(私の場合は) [share]>[texma-local]>[doc]>[emath]>[b4yoko3]の箇所に あるファイルをみてください. 2段組から4段組までのサンプルファイルが置かれており, 具体例も記載されています. そっくり借用して問題を書き換えれば,数学プリントができあがります. B4縦置きにしたい場合は,(私の場合は) [share]>[texmf-local]>[tex]>[latex]>[emath0501] にあるb4tate2.styという縦置き用のスタイルファイルを利用するとよいでしょう.
 なお,以下の例では \usepackage で指定するスタイルファイルは emathP だけです. 他に必要とするファイルは自動的に読み込まれます.


■描画範囲の設定
図形やグラフを描くにはzahyou環境を利用するのがよいでしょう. zahyou\(*\)環境では座標軸が描画されません. デフォルトでは単位長(\unitlength)が1ptになっています. 1ptは0.35mm,1mmは2.83ptなので,単位をptのまま使用して, \(\small 0\le x\le 35{\rm mm},~0\le y\le 35{\rm mm}\) の範囲を指定するには, 次のように指定します.図は出力結果です. プリアンブルでは,
\documentclass[11pt,a4paper]{jsarticle}
\usepackage{emathP}
としているだけです. 以後では,document の内部のみ示します.
  • \begin{document} \begin{zahyou} (0, 100)(0, 100) \end{zahyou} \end{document}
ptを単位とすると実際の長さとの感覚が取りにくいので, この単位長の単位をmmに変更します. emathでは「\unitlength=10mm」とすることが推奨されています. この指定で同じ範囲を描画するには,zahyou環境のオプションとして ulを利用して次のように指定します.同じ図が表示されます.
  • \begin{zahyou}[ul=10mm] (0,3.5)(0,3.5) \end{zahyou}
この「ul」の値を大きくすると図が拡大され、小さくすると図が縮小されます。 下図では半分の「ul=5mm」としています。図の大きさが半分になっています。
  • \begin{zahyou}[ul=5mm] (0,3.5)(0,3.5) \end{zahyou}
指定する範囲は任意でかまいません。 範囲を大きくすると図も大きくなるので、 その場合はulの値で調整します。
▲戻る(トップメニュー)

■多項式グラフの描画

さっそくグラフを描画させてみましょう.たとえば, 区間 \(\small [a, b]\) で \(y=\small x^2-2x-3\) のような多項式で表される関数のグラフを 描画させるには,\Guraph{1, -2, -3}{a}{b} とします. 当然,\(\small a, b\) は具体的な値である必要があります. 「\begin{zahyou}(a,b)(c,d)」の箇所で定める範囲は, \xmin=a, \xmax=b, \ymin=c, \ymax=d に保持されます. したがって,横軸の左端や右端の値は\xmin,\xmax を利用することもできますが, 関数の値が大きいとグラフが描画範囲を越えてしまう場合があります.

この関数では \(\small [-2, 4]\) の区間での値域が \(\small [-4, 5]\) なので, 余裕をみて次のようにします.ulの値は、コンパイル後のグラフの大きさを 見ながら決めています.

  • \begin{zahyou}[ul=5mm] (-3, 5)(-5, 6) \Gurafu{1, -2, -3}{-2}{4} \end{zahyou}
このグラフをみると,幾つかのことが気になってきます.
  1. 座標軸を消したい.
  2. 座標軸に目盛りを入れたい.
  3. 座標平面に格子模様を入れたい.
  4. 座標軸名を別な文字に変更したい.
  5. グラフを太線や点線で表示したい.
  6. 原点を表す記号「O」を第4象限に配置したい.
  7. 軸との共有点に数値を書き入れたい.
  8. 頂点の座標を書き込みたい.
emathでは,このような「〜したい」という要望は「ことごとく叶えられている」 といっても言い過ぎではありません. 以下,順に見ていきましょう.

1. 座標軸を消したい
座標軸を表示しないようにするのは簡単で,「zahyou」を「zahyou\(*\)」とするだけです.
  • \begin{zahyou*}[ul=5mm] (-3, 5)(-5, 6) \Gurafu{1, -2, -3}{-2}{4} \end{zahyou*}

2.目盛りを入れたい
座標軸に目盛りを入れるには, \zahyouMemori というコマンドを利用します. TeXは大文字と小文字を区別するので, 注意して入力してください.
  • \begin{zahyou}[ul=5mm] (-3, 5)(-5, 6) \zahyouMemori \Gurafu{1, -2, -3}{-2}{4} \end{zahyou}
\zahyouMemori にはいろいろなオプションがあります. 以下では目盛り幅を2としていますが, 軸によって目盛りの幅を変えることもできます. 以下では,HTML書式との関係で「<, >」は全角で書いていますが, 実際に入力するときは半角にしてください. 詳しくはsampleP.pdfを見てください.
  • \begin{zahyou}[ul=5mm] (-3, 5)(-5, 6) \zahyouMemori<2> \Gurafu{1, -2, -3}{-2}{4} \end{zahyou}

3. 格子を入れたい
座標平面に格子模様を入れるには,\zahyouMomori[g] として グリッド線を入れる指定をします.
  • \begin{zahyou}[ul=5mm] (-3, 5)(-5, 6) \zahyouMemori[g]<2> \Gurafu{1, -2, -3}{-2}{4} \end{zahyou}
\zahyouMemori には多数のオプションがあります. マニュアルをよく見ると, 破線ではなく実線にしたり, 線を描かないで格子点に記号を付したり, 目盛りを消すこともできます. 下記では,[o]により格子点にドットを配置し, [n]により目盛りを消しています.目盛りは 1 刻みです. この順番も重要なので気をつけてください.
  • \begin{zahyou}[ul=5mm] (-3, 5)(-5, 6) \zahyouMemori[o][n] \Gurafu{1, -2, -3}{-2}{4} \end{zahyou}

4. 軸名の文字を変えたい
座標軸に付される文字は, ulと同じ[]内で指定することができます. \(\small x\) 軸の名前は yokozikukigou, \(\small y\) 軸の名前は tatezikukigou により変更することができます. たとえば,\(\small s=t^2-2t-3\) のグラフの場合は, 次のように指定します.
  • \begin{zahyou} [ul=5mm, yokozikukigou=$t$, tatezikukigou=$s$] (-3, 5)(-5, 6) \Gurafu{1, -2, -3}{-2}{4} \end{zahyou}

▲戻る(トップメニュー)

5. 太線で表示したい
複数のグラフを描画するとき,特定のグラフだけ太線で強調したい場合があります. そのようなときは,中括弧{ }で囲んで\thicklines というコマンドを利用します. 中括弧で囲まないと,座標軸も太線になるので注意してください. または,グラフ描画のコマンド \Gurafu\Fx{a}{b} の前後を, \thicklines と \thinlines で囲みます.
  • \begin{zahyou} [ul=5mm] (-3, 5)(-5, 6) \zahyouMemori[o][n] {\thicklines \Gurafu{1, -2, -3}{-2}{4} } % または, % \thicklines % \Gurafu{1, -2, -3}{-2}{4} % \thinlines \end{zahyou}
グラフの一部を点線で表示することもできます. たとえば,\(\small x\) 軸より上にある部分を点線で表示するには 次のようにします. [n] の \(\small n\) の値は点の個数です.その値は, コンパイル結果を見ながら調整してください.
  • \begin{zahyou} [ul=5mm] (-3, 5)(-5, 6) \Gurafu{1, -2, -3}{-1}{3} \Gurafu[30]{1, -2, -3}{-2}{-1} \Gurafu[30]{1, -2, -3}{3}{4} \end{zahyou}

6. 原点記号の場所を変えたい
グラフが原点記号「O」に重なってしまう場合は, ul と同じオプションを利用して原点記号を移動することができます. それを行うのは,字句通りの gentenhaiti です. デフォルトの指定は [sw] です. 方向は東西南北(ewsn)の組合せで指定します. swは「南西」を意味します. 例えば,第4象限に配置するには南東として [se] を中括弧で囲んで指定します.
  • \begin{zahyou} [ul=5mm, gentenhaiti={[se]}] (-3, 5)(-5, 6) \zahyouMemori[o][n] {\thicklines \Gurafu{1, -2, -3}{-2}{4} } \end{zahyou}

7. 交点に数値を入れたい
グラフと座標軸との交点に数値を入れるには, \Put というコマンドを利用します. 点 \(\small (-1, 0)\) と 点 \(\small (3, 0)\) に数値を入れるには 次のようにします.[s] を指定して点の真下に配置するとグラフと重なるので, 南西方向(sw)と南東方向(se)にずらして配置しています. この[]部分を省くと,指定した点の位置に配置されます.
  • \begin{zahyou} [ul=5mm, gentenhaiti={[se]}] (-3, 5)(-5, 6) \zahyouMemori[o][n] \Put{(-1,0)}[sw]{-1} \Put{(-1,0)}[se]{3} \Gurafu{1, -2, -3}{-2}{4} \end{zahyou}

8. 頂点の座標を書き込みたい
座標軸との共有点ではない箇所の座標を書き入れるときも \Put を利用します. たとえば,頂点の座標 \(\small (1, -4)\) を書き入れるには 次のようにします.数式部分は$で囲みます.
  • \begin{zahyou} [ul=5mm, gentenhaiti={[se]}] (-3, 5)(-5, 6) \Put{(1,-4)}[s]{$(1,-4)$} \Gurafu{1, -2, -3}{-2}{4} \end{zahyou}
ただし,このような表示だと,どの点の座標なのかが明確ではありません. グラフ上の点を強調したい場合は,その箇所に黒丸を配置することができます. そのコマンドは,字句通りの \Kuromaru です. \Kuromaru[1.5pt]{$\small (1,-4)$} などとして, []内の数値で黒丸の大きさを調整することもできます.
  • \begin{zahyou} [ul=5mm, gentenhaiti={[se]}] (-3, 5)(-5, 6) \Put{(1,-4)}[s]{$(1,-4)$} \Kuromaru{(1,-4)} \Gurafu{1, -2, -3}{-2}{4} \end{zahyou}
点の座標は,その点に \(\small (a, b)\) を表記するのではなく, その点から座標軸に垂線を下ろして座標軸の座標で表記することもできます. \Put コマンドを利用すると,その点から座標軸に垂線を下ろすことができます. たとえば,次のようにします. 「syaei=xy」だけで軸上に数値が書き入れられるので, 最後の中括弧部分は空欄にします.
  • \begin{zahyou} [ul=5mm, gentenhaiti={[se]}] (-3, 5)(-5, 6) \Put{(1,-4)}[syaei=xy]{} \Kuromaru{(1,-4)} \Gurafu{1, -2, -3}{-2}{4} \end{zahyou}
具体的な座標ではなく,\(\small (a,b)\) として \(\small a\) の方だけを 書き入れたいときは,次のようにします. \(\small y\) 軸のラベルは「ylabel」です.いずれも$で囲う必要はありません.
  • \begin{zahyou} [ul=5mm](-3, 5)(-5, 6) \Put{(1,-4)}[syaei=x, xlabel=a]{} \Kuromaru{(1,-4)} \Gurafu{1, -2, -3}{-2}{4} \end{zahyou}
▲戻る(トップメニュー)

■一般の関数グラフの描画

四則計算と主要な関数
多項式で表される関数は, その係数を指定するだけでグラフを描画することができますが, 一般の関数の場合は関数の式を定義する必要があります. それを定義するためには,四則計算,主要な初等関数,ならびに主要な 数学定数に関するコマンドについて知っておく必要があります.

emathでの四則計算は,「\command\x\y\z」という書式になります. 四則計算は,2つの引数(入力)をもとに計算して1つの結果(出力)を返します. \x, \y が入力変数で \z が出力変数です. \x, \y により計算される四則計算の結果を \z とするには, 右側のようなコマンドで行うことができます.

和 \(\small x+y\) \Add\x\y\z
差 \(\small x-y\) \Sub\x\y\z
積 \(\small x\cdot y\) \Mul\x\y\z
商 \(\small x/y\) \Div\x\y\z

たとえば,\(\small x\cdot y/(x+y)\) の結果を \(\small z\) に保存するには, \(\small x, y\) の値が \x, \y に保存されている場合は,
\Mul\x\y\z\Add\x\y\w\Div\z\w\z
とすることになります. これは,プログラミング的な書式で, \(\small z=x\cdot y,\, w=x+y,\, z=z/w\) としていることになります. つまり,このような関数の定義を具体的に記述するには, プログラミングでの計算に関する感覚が必要になります. その感覚が備わっていない場合は,最初にプログラミングでの計算書式について 把握しておくことが必要かもしれません.

よく利用される関数として,次の関数についてはコマンドが用意されています. 指数関数と対数関数の底は,いずれもネイピア数です. 下記の右側の書式で,\yには関数の値が保存されます. 記号は,必ずしも\x, \yである必要はありません. 1番目の記号\xが入力,2番目の記号\yが出力です.

平方根 \(\small \sqrt{x}\)\Heihoukon\x\y
指数関数 \(\small \exp(x)\)\Exp\x\y
対数関数 \(\small \log(x)\) \Log\x\y
正弦関数 \(\small \sin(x)\) \Sin\x\y
余弦関数 \(\small \cos(x)\) \Cos\x\y
正接関数 \(\small \tan(x)\) \Tan\x\y

べき乗 \(\small a^b\) は, \(\small a^b=e^{\log{a^b}}=\exp(b\log(a))\) により定義できます.また, このような関数を扱うときは,\(\small \pi, e\) などの定数を扱う必要もあります.

円周率 \(\small \pi\) \Pie
ネイピア数 \(\small e\) \Napier

さらに,これらの定数から計算されるいろいろな値も,次のように定義されています. 他に,\(\small 11\pi/6\) まで定義されています.詳細はsampleP.pdfを 見てください。

\(\small 2\pi\) \Pii
\(\small \pi/2\) \Pih
\(\small \pi/4\) \Piq
\(\small \pi/6\) \Pis
\(\small \pi/3\) \Pit
\(\small e^2\) \Napierii
\(\small 1/e\) \Napiermi



関数の定義
以上をもとに,たとえば関数 \(\small f(x)=\dfrac{2x}{x^2+1}\) を 定義するには次のようにします.分かりやすいよう途中に空白を挟んでいますが, 実際には続けて入力します.

\def\Fx#1#2{ \Mul{2}#1\x \Mul#1#1\y \Add\y{1}\y \Div\x\y#2}

これは,関数 \Fx(#1) の値を #2 とするとき,\Fx(#1) を中括弧内の式で 定義する,ということです.この #1, #2 は必須です. \(\small f(x)\) の \(\small x\) には #1 が入るので, 中括弧内では次のような計算をしていることになります. \x, \y, \z などは,適当な文字でかまいません.

\(\small 2x\) を \x とする \Mul{2}#1\x
\(\small x^2=x\cdot x\) を \y とする \Mul#1#1\y
\(\small y+1\) を再度 \y とする \Add\y{1}\y
\x/\y を #2 とする \Div\x\y#2

(注) Perlを使用すると, この定義は \def\Fx{2\(\small *\)X/(X\(\small **\)2+1)} とするだけです. 極めて簡単に行うことができますが,そのような環境を構築するまでに かなりの時間を要するかもしれません.

同じ書式で多項式関数 \(\small f(x)=x^2-2x-3\) を定義するには,

\def\Fx#1#2{ \Mul#1#1\x \Mul{2}#1\y \Sub\x\y\y \Sub\y{3}#2}

とすることになります.ただし,多項式関数の場合は,実際には 次のような形で簡単に定義することができます.

\def\Fx{1,-2,-3}


▲戻る(トップメニュー)

一般関数のグラフ
多項式関数のグラフ描画は \Gurafu{1,-2,-3}{a}{b} のような書式でしたが, 一般の関数の場合は,\Fx を定義して \yGurafu\Fx{a}{b} のような 書式になります. 下図は,\(\small f(x)=\dfrac{2x}{x^2+1}\) のグラフです.
  • \begin{zahyou}[ul=8mm, gentenhaiti={[se]}] (-4, 4)(-2, 2) \zahyouMemori[g][n] \def\Fx#1#2{ \Mul{2}#1\x\Mul#1#1\y \Add\y{1}\y\Div\x\y#2} \yGurafu\Fx\xmin\xmax \end{zahyou}
\xmin, \xmax は,描画範囲の左端と右端の値です. 中括弧で囲う必要はありません. 同様に,描画範囲の下端と上端の値は, それぞれ \ymin, \ymax に納められています.

このような関数の性質上やむを得ませんが,どうしても横長になってしまいます. そのようなとき,縦軸や横軸のスケールを変更することができます. ul と同じ箇所で,xscale や yscale で調整します. たとえば,横軸の長さを 0.8倍にするには,xscale=0.8 と指定します.

  • \begin{zahyou}[ul=8mm, gentenhaiti={[se]}, xscale=0.8] (-4, 4)(-2, 2) \zahyouMemori[g][n] \def\Fx#1#2{ \Mul{2}#1\x\Mul#1#1\y \Add\y{1}\y\Div\x\y#2} \yGurafu\Fx\xmin\xmax \end{zahyou}


漸近線を持つ関数のグラフ
関数 \(\small y=\dfrac{1}{x}\) のような漸近線を持つ関数の場合は, グラフを描画するときの範囲に気をつける必要があります. 定義されていない箇所で2つに分けてグラフを描画します.
  • \begin{zahyou}[ul=6mm] (-4, 4)(-4, 4) \zahyouMemori[g][n] \def\Fx#1#2{\Div{1}#1#2} \yGurafu\Fx\xmin{-0.01} \yGurafu\Fx{0.01}\xmax \end{zahyou}


逆関数のグラフ
関数 \(\small y=f(x)\) の逆関数は,\(\small x=f(y)\) を \(\small y\) に ついて解いたものです.\Fx が定義されていれば, \yGurafu\Fx{a}{b} により \(\small y=f(x)\) のグラフが描画されますが, \(\small x=f(y)\) のグラフは \xGurafu\Fx{c}{d} により描画することが できます.下図は,\(\small x=\dfrac{2y}{y^2+1}\) のグラフを 描画したものです.

変更されている箇所に注意してください. 変更したのは,描画範囲を逆にして, \yGurafu を \xGurafu にして, \xmin, \xmax を \ymin, \ymax に変更しただけです. 一価関数のグラフとして表示するには, \(\small y\) の描画範囲を \xGurafu\Fx{0}\ymax などに変更すればよいでしょう.

  • \begin{zahyou}[ul=8mm, gentenhaiti={[se]}] (-2, 2)(-4, 4) \zahyouMemori[g][n] \def\Fx#1#2{ \Mul{2}#1\x\Mul#1#1\y \Add\y{1}\y\Div\x\y#2} \xGurafu\Fx\ymin\ymax \end{zahyou}



媒介変数表示による関数のグラフ
関数が,\(\small x=f(t),\, y=g(t)\) のように媒介変数表示で表されている 場合は,2つの関数を\Ft, \Gt などに定義しておいてから, \bGurafu\Ft\Gt{a}{b} とします. たとえば,半径1の円が転がることにより得られる サイクロイド \(\small x=t-\sin(t), \, y=1-\cos(t)\) は, 次のようになります.
  • \begin{zahyou}[ul=8mm] (-1, 8)(-1, 3) \Put{(\Pii,0)}[s]{$2\pi$} \Put{(\Pie,2)}[syaei=xy, xlabel=\pi]{} \def\Ft#1#2{ \Sin#1\x\Sub#1\x#2} \def\Gt#1#2{ \Cos#1\x\Sub{1}\x#2} \bGurafu\Ft\Gt{-2}{9} \end{zahyou}
\Pii や \Pie には,\(\small 2\pi\) や \(\small \pi\) の具体的な値が小数で定義されているので, 「syaei=xy」だけだと 3.14159265 が書き込まれます. このようなとき,各軸に書き込む値を xlabel や ylabel で別に 定義することができます.数式も定義することができますが, $記号は不要です.その値を配置する場所も,xpos や ypos を 利用して調整することができます.sampleP.pdfを参照してください. また,グラフを描画するときの範囲には気をつけてください. 媒介変数 \(\small t\) の範囲で指定する必要があります. 上図では,\(\small -2\le t\le 9\) として描画しています.

極座標で表された関数のグラフ
極方程式 \(\small r=f(\theta)\) で表された関数のグラフも描くことが できます.計算式が \Ft に定義済みの場合は, \rGurafu\Ft{a}{b} とするだけです. \(\small \theta\) という文字を必要とはしません. 例えば,三葉線 \(\small r=4\sin(3\theta)\) は次のようになります.
  • \begin{zahyou}[ul=7mm] (-4, 4)(-4, 4) \zahyouMemori[g][n] \def\Ft#1#2{ \Mul{3}#1\x\Sin\x\y \Mul{4}\y#2} \rGurafu\Ft{0}{\Pii} \end{zahyou}

▲戻る(トップメニュー)

■塗りつぶし
emathには,グラフで囲まれる部分を塗りつぶす機能もあります. たとえば,関数 \(\small y=x^2-2x-3\) のグラフと \(\small x\) 軸とで 囲まれる部分を塗りつぶすコマンドは,\Fx を定義済みとすると \Nuri\Fx{a}{b} です.
  • \begin{zahyou}[ul=5mm, gentenhaiti={[se]}] (-3, 5)(-5, 6) \def\Fx{1,-2,-3} \Nuri\Fx{-1}{3} \end{zahyou}
このコマンド \Nuri\Fx{a}{b} は,多項式で表される関数 \(\small y=f(x)\) のグラフと, 2点 \(\small (a, f(a)),~(b, f(b))\) を結ぶ直線(弦)で囲まれる部分を 塗りつぶします.この例では,その2点が \(\small x\) 軸上にあるので, \(\small x\) 軸の下側が塗りつぶされています. 塗りつぶし部分だけが表示され,グラフは表示されません. したがって,グラフの全体像も表示するには, グラフ描画を行う \Gurafu と併用する必要があります.
多項式ではない一般の関数の場合の塗りつぶしは,\yNuri\Fx{a}{b} です.
  • \begin{zahyou}[ul=5mm, gentenhaiti={[se]}] (-3, 5)(-5, 6) \def\Fx{1,-2,-3} \Gurafu\Fx{-2}{4} \Nuri\Fx{-1}{3} \end{zahyou}
これを紙に印刷すると,塗りつぶし部分について希望するような濃度が 得られないかもしれません.塗りつぶしの濃度は, \Nuri[n]\Fx{a}{b} として \(\small n\) の値で調整することができます. デフォルトは n=0.5 になっており,n=1 とすると真っ黒に塗りつぶされます.

紙に印刷して配布するときは, 一色での塗りつぶしではなく斜線を引く形がよいでしょう. 斜線を引くコマンドは,\Nuri\(*\)[d]\Fx{a}{b} です. \(\small d\) には,斜線の角度を度数法で入れます. たとえば,\(\small 60°\) の斜線を引くと次のようになります.

  • \begin{zahyou}[ul=5mm, gentenhaiti={[se]}] (-3, 5)(-5, 6) \def\Fx{1,-2,-3} \Gurafu\Fx{-2}{4} \Nuri*[60]\Fx{-1}{3} \end{zahyou}

今度は,一般の関数の場合を試してみましょう. 標準正規分布の右側上位5%点部分を塗りつぶしてみます. \Fxを \(\small \frac1{\sqrt{2\pi}}\exp(-x^2/2)\) ,\Gx を 0 に定義して, 2つの関数の間の塗りつぶしを行う「\yNurii」を利用して 次のようにします.
  • \begin{zahyou} [ul=12mm,yscale=6] (-.3,3.5)(-.08,0.25)\small \def\Fx#1#2{\Mul{2}\Pie\x \Div{1}\x\x\Mul#1#1\y \Div\y{-2}\y \Exp\y\y\Mul\x\y#2} \def\Gx#1#2{\Mul#1{0}#2} \yGurafu\Fx{-.3}{3} \Put{(1.96,0.024)}[syaei=x]{} \def\P{1.96}\def\Q{3} \yNurii\Fx\Gx\P\Q \end{zahyou}
上記では,範囲を指定する小数の値を, あらかじめ文字(\P, \Q)に割り当てています. 直接「\yNurii\Fx\Gx{1.96}{3}」とすると, 「inaccessible」というエラーが生じます. 範囲などを小数で指定してこのようなエラーが生じるときは, その数値をあらかじめ文字に割り当てて利用すると上手くいくようです.

同様にして, 2つの多項式関数のグラフ,一般の関数のグラフ,媒介変数表示の場合など, それぞれの場合のコマンドが用意されています. 2つの関数 \Fx, \Gx を定義済みとするとき,一色での塗りつぶしに関する 主なコマンドは次のようなものです.[n] の部分は省略することができます. 媒介変数表示や極座標の場合も, その曲線と指定された2つの値で定まる点を通る弦とで囲まれた部分が 塗りつぶされます.2つの点が一致すると閉曲線になるので, その場合は閉曲線の内部が塗りつぶされます. また,媒介変数は2つの関数で1つのグラフになるので, 「\bNurii」ではなく「\bNuri」です.
斜線塗りにするには,それぞれ\Nurii\(*\)[d]\Fx\Gx{a}{b} などのように「\(*\)」をつけます. いずれも,詳しくは sampleP.pdfを見てください.

\Nurii[n]\Fx\Gx{a}{b} 2つの多項式関数
\yNuri[n]\Fx{a}{b} 一般の関数と弦
\yNurii[n]\Fx\Gx{a}{b} 2つの一般関数
\xNuri[n]\Fy{c}{d} x=f(y)と弦
\xNurii[n]\Fy\Gy{c}{d} x=f(y), x=g(y)
\bNuri[n]\Ft\Gt{a}{b} 媒介変数表示
\rNuri[n]\Ft{a}{b} 極座標

▲戻る(トップメニュー)

■平面図形
関数のグラフではなく,三角形や円などの平面図形を描くときも zahyou環境を 利用することができます. 以下では zahyou環境での作成方法について解説し, 座標軸を残した図で示します. zahyou を zahyou\(*\) に変更すれば座標軸や原点記号は描画されません.

点と線分
平面図形の基本要素は「点」です. たとえば,点 P\(\small (a,b)\) は,\def\P{(a,b)} により定義することができます. 定義した後は,その点は \P だけで参照することができます.

複数の点を線で結ぶには,\Drawline{ } を利用します. 3つの点 \A, \B, \C が定義済みとすると, それらの点を線で結ぶには,\Drawline{\A\B\C} とします. たとえば,3つの点 A(-4,-4), B(3,-2), C(1,4) を線で 結んで三角形を描くには次のようにします.

点の名前をつけるのが面倒なときは, 座標を続けて書いて \Drawline{(-4,-4)(3,-2)(1,4)(-4,-4)}とすることもできます. 点の個数は何個でもかまいません.

  • \begin{zahyou}[ul=5mm] (-5, 5)(-5, 5) \def\A{(-4,-4)} \def\B{(3,-2)} \def\C{(1,4)} \Drawline{\A\B\C\A} \end{zahyou}
上図では点を定義しましたが,その点の名前は描かれていません. A, B, C という点の名前を残すには,\tenretu を利用します. 複数の点について,点の名前,座標,そして配置場所を一度に 定義することができます. e,w,n,s の1・2文字の組合せで東西南北の8方向を指定することができます. swは南西, seは南東, そしてnは北です.
  • \begin{zahyou}[ul=5mm] (-5, 5)(-5, 5) \tenretu{ A(-4,-4)sw;B(3,-2)se;C(1,4)n} \Drawline{\A\B\C\A} \end{zahyou}
配置した複数の点をまとめて黒丸で強調したい場合は,\kuromaru を使用します. \Kuromaru は1個の点だけの場合に使用します. \tenretu で,点の名前と座標を指定しておいてから \kuromaru を使用すると, 指定した複数の点に黒丸が配置されます. 最初に点列を定義する必要があるので気をつけてください.
  • \begin{zahyou}[ul=5mm] (-5, 5)(-5, 5) \tenretu{ A(-4,-4)sw;B(3,-2)se;C(1,4)n} \kuromaru{\A;\B;\C} \Drawline{\A\B\C\A} \end{zahyou}
線で繋ぐ操作を1回で済ますことができないときは,\Drawlines を利用します. たとえば,上図で,AB, BC, CA をそれぞれ線で結ぶには, \Drawlines{\A\B\; \B\C; \C\A} とします.

実線ではなく破線で結ぶには,\Hasen を利用します. 他に,点線(\Dottedline)や鎖線(\Chainline)で結んだり, 点の代わりに \(\small *\) を用いる結び方もあります. 詳しくは sampleP.pdfを見てください.

  • \begin{zahyou}[ul=5mm] (-5, 5)(-5, 5) \tenretu{ A(-4,-4)sw;B(3,-2)se;C(1,4)n} \kuromaru{\A;\B;\C} \Hasen{\A\B\C\A} \end{zahyou}


直線
線分ではなく直線を描きたい場合のコマンドは, 字句通りの \Tyokusen です. 2点 A, B の座標が \A, \B に定義済みのときは, \Tyokusen\A\B{}{} により,指定された描画領域いっぱに 直線が描かれます.中括弧内は空欄でかまいません. \xmin, \xmax を指定することもできますが, 傾きによっては描画範囲を超えてしまう場合があるので, {}{} で指定するのがよいと思います.
  • \begin{zahyou}[ul=5mm] (-3, 5)(-5, 6) \zahyouMemori[g][n] \tenretu{A(-2,4)ne;B(3,-2)ne} \kuromaru{\A;\B;} \Tyokusen\A\B{}{} \end{zahyou}
直線は,通過する2点を指定するばかりではなく,いろいろな指定の仕方が あります.それぞれについて,そのコマンドが用意されています. 以下では,2点 A, B の座標は \A, \B に, 直線の方向ベクトルの成分は \u に定義済みとします. なお,\(\small d\) には度数法での角度の値を入れます. 描画範囲を,\(\small y\) 座標で指定することもできます. 描画範囲を{}{}と空欄で指定するとエラーになるときは, 具体的な値を入れるか,{}{}を\xmin\xmaxとして指定します. 点線や破線で描画することもできます. sampleP.pdfを参照してください.

通る2点を指定 \Tyokusen\A\B{}{}
通る点と方向ベクトルを指定 \mTyokusen\A\u{}{}
通る点と方向角を度数法で指定 \kTyokusen\A{d}{}{}
\(\small ax+by+c=0\) の係数を指定 \tyokusen{a}{b}{c}{}{}
\(\small y=ax+b\) の係数指定 \Gurafu{a, b}{}{}


矢印
ベクトルを扱うときは,点を矢印で結ぶことになります. 2点 A,B の座標が定義済みのとき,AからBに向かう矢印は \ArrowLine\A\B です.中括弧は付かないので注意してください. \Drawlines のように,まとめて定義することはできません. 矢印先端の鏃(やじり)の形(角度や長さ)を修正したり, 矢印の中間に記号を付すこともできます. 詳しくは sampleP.pdfを見てください.
  • \begin{zahyou}[ul=5mm] (-5, 5)(-5, 5) \zahyouMemori[g][n] \tenretu{ A(-4,-4)sw;B(3,-2)se;C(1,4)n} \kuromaru{\A;\B;\C} \ArrowLine\A\B \ArrowLine\B\C \ArrowLine\C\A \end{zahyou}
\ArrowLine はベクトルの始点と終点を指定する必要がありますが, ベクトルの成分で指定することもできます. たとえば,A(-4, -4),B(3, -2) なので, \(\small \vec{\rm AB}\) の成分は \(\small (7,2)\) です. 成分が \(\small (7,2)\) の矢線は \yasen(7, 2) で表され, 原点を始点とする矢線が描かれます. 始点を点Aにするには, 「原点を始点とする矢線を点Aに置く(\Put)」ことで \(\small \vec{\rm AB}\) が 描かれます.この描き方は,終点を意識することなく, 始点からの方向性を意識するだけで描くことになります. \(\small \vec{\rm BC}\) , \(\small \vec{\rm CA}\) の成分は それぞれ \(\small (-2, 6), (-5, -8)\) なので, \yasen を利用するとそれぞれ以下のように定義することになります.
  • \begin{zahyou}[ul=5mm] (-5, 5)(-5, 5) \zahyouMemori[g][n] \tenretu{ A(-4,-4)sw;B(3,-2)se;C(1,4)n} \kuromaru{\A;\B;\C} \Put\A{\yasen(7,2)} \Put\B{\yasen(-2,6)} \Put\C{\yasen(-5,-8)} \end{zahyou}
矢線の間に \(\small \vec{a}\) などを書き入れることもできます. \yasen<[se]{\beku a}>(7,2) のような形で定義します. (実際の入力では「<, >」は半角です.) \ArrowLine の場合は,\ArrowLine<putstr=[se]{\bekua}>\A\B のような 書式になります. さらに,いずれもその位置を微妙に調整することができます. 詳しくは sampleP.pdfをみてください.
  • \begin{zahyou}[ul=5mm] (-5, 5)(-5, 5) \tenretu{ A(-4,-4)sw;B(3,-2)se;C(1,4)n} \kuromaru{\A;\B;\C} \Put\A{ \yasen<[se]{\beku a}>(7,2)} \Put\B{ \yasen<[ne]{\beku b}>(-2,6)} \Put\C{ \yasen<[nw]{\beku c}>(-5,-8)} \end{zahyou}


▲戻る(トップメニュー)
点 P\(\small (a, b)\) を中心とする半径 \(\small r\) の円は, 点Pを \def\P{(a,b)} により定義しておくと \En\P{r} により描画されます.または, 直接 \En{(a,b)}{r} としてもかまいません. 下図は,点 \((1,2)\) を中心とする半径 2 の円を描画したものです. 分かりやすいように,格子線を入れています. 円周を破線で描くには <hasen=[a][b]> を挟んで \En<hasen=[a][b]>\P{(a,b)} とします. (実際の入力では「<, >」は半角です.) \(\small a\) は破線の長さ,\(\small b\) には破線の間隔を指定します. その値は,コンパイルしながら調整してください.
  • \begin{zahyou}[ul=7mm] (-2, 4)(-1, 5) \zahyouMemori[g][n] \def\P{(1,2)} \En\P{2} \end{zahyou}
円を確定するには中心と半径の他に,中心と円周上の1点を与えたり, 2点を与えて直径の端点とすることでも円が確定します. emath では,そのような場合に対応するコマンドも用意されています. 下記は,直径の端点が与えられた場合のコマンド \EnT を利用したものです.
  • \begin{zahyou}[ul=7mm] (-2, 4)(-1, 5) \zahyouMemori[g][n] \tenretu{A(-1,-1)sw;B(3,2)ne} \kuromaru{\A;\B] \EnT\A\B \end{zahyou}
円周全体ではなく円弧を描くには \Enko を利用し, 中心と半径の他に円弧の開始角と終了角を,それぞれ度数法で指定します. 開始点と終了点を指定することで描くこともできます. 下図は,角を指定して,30°から150°の間の円弧を破線で描いたものです. 破線にするには,<hasen=[a][b]> を挟みます. (実際の入力では「<, >」は半角です.) \(\small a\) は破線の長さ,\(\small b\) には破線の間隔を指定します. その値は,コンパイルしながら調整してください. 点が1個だけのとき,\tenretu では「;」は不要ですが, \kuromaru では「;」をつける必要があるので注意してください. 円弧に配置する点の個数を指定して点線で表示することもできます. 詳しくは sampleP.pdfを見てください.
  • \begin{zahyou}[ul=7mm] (-2, 4)(-1, 5) \zahyouMemori[g][n] \tenretu{P(1,2)s} \kuromaru{\P;} \Enko<hasen=[.6][.8]> \P{2}{30}{150} \end{zahyou}
円弧に矢印をつけるには,<yazirusi=a> を追加します. 逆向きにしたいときは <yazirusi=r>, 両側に矢印をつけたいときは <yazirusi=b> とします. (実際の入力では「<, >」は半角です.) 破線と併用することもできます. 詳しくは sampleP.pdfを見てください.
  • \begin{zahyou}[ul=7mm] (-2, 4)(-1, 5) \zahyouMemori[g][n] \tenretu{P(1,2)s} \kuromaru{\P;} \Enko<yazirusi=a> \P{2}{30}{150} \end{zahyou}
円弧の端点を中心と結ぶと扇形ができます. 扇形を描画するコマンドは,字句通りの \ougigata です. 中心が原点にあるときは,\ougigata{r}{a}{b} です. \(\small r, a, b\) は,半径と扇形の開始角度,終了角度です.
  • \begin{zahyou}[ul=7mm] (-3, 3)(-1, 4) \zahyouMemori[g][n] \ougigata{2}{30}{150} \end{zahyou}
中心が原点ではないときは, 中心とする点に「原点を中心とする扇形を置く(\Put)」というコマンドになります. \ougigata ではなく \yumigata にすると, 扇形の開始点と終了点を通る線分が引かれて弓形が描画されます.
  • \begin{zahyou}[ul=7mm] (-2, 4)(-1, 5) \zahyouMemori[g][n] \tenretu{P(1,2)s} \kuromaru{\P;} \Put\P{ \ougigata{2}{30}{150}} \end{zahyou}
円や扇形の内部を塗りつぶすには \En\(*\), \ougigata\(*\) のように「\(*\)」をつけ, 斜線塗りにしたいときは \En\(**\)[d], \ougigata\(**\)[d] のように「\(**\)」を つけます.\(\small d\) には斜線の角度を度数法で指定します. 下図は,斜線塗りをした場合の図です. 輪郭線を描くため,「\(**\)」のつかないコマンドと併用する必要があります.
  • \begin{zahyou}[ul=7mm] (-2, 4)(-1, 5) \zahyouMemori[g][n] \tenretu{P(1,2)s} \kuromaru{\P;} \Put\P{ \ougigata{2}{30}{150}} \Put\P{ \ougigata**[60]{2}{30}{150}} \end{zahyou}

楕円
楕円についても,円の場合と同様のコマンドがあります. 詳細は sampleP.pdfを見てください.

▲戻る(トップメニュー)

■グラフと図形に関するTips
emathでは,グラフや図形に関して「〜したい」ということが、 ことごとく実現されているといっても過言ではありません。 たとえば,グラフや図形を描くときに内分点や交点の座標を知る必要があるとき, その座標を自分で計算するのはちょっと面倒です. そのようなとき,emathにはそれらの座標を求める機能があります.

内分点の座標
たとえば,3点 A(-4,-4), B(3,-2), C(1,4) が与えられたとき, 辺 AB, BC, CA をそれぞれ \(\small 2:1\) に内分する点を D, E, F として,三角形 DEF を描画する場合を考えてみましょう. 点 A, B, C の座標が \A, \B, \C として定義済みのとき, 点D の座標は \Bunten\A\B{2}{1}\D により求められます.
  • \begin{zahyou}[ul=5mm] (-5, 5)(-5, 5) \zahyouMemori[g][n] \tenretu{ A(-4,-4)sw;B(3,-2)e;C(1,4)ne} \kuromaru{\A;\B;\C} \Drawline{\A\B\C\A} \Bunten\A\B{2}{1}\D \Bunten\B\C{2}{1}\E \Bunten\C\A{2}{1}\F \kuromaru{\D;\E;\F} \Put\D[s]{D} \Put\E[e]{E} \Put\F[w]{F} \Drawline{\D\E\F\D} \end{zahyou}
なお,中括弧を省略して,\Bunten\A\B21\D のようにしてもかまいません. {2}{-1} または {-2}{1} のようにすると,内分ではなく外分になります. また,emathWiki によれば,定義済みの点 D, E, F に名前を付すとき, \tenretu\(**\){D[s];E[e];F[w]} のようにすればよいと書かれていますが, 著者の環境ではエラーになるので \Put を利用して個別に配置しました. \Put\D[s]{D} は,「点\Dの南側[s]に D を置け」というコマンドになります.

2直線の交点
それぞれが2点を通る直線の交点を求めるコマンドは,\LandL です. たとえば,上記の内分点を求める図で,線分 AE と線分 CD の交点を 点P とするには, \LandL\A\E\C\D\P とします.
  • \begin{zahyou}[ul=5mm] (-5, 5)(-5, 5) \zahyouMemori[g][n] (中略) \Put\F[w]{F} \Drawlines{\A\E;\C\D} \LandL\A\E\C\D\P \kuromaru\P \Put\P[se]{P} \end{zahyou}
(中略)の箇所は,内分点座標を求める4〜12行目の箇所と同一です.
2直線の交点を求めるコマンドは,他にも次のようなものがあります. 「l」は小文字のエルです。 なお,\A, \B, \C, \D は点の座標, \u, \v はベクトルの成分として事前に定義済みとし, {d}, {e} は度数法による角度とします.\Pには, これらのコマンドにより求められる交点の座標が入ります.
直線ばかりではなく,円と円,円と直線,楕円と直線,放物線と直線 の交点を求めるコマンドもあります.詳しくは sampleP.pdfを見てください.

  • \LandL\A\B\C\D\P
    2点A, Bを通る直線と,2点C, Dを通る直線の交点
  • \Landl\A\B\C\u\P
    2点A, Bと,点Cと方向ベクトル \(\small \vec{u}\) が与えられた直線の交点
  • \landl\A\u\C\v\P
    点Aと方向ベクトル \(\small \vec{u}\) が与えられた直線と, 点Cと方向ベクトル \(\small \vec{v}\) が与えられた直線との交点
  • \Landk\A\B\C{d}\P
    2点A, Bと,点Cと方向角度が与えられた直線の交点
  • \kandk\A{d}\C{e}\P
    それぞれが点と方向角度が与えられた直線の交点

▲戻る(トップメニュー)

三角形の諸性質
三角形にはいろいろな性質があり, その主要な性質にはコマンドが用意されています。 たとえば,三角形ABCの重心を求めるコマンドは \Zyuusin\A\B\C\G で, \G には重心の座標が入ります.
  • \begin{zahyou}[ul=5mm] (-5, 5)(-5, 5) \zahyouMemori[g][n] \tenretu{ A(-4,-4)sw;B(3,-2)e;C(1,4)ne} \kuromaru{\A;\B;\C} \Drawline{\A\B\C\A} \Zyuusin\A\B\C\G \kuromaru{\G} \Put\G[ne]{G} \Drawlines{\A\G;\B\G;\C\G} \end{zahyou}
三角形については,次のようなコマンドもあります.

  • \Zyuusin\A\B\C\G
    \(\small \triangle\)ABCの重心Gを求める
  • \Gaisin\A\B\C\G
    \(\small \triangle\)ABCの外心Gを求める
  • \Naisin\A\B\C\G
    \(\small \triangle\)ABCの内心Gを求める
  • \Gaisetuen\A\B\C
    \(\small \triangle\)ABCの外接円を描く
  • \Naisetuen\A\B\C
    \(\small \triangle\)ABCの内接円を描く

他に,次のようなものを求めるコマンドも定義されています. 詳しくは,sampleP.pdfを見てください.
  • 頂点から辺に下ろした垂線の足を求める.
  • 頂角の2等分線と対辺との交点を求める.
  • 頂角の外角の2等分線と頂点の対辺の延長線との交点を求める.
  • 正弦定理を満たす外接円の半径を求める.
  • 正弦定理を利用して,頂角の大きさや辺の長さを求める.
  • 余弦定理を利用して,2辺侠角から第3辺を求める.
  • 余弦定理を利用して,3つの辺から角の大きさを求める.
いろいろな記号
平面図形を扱うと,いろいろな記号が出てきます. よく現れる記号には下図のようなものがあります.
  • \begin{zahyou}[ul=5mm] (-5, 5)(-5, 5) \zahyouMemori[g][n] \tenretu{ A(-4,-4)sw;B(3,-2)e;C(1,4)ne} \kuromaru{\A;\B;\C} \Drawline{\A\B\C\A} \Suisen\B\A\C\D \Drawline{\B\D} \kuromaru\D \Put\D[nw]{D} \Tyokkakukigou\C\D\B \HenKo\A\B{$a$} \Kakukigou\B\A\C{$\theta$} \end{zahyou}
それぞれのコマンドは,次のような内容です. 詳しくはsampleP.pdfを見てください.等辺記号や,等角記号もあります.
  • \Suisen\B\A\C\D
    点Bから2点A, Cを通る直線に引いた垂線の足Dの座標を求める.
  • \Tyokkakukigou\C\D\B
    \(\small \angle\)CDB に直角記号を付ける.
  • \HenKo\A\B{$a$}
    辺ABの長さを書き入れる.2点は正回転の順に指定する. \B\Aとすると三角形の内側に記入される. 「Ko」のケイは大文字である.
  • \Kakukigou\B\A\C{$\theta$}
    \(\small \angle\)BACに角記号をつける. 正の回転方向に記号がつけられる. \C\A\Bとすると外角に角記号がつく. 角記号の大きさや書き入れる角の大きさの位置は調整することができます. 二重線にしたり矢印をつけることもできます.
▲戻る(トップメニュー)

■グラフの割り付け
グラフや図形をテキスト文章と横並びに配置するには, mawarikomi環境を使用します. 左側にテキスト,右側にグラフや図を配置することができます. この環境を利用するには,\usepackage に emathMw を追加して \usepackage{emathP, emathMw} とする必要があります. emathMw の詳しい解説は sample.pdf でなされています.

このページの「一般関数のグラフ」の箇所を例に取ります. 下記は,そのTeXのソースコードです. プリアンブル部分は,

\documentclass[11pt,a4paper]{jsarticle}
\usepackage{emathP, emathMw}

としているだけです.

\begin{document} \begin{mawarikomi}{}{ \begin{zahyou}[ul=6mm, gentenhaiti={[se]}] (-4, 4)(-2, 2) \zahyouMemori[g][n] \def\Fx#1#2{ \Mul{2}#1\x\Mul#1#1\y \Add\y{1}\y\Div\x\y#2} \yGurafu\Fx\xmin\xmax \end{zahyou} } 多項式関数のグラフ描画は \verb+\Gurafu{1,-2,-3}{a}{b}+ のような書式でしたが, 一般の関数の場合は,\verb+\Fx+ を定義して \verb+\yGurafu\Fx{a}{b}+ のような書式になります. 右図は, $f(x)=\dfrac{2x}{x^2+1}$ のグラフです. \verb+\xmin, \xmax+ は, 定義域の左端と右端の値です. 中括弧で囲う必要はありません. 同様に,値域の下端と上端の値は, それぞれ \verb+\ymin, \ymax+ に納められています. \end{mawarikomi} \end{document}
上記をタイプセットすると,下記のように表示されます.

つまり,テキストと図が並列で並び, 図の下側へのテキストの回り込みが自動で行われます. 図の箇所に表を配置したり, \includegraphics を利用して画像ファイルを用いることもできます. mawarikomi の書式は, \begin{mawarikomi}{図の横幅}{図} テキスト部分 \end{mawarikomi} となります.図の横幅を省略すると, emathが自動的に計算して適切な横幅に設定します. 基本的には上記の書式ですが,詳しい解説は sample.pdf の後半でなされています. 熟読すると,次のようなことが可能になります.
  • テキストと図の部分の間隔を調整することができる.
  • 図を左側に配置することができる.
  • 図の位置を細かく調整することができる.
  • 図の上部にテキストが流れるようにすることができる.
  • enumerateなどのリスト環境の \item の中でも使用できる.
  • 図や表に \caption をつけることができる.
    その場合は,Fmawarikomi または Tmawarikomi を利用する.
  • 他にも,いろいろなことが可能です.
▲戻る(トップメニュー)

■問題番号の書式
具体的なプリントでenumerate環境を利用して問題を配置するとき, 番号付けの書式を変更したくなる場合があります. その書式は,emathを利用しなくても変更することができます. 例として,enumerateを入れ子にした次の問題を考えます. ここでは,\usepackageにはなにも指定していません.
  • \begin{document} \begin{enumerate} \item 次の計算をせよ. \begin{enumerate} \item $1+1$ \item $2+2$ \item $3+3$ \end{enumerate} \item 次の問いに答えよ. \begin{enumerate} \item これとあれを加えると, それになることを証明せよ. \item それからあれを引くと, これになることを証明せよ. \end{enumerate} \end{enumerate} \end{document}
enumerateを入れ子にすると,デフォルトでは「1. 2.」,「(a) (b)」,「i. ii.」, 「A. B. 」のような順に番号付けがなされます. この番号付けを変更する最も簡単な方法は, \begin{enumerate}[・・・]として,[ ]内で指定することです. たとえば,大問を[1][2]として,小問を(1)(2)とする場合は, 次のように指定します.
  • \begin{document} \begin{enumerate}[{[1]}] \item 次の計算をせよ. \begin{enumerate}[(1)] \item $1+1$ \item $2+2$ \item $3+3$ \end{enumerate} \item 次の問いに答えよ. \begin{enumerate} \item これとあれを加えると, それになることを証明せよ. \item それからあれを引くと, これになることを証明せよ. \end{enumerate} \end{enumerate} \end{document}
大問の指定では[]が続くので,{}で囲う必要があります. [2]とすると,番号付けが[2]から始まります. []のオプションで指定した箇所の番号付けが変更されます. [2]の小問ではその指定を行っていないので, デフォルトのままのアルファベット小文字で表示されます.

この方法は簡単に変更できて便利なのですが, enumerateが出てくる度に指定するのは面倒です. プリアンブルでまとめて指定するには, 番号付けを行っているTeXのコマンドを理解する必要があります.

このような番号付けはカウンター変数で制御されており, 最初のenumerateの番号付けには, カウンターとしてenumi,2番目のenumerateにはenumiiが使われています. そのカウンターの値を数字で表すのかアルファベットで表すのか等は\theenumiに, それを括弧で囲うのかどうか等は\labelenumiに定義されています. デフォルトでは,\theenumiは\arabic{enumi}として数字で定義され, \theenumiiは\alph{enumii}として小文字のアルファベットで定義されています. その書式は,\labelenumiは\theenumiにピリオドを追加して「\theenumi.」として, \labelenumiiは()で囲って「(\theenumii)」として定義されています.

そこで,大問の番号を[1][2]のようにするには,\renewcommandを利用して \labelenumiの定義を次のように再定義します.

\renewcommand{\labelenumi}{[\theenumi]}

番号を四角い枠で囲むには,[\theenumi]を\fbox{\theenumi}に変更します. これをプリアンブルに置くか,または\begin{enumerate}の前に置けば, 大問の番号はすべて[1][2]のようになります. \begin{enumerate}内の最初の\itemの前に置くと, そのenumerate環境だけが[1][2]のようになります. 入れ子になっている2番目のenumerateを(1)(2)のようにするには, 次のようにします.

\renewcommand{\theenumii}{\arabic{enumii}}

なお,アルファベット大文字にするには\Alph{enumii}, 小文字ローマン数字は\roman{enumii},大文字のローマン数字は\Roman{enumii}です.

以下では,最初の番号を四角い枠で囲い, 2番目の番号を(1)(2)のように再定義し, それを\begin{enumerate}の前に置いています. \labelenumiiはデフォルトで括弧で囲うようになっているので, \theenumiiを変更するだけです. また,document内では一度定義しておけば十分です.

  • \begin{document} \renewcommand{\labelenumi} {\fbox{\theenumi}} \renewcommand{\theenumii} {\arabic{enumii}} \begin{enumerate} \item 次の計算をせよ. \begin{enumerate} \item $1+1$ \item $2+2$ \item $3+3$ \end{enumerate} \item 次の問いに答えよ. \begin{enumerate} \item これとあれを加えると, それになることを証明せよ. \item それからあれを引くと, これになることを証明せよ. \end{enumerate} \end{enumerate} \end{document}

▲戻る(トップメニュー)

■問題の配置の仕方
emathのedaenumerate環境を使用すると, 小問を簡単に並列配置にすることができます. その個数は自由に指定することができ, 並列配置の個数を混在させることもできます. この環境を使用するには,\usepackage{emathp, emathEy}を指定します.
最初の小問3つを横並びにするには次のようにします. なお,問題番号の書式については前述のやり方で変更しています. また,<>は実際には半角で入力します.
  • \begin{enumerate} \item 次の計算をせよ. \begin{edaenumerate}<3> \item $1+1$ \item $2+2$ \item $3+3$ \end{edaenumerate} \end{enumerate}
括弧内の数値を変えることで,横に並べる小問の数を指定することができます. 指定が無いときは2個ずつ配置します.最大何個まで並べることができるかは, 自分で試してみるとよいでしょう.

内容によっては,特定の小問だけ横幅が必要なときがあります. そのようなときは,その小問の箇所だけ特別扱いすることができます. たとえば,(1)(2)は横並びにして,(3)は1個だけで配置したいときは 次のようにします.<>は半角で入力します.

  • \begin{enumerate} \item 次の計算をせよ. \begin{edaenumerate} \item $1+1$ \item $2+2$ \item<1> $1+2+3+4+5+6 +7+8+9+10+11+12$ \end{edaenumerate} \end{enumerate}
前半は3個ずつ配置して後半は2個ずつにしたいときは, \begin{edaenumerate}<3>で指定しておいて, 該当する\itemの箇所だけ<2>とします. <>は半角です.

問題の後に説明を加えたいときがあります. enumerate環境を終了して説明を加えた後で, あらためてenumerate環境で別な問題を配置すると, 大問の番号が再び「1」から始まってしまいます.

  • \begin{enumerate} \item 次の計算をせよ. \begin{edaenumerate}<3> \item $1+1$ \item $2+2$ \item $3+3$ \end{edaenumerate} \end{enumerate} \begin{enumerate} \item 次の問いに答えよ. \begin{enumerate} \item これとあれを加えると, それになることを証明せよ. \item それからあれを引くと, これになることを証明せよ. \end{enumerate} \end{enumerate}
(注) 最後の「\end{enumerate}」が枠から外れる理由は不明.修正できませんでした.

このようなときは,2回目のenumerateの内側で\setcounterというコマンドを利用して, 番号付けを行っている大問のカウンターenumiの値を変更します.

  • \begin{enumerate} \item 次の計算をせよ. \begin{edaenumerate}<3> \item $1+1$ \item $2+2$ \item $3+3$ \end{edaenumerate} \end{enumerate} \begin{enumerate} \setcounter{enumi}{1} \item 次の問いに答えよ. \begin{enumerate} \item これとあれを加えると, それになることを証明せよ. \item それからあれを引くと, これになることを証明せよ. \end{enumerate} \end{enumerate}
(注) 最後の「\end{enumerate}」が枠から外れる理由は不明.修正できませんでした.

大問の番号を制御するカウンターenumiは, \begin{enumerate}の度にリセットされて「1」から始まります. そこで,最初の\itemの前にenumiに「1」を代入して 番号が「2」から始まるようにしています. この指定はenumerateの内側で指定します.

ただし,いちいちこの指定を行うのは面倒です. emathでは,このような場合に対応するためEnumerate環境が用意されています. 最初の1字が大文字になり,次のように使用します.

  • \begin{Enumerate} \item 次の計算をせよ. \begin{edaenumerate}<3> \item $1+1$ \item $2+2$ \item $3+3$ \end{edaenumerate} \end{Enumerate} \begin{Enumerate*} \item 次の問いに答えよ. \begin{enumerate} \item これとあれを加えると, それになることを証明せよ. \item それからあれを引くと, これになることを証明せよ. \end{enumerate} \end{Enumerate*}
最初はEnumerateで大問の番号を引き継ぐことを宣言します. その後は,Enumerate\(*\)を利用することで, その直前の番号の続きから番号づけられます. \end{Enumerate}でEnumerate環境を閉じた後では, Enumerate\(*\)環境を何回でも続けることができます.

emathのマニュアルであるsample.pdfの後半では, このedaenumerate環境やEnumerate環境について詳しく解説されています. 熟読すると,次のようなことが可能です. 具体的な利用法はマニュアルを参照してください.
  • 並列にした小問の間に縦線を引く.
  • 小問の一部の番号に*をつける.
  • 番号付けに「アイウ・・・」や「イロハ・・・」を使う.
  • 番号付けをプログラムの行番号のようにする.
  • 大問と小問の間の縦の空白を調整する.
  • 並列にする個数を指定しないでベタに並べる.
  • 並列するとき,最大幅を自動計算して均等幅でベタに並べる.

★とりあえずは, 以上の説明で一通りのことは可能になるのではないかと思われます.
★この解説が,emath を使いこなす上で何かの参考になれば幸いです.
▲戻る(トップメニュー)

copyright