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

in [TeXの部屋]

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

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

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


[御案内] TeXを利用して数学プリントを作成するとき, 「emath」パッケージは必需品というべきです. 詳細なドキュメントが同包されているので, そのドキュメントを見れば使いこなすことができるはずですが, TeXを使い慣れていない場合は, ドキュメントが詳しすぎて全体像を把握しにくいかもしれません.
 そこで,ここでは,TeXを使い始めた方を念頭に, emathを用いた数学プリントの作成方法について解説します. ただし,TeXのインストールはすでになされており,TeXによる通常文書は 作成できるレベルにあることを前提とします.
[注意] このサイトは,「emathc150309」以前のパッケージを もとにした解説です.グラフ描画は「\Gurafu」や「\yGurafu」により 行われますが,これらのコマンドは今では「obsolete」になっており, 「emathc160115」以降のemathではエラーになります. その場合は,\usepackage に「emathOld」も追記してください. 今ではグラフ描画はperl利用が前提であり, 「\YGraph」「\ParamC」「\PolarC」により描画されます.(2022.05.08)

【曲面描画ができる「MePoTeX」】
emath風のコードで立体図形や曲面まで描画できる「MePoTeX」という マクロパッケージがあります。 その解説ページを作成したので参考にしてください。 下記のような図をemathのノリで簡単に作成でき、 パラパラ漫画まで作成できます(概要1概要2)。 最後のグラフは球面調和関数 \(\small Y_2^0\) です[概要] 。

★このページには数学絡みで訪れる方が多いと思われますが、

  • 世の中の多くの事象は、「正規分布」ではなく 「ベキ分布」に支配されているようです。
  • ベキ分布:リンク集」も参照してください。


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

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

■「emath」とは?

emath
「emathパッケージ」は, 中学校や高校で数学プリントを作る際に必要な記号や 環境を集めたLaTeXのマクロ集で,tDBこと大熊一弘氏により作成されたものです. 日本の数学の教科書の記号とTeXの標準の記号は微妙に異なったりしていますが, そのような部分の修正が施されています.たとえば, TeXのコマンドにはない相似の記号が利用できます. また,組み立て除法を自動出力するコマンドも用意されています. さらには,TeXを使って数学プリントを作成するときに, 「この線はもっと太くしたい」「この矢印の角度はもうちょっと広げたい」など, 「こういう風にできれば良いな〜」と思うことがことごとく網羅されているといっても 過言ではありません.もともとは, ニフティ(現在の、@nifty)のTeXに関するフォーラム(FTEX)の中で 出されたいろいろな意見・議論・要望を組み入れながら作成されてきたもので, 長い歴史があります。現在でも, emath掲示板でのやりとりの中で進化し続けています.

パッケージのダウンロードは,下記サイトより行うことができます. ただし,「丸ごとパック」は,2005/11/07時点での古い内容です. 最新版は「訂正版」の方から入手できます. 解凍して得られる多数のスタイルファイルは, 適当なフォルダーにコピーまたは移動しておきます. 私の場合は,TeXシステムのフォルダー内で 「\texmf-local\tex\platex\emath」に配置しています. 納めた後は,ファイルの場所を認識させるために「\mktexlsr.exe」 を実行しておきます.

emathを組み込んだファイルをコンパイルすると,幾つかの スタイルファイルが見当たらないとしてエラーになるかもしれません. 「emath 目次」には,emath以外に必要とされる主なスタイルファイルが登録されています. ただし,「uline--」を登録しているサイトは閉鎖されたようです. 下記にアーカイブされたサイトを登録しておきます.
emathWiki
emathWikiには,「emath」の最新情報がまとめられています. IDとパスワードを求められる場合は, emathのトップページから辿っていけば記されています. 表示される左側メニューの内容は,下記の通りです.
  • 「使用PDF」の箇所では, 4種類のドキュメントを閲覧することができます. それぞれの内容は,下記の通りです.
    • 「sample.pdf」では,いろいろな記号の説明, 図のまわりへのテキストの回り込み(mawarikomi環境), 番号付け(enumerate環境,edaenumerate環境)に関する細かい設定の仕方, そして, itemizeやdescriptionなどのlist環境での行間の調整の仕方等について解説されています.
    • 「sampleP.pdf」では,picture環境支援マクロの解説がなされており, 図形に関する解説に加えて,作表に関する細かい解説がなされています. 以前は「関数のグラフ」について詳細な解説がありましたが, 現在はPerl利用が前提となっているようであり, 関数グラフの詳細はPerlを前提とした「samplePp.pdf」に記述されています.
    • 「samplePp.pdf」は,関数のグラフ描画でPerlを使用する場合のドキュメントです. 関数の定義が複雑になってくると, それを定義するのも煩雑であり,さらにその処理にも時間がかかります.そこで, その関数に関する処理部分をPerlに任せてしまおうということです. Perlをインストールした場合について, Perlと連携したいろいろなコマンドについて解説されています. 非常に細かいことが可能になっています. Perlとの連携の仕方は「こちら」を参照してください.
      【注】本サイトのグラフに関する解説は, Perlを使用しない旧書式で記述されています. 本サイトのコードをコピー・実行してエラーになる場合は, \usepackage に「emathOld」を追記してください.
    • 「samplPs.pdf」は,図形をいったんepsファイルに落として, それを利用するやり方について解説されています. 新たに「pszahyou環境」が用意され, その中で図形はepsファイルとして書き出され, 文字の配置はpicture環境の中で行われます. 生成されたepsファイルは,他でも利用することができます. samplPp.pdfにあるよりも,さらに多彩な機能が追加されています.
  • 「emath講座」では,いろいろな数学の場面で必要となるemathのコマンドについて, LaTeXの書式も示しながら解説されています. TeXのソースコードと出力がつねに併記されているので, 自分の思うような出力を得るにはどのように記述すべきかが分かりやすいです。
  • 「五十音順」では, emathのコマンドが五十音順に整理されて登録されています. この箇所をみると,自分の知りたい使い方が探しやすいと思います.
  • 「アルファベット順」では, emathのコマンドがアルファベット順に整理されて登録されています. コマンドを覚えていて,その使い方を確認するときに利用すると便利だと思います. ただし,「関数のグラフ」に関する旧書式のコマンドは, ここには掲載されていません.旧書式は, 「五十音順」の「エラーメッセージ」や,上段に表示される「一覧」も参照してください.
  • 「中学校数学」や「高校数学」の箇所では, それぞれの学習項目に応じて,使用するコマンドの書式や使用例が登録されています.

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

Perlとの連携の仕方
 私は,これまでPerlは利用せず, 古いままのemath書式で教材やら資料作成をしてきて, 特に不満や不便さは感じませんでした. 先日(2022.05.06),TeXシステムをTeXLive2022に移行し, ついでにemathも2022年5月時点の最新版「emathc210509」にしたところ, グラフ描画関係がことごとく「! Undefined control sequence.」などの エラーになりました.emathWikiの 「エラーメッセージ」をみると, これまで使用してきたグラフ描画コマンドである \Gurafu,\yGurafu,\xGurafu,\bGurafu,\rGurafu は, いずれも「obsolete」であり, 現在は使用されていないようです!どうしても使いたいときは, \usepackageに「emathOld」を追加するように記されていました. どうやら,関数のグラフは,今ではPerl利用が前提であり, グラフ描画コマンドは \YGraph,\XGraph,\ParamC,\PolarC になっているようです.
 そこで,私もPerlを組み込むことにしました. きちんと動作するまでにいろいろ紆余曲折がありましたが, 私なりの理解ではPerlとの連携手順は以下のとおりです.
  1. 「Perl」をインストールします. Strawberry Perl が手軽なようです.
    インストール後は,コマンドプロンプトで「perl -v」(小文字のv)を実行して, 「This is Perl 5, version 32, ・・・」というメッセージが表示されれば, きちんとインストールされています.
    次に,同じコマンドプロンプトで「perl -V」(大文字のV)を実行して, 一番最後に表示される「@INC:」の下のフォルダー名を控えておきます. そのフォルダーのいずれかに,幾つかのファイルをコピーする必要があります.
  2. 「Perl」との連携用のemathのスクリプトファイル「emathpl16.zip」 (2022.05時点)をダウンロードします. ファイルは,emathの「訂正版」のページにあります. ダウンロード後は解凍しておきます.4つのファイルができます.
  3. 「Perl」との連携用のスクリプトファイル (emath.pl,degsine.pl,nCr.pl,BignCr.pl)を,「1.」で控えたフォルダーの 一つにコピーします.どこでも良いようです. 私は,「C:\Strawberry\perl\site\lib」にコピーしました. なお,TeXWorksを利用する場合は, これらのファイルをTeXLiveの(私の場合は) 「c:\texlive\2022\tlpkg\tlperl\lib」にもコピーする必要があるようです.
  4. コンパイルするときは,「platex -shell-escape filename.tex」を実行します. 「-shell-escape」を付加する必要があります.「-shell」と「-escape」の 間に空白を入れてはいけません(気づくのに1日かかりました). TeXWorksでの設定の仕方は,下記を参照してください. 私の場合,TeXWorksは利用していないのでコマンドラインで打ち込む形になりますが,「WinFD」を利用するといろいろなコマンドを「Alt+英字」に登録することができます.登録すると,ファイル名にカーソルをおいてキー操作2回でコンパイルされます.
  5. Perlを利用した具体例は,emathWikiの「samplePp.pdf」に書かれている 多数の例を参照してください. 関数は,多項式も含めて「\def\Fx{X を用いた式 }」により定義し, グラフは「\YGraph\Fx」により描画されます. いきなり「\YGraph{Xを用いた式}」としてもよいようです. samplePp.pdfでは「\YGurafu\Fx\xmin\xmax」が利用されていますが, 索引をみると「\YGurafu」も「obsolete」のようです.
     \YGraph の他に,\XGraph (x=f(y)のタイプ),\ParamC (媒介変数表示), \PolarC (極座標) が利用できます.これらのコマンドの使用法は, emathWikiの「索引(アルファベット順)」で見てください. Perlと連携することで,多彩な機能が利用可能になっています.
  6. 座標軸等は表示されるのにグラフが表示されないときは, Perlとの連携ができていないからです. Perlと連携させるためには「-shell-escape」を付加してコンパイルする 必要があります.連携がなされていないときは,logファイルの冒頭部分が 「restricted \write18 enabled.」になっています. 「\write18 enabled.」だけであれば,連携がなされています.
下記は,emathWikiでの解説です.
旧書式のグラフ描画コマンド
グラフ描画に関する旧書式のコマンドは, \Gurafu,\yGurafu,\xGurafu,\bGurafu,\rGurafu が利用されてきましたが, 現在はいずれも「obsolete」になっており「索引」にも掲載されていません. コンパイルして 「! Undefined control sequence」が表示されるときは, エラーメッセージ で確認してください.そのような場合, \usepackageに「emathOld」を追記すれば大丈夫のようです. グラフ描画のコマンドは,現在は \YGraph,\XGraph,\ParamC,\PolarC になっています. 使い方は,emathWikiの「索引(アルファベット順)」で見てください. 「索引」は最新版に対応した内容です.

ただし, これらの新たなグラフ描画関係のコマンドは「Perl利用」が前提となっているので, まずemathをPerlと連携させる必要があります. 連携の仕方は「こちら」を参照してください. Perlをうまく組み込めなかった場合は, \usepackageに「emathOld」を追記して旧書式で利用するしかないと思われます. 私の確認した限りでは,「emathc150309.zip」を利用すれば, 「emathOld」を追記する必要はありませんでした.

「関数のグラフ」に関する解説は,以前は「sampleP.pdf」で詳細に 解説されていました.しかし,現在,emathWikiの「sampleP.pdf」では, その解説が削除されています. Perlと連携させると旧書式を利用する必要はないとは思いますが, 何らかの理由でPerlと連携させることができなかった場合は, 旧書式で利用するしかないと思われます. その場合は,「丸ごとパック」をダウンロードして, その中の「pdf」フォルダーに含まれている「sampleP.pdf」(2005/11/02)を 見てください. 「関数のグラフ」について旧書式で詳細に解説されています. 最新版のemathパッケージであっても, \usepackageで「emathOld」を追記しておけば, 旧書式で利用することが可能です.

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

■プリントの判型指定
おそらく,このページを閲覧される方は数学教員の方が多いと思われ, 作成したい教材プリントのイメージはお持ちと思われます. プリントの判型は,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の値で調整します。
▲戻る(トップメニューマップ)

■多項式グラフの描画
【注意】 以下の解説は,「emathc150309」以前のパッケージを もとにした解説です.多項式グラフの描画は「\Gurafu」が用いられていますが, 今では「obsolete」になっており「emathc160115」以降のemathでは動作しません. 「\Gurafu」のまま利用するには,\usepackage に「emathOld」も追記してください. 最新のemathでは,「\def\Fx{Xの多項式}」で定義して, 「\YGraph\Fx」によりグラフが描画されます. 「\YGraph{Xの式}」だけでもよいようです. ただし,Perlとの連携が必要です. 連携の仕方は「こちら」を参照してください. (2022.05.08)
さっそくグラフを描画させてみましょう.たとえば, 区間 \(\small [a, b]\) で \(\small y=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}
【注】perlと連携済の場合は, 「\def\Fx{X\(\small **\)2-2\(\small *\)X-3}」で関数を定義すると, 「\YGraph\Fx」でグラフが描画されます. あるいは,いきなり「\YGraph{X\(\small **\)2-2\(\small *\)X-3}」 でもかまいません.いちいち範囲を指定しなくても, zahyou環境の範囲内でグラフが描画されます. perlでのべき乗は,X^2ではなく,X\(\small **\)2とする必要があります. 大文字のXであることに注意してください. 小文字を使用すると「0」として扱われます.
このグラフをみると,幾つかのことが気になってきます.
  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書式との関係で「<, >」は全角で書いていますが, 実際に入力するときは半角にしてください. 詳しくは,索引(アルファベット順)で見てください.
  • \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}
▲戻る(トップメニューマップ)

■一般の関数グラフの描画
【注意】 以下の解説は,「emathc150309」以前のパッケージを もとにした解説です.グラフ描画は「\yGurafu」が用いられていますが, 今では「obsolete」になっており「emathc160115」以降のemathでは動作しません. 「\yGurafu」のまま利用するには,\usepackage に「emathOld」も追記してください. 最新のemathでは,「\def\Fx{Xの関数式}」で定義して「\YGraph\Fx」 とするか,あるいは「\YGraph{Xの関数式}」だけでもグラフが描画されます. ただし,Perlとの連携が必要です. 連携の仕方は「こちら」を参照してください. なお,旧書式での解説は,「丸ごとパック」に含まれる「sampleP.pdf」(2005/11/02) の16・17節を見てください. (2022.05.08)
四則計算と主要な関数
多項式で表される関数は, その係数を指定するだけでグラフを描画することができますが, 一般の関数の場合は関数の式を定義する必要があります. Perlとの連携がなされていれば,独立変数を X (大文字)として, \def\Fx{sin(X)+cos(X)} のように関数の式を記述するだけで済みます.

★以下の関数定義は,emathの古い書式での解説です. 利用する場合は,\usepackageに「emathOld」を追記してください.
関数を定義するためには,四則計算,主要な初等関数,ならびに主要な 数学定数に関するコマンドについて知っておく必要があります. 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

【注】 perlと連携済みの場合は, これらの関数は,sqrt(X),exp(X),log(X),sin(X),cos(X),tan(X) として利用することになります.\(\small a^b\)は,「a\(\small **\)b」です. 連携の仕方は「こちら」を参照してください.

べき乗 \(\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



関数の定義
★以下の関数定義は,emathの古い書式での解説です. 利用する場合は,\usepackageに「emathOld」を追記してください.
以上をもとに,たとえば関数 \(\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
同じ書式で多項式関数 \(\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}

【注】 perlと連携済みの場合は, この関数の定義は \def\Fx{2\(\small *\)X/(X\(\small **\)2+1)} ですみ, グラフは \YGraph\Fx により描画されます. 連携の仕方は「こちら」を参照してください.


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

一般関数のグラフ
多項式関数のグラフ描画は \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}

【注】 perlと連携済みの場合は, この関数の定義は \def\Fx{2\(\small *\)X/(X\(\small **\)2+1)} ですみ, グラフは \YGraph\Fx により描画されます. 連携の仕方は「こちら」を参照してください.

\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}

【注】 perlと連携済みの場合は,\Fyをperl仕様でYの式で定義済みとすると, 「\XGraph\Fy」によりグラフが描画されます. 連携の仕方は「こちら」を参照してください.

媒介変数表示による関数のグラフ
関数が,\(\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\) として描画しています.

【注】 perlと連携済みの場合は, 「\def\Ft{T-sin(T)}」「\def\Gt{1-cos(T)}」とすると, 「\ParamC\Ft\Gt」によりグラフが描画されます. 連携の仕方は「こちら」を参照してください.


極座標で表された関数のグラフ
極方程式 \(\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}

【注】 perlと連携済みの場合は, 「\def\Ft{4\(\small *\)sin(3\(\small *\)T)}」とすると, 「\PolarC\Ft」によりグラフが描画されます. 連携の仕方は「こちら」を参照してください.


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

■塗りつぶし

★以下の解説も,emathの古い書式での解説です. 利用する場合は,\usepackageに「emathOld」を追記してください. 旧書式での解説は,「丸ごとパック」に含まれる「sampleP.pdf」(2005/11/02) の18節を見てください.

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}

【注】 perlと連携済みの場合は, \Fxをperl仕様で定義済みとすると, 「\YPaint<minx=a,maxx=b>\Fx」により塗りつぶしが行われます. \Fxは多項式である必要はありません. 斜線塗りは「\YPaint\(\small *\)」を利用します.

これを紙に印刷すると,塗りつぶし部分について希望するような濃度が 得られないかもしれません.塗りつぶしの濃度は, \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」(2005/11/02) を見てください.

\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} 極座標

【注】 perlと連携済みの場合の塗りつぶしは, 2つのy=f(x)タイプの関数で囲まれた部分は「\YPaintii\Fx\Gx」です. 斜線塗りは「\YPaintii\(\small *\)」とします. x=f(y)タイプや媒介変数・極座標の場合の「\YPaint」に相当する コマンドは定義されていないようですが, 関数定義をperl仕様で定義しておけば, \XNuri,\XNurii,\BNuri,\RNuriにより塗りつぶしが行われるようです. 曲線自体の描画は,媒介変数は\ParamC,極座標は\PolarCであることに 気をつけて下さい. 新書式での「塗り」の詳細は,emathWikiの「samplePp.pdf」の6.6節を見てください.

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

■平面図形
関数のグラフではなく,三角形や円などの平面図形を描くときも 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の「2. 直線図形」を見てください.

  • \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として指定します. 点線や破線で描画することもできます. 詳しくは,索引から参照してください.

通る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 のように,まとめて定義することはできません. 矢印先端の鏃(やじり)の形(角度や長さ)を修正したり, 矢印の中間に記号を付すこともできます. 詳しくは, 索引で見てください.
  • \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 のような 書式になります. さらに,いずれもその位置を微妙に調整することができます. 詳しくは,索引から調べてください.
  • \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 では「;」をつける必要があるので注意してください. 円弧に配置する点の個数を指定して点線で表示することもできます. 詳しくは,索引から調べてください.
  • \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> とします. (実際の入力では「<, >」は半角です.) 破線と併用することもできます. 詳しくは,索引で見てください.
  • \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\(\small *\), \ougigata\(\small *\) のように「\(\small *\)」をつけ,斜線塗りにしたいときは \En\(\small **\)[d], \ougigata\(**\)[d] のように「\(\small **\)」を つけます.\(\small d\) には斜線の角度を\(\small -90〜90\)の 度数法で指定します. \En\(\small *\)[k], \ougigata\(\small *\)[k]のようにすると, 塗りの濃さを調整できます.デフォルトは\(\small k=0.5\) に設定されています. \(\small k=0\) は真っ白,\(\small k=1\) は真っ黒です. 下図は,斜線塗りをした場合の図です. 輪郭線を描くため,「\(\small **\)」のつかないコマンドと併用する必要があります.
  • \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}
同心円の外側の円内を斜線塗りして, 内側の円内を「真っ白」(k=0)に塗りつぶすと, ドーナツ状の形を斜線塗りすることができます. 下図では,斜線の向きを逆にしています. 塗りつぶしと曲線描画の順番には注意する必要があります. 4つの境界線が適当な曲線になっていると, emathで塗りつぶすことはできません. MePoTeXを利用すると, そのようなときでも塗りつぶしが可能です.
  • \begin{zahyou}[ul=7mm] (-1,3)(-1,3)\small \tenretu{P(1,.5)s} \kuromaru{\P;} \Put\P{ \ougigata{2}{30}{150}} \Put\P{ \ougigata**[-45]{2}{30}{150}} \Put\P{ \ougigata*[0]{1}{30}{150}} \Put\P{ \ougigata{1}{30}{150}} \end{zahyou}

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

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

■グラフと図形に関する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には, これらのコマンドにより求められる交点の座標が入ります.
直線ばかりではなく,円と円,円と直線,楕円と直線,放物線と直線 の交点を求めるコマンドもあります.詳しくは,索引から調べてください.

  • \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の内接円を描く

他に,次のようなものを求めるコマンドも定義されています. 詳しくは,索引から調べてください.
  • 頂点から辺に下ろした垂線の足を求める.
  • 頂角の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}
それぞれのコマンドは,次のような内容です. 詳しくは,索引から調べてください.等辺記号や,等角記号もあります.
  • \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とすると外角に角記号がつく. 角記号の大きさや書き入れる角の大きさの位置は調整することができます. 二重線にしたり矢印をつけることもできます.
▲戻る(トップメニューマップ)

いろいろな三角比
三角比とその逆数で表される値は, 角を表す動径と単位円との交点, 交点での単位円の接線,そして 接線と座標軸との交点をもとにしてできる いろいろな三角形の辺の長さとして現れてきます。
下図では,次のようになります. \[\small \sin\theta={\rm OI},\cos\theta={\rm OH},\tan\theta={\rm PA}\] \[\small {\rm cosec}\,\theta={\rm OB},\sec\theta={\rm OA},\] \[\cot\theta={\rm PB}\]
この三角形を,できるだけ点の座標を個別に明示することなく, emathのコマンドだけを用いて描画してみました. 明示的に記述したのは,原点の座標, 単位円であることを示すための半径の値, 座標軸上の適当な点の座標,動径を指定するための角度, そして,その動径に垂直であることを示す角度だけです.
  • \begin{zahyou}[ul=14mm] (-1.3,2.5)(-1.3,1.5)\small % 単位円と点(1,0)を定義する \En{(0,0)}{1}\def\O{(0,0)} \Put{(1,0)}[se]{1} % 単位円と角60度の動径との % 交点Pを求める \Candk\O{1}\O{60}\D\P \Drawline{\O\P} \Put\P[ne]{P$(x,y)$} % 点を通りOPに垂直な直線と % 座標軸との交点A, Bを求める \Landk\O{(3,0)}\P{-30}\A \Landk\O{(0,3)}\P{-30}\B \Put\A[s]{A} \Put\B[w]{B} \Drawline{\A\B} % 点Pから座標軸への垂線の足を % H,Iとする \Suisen\P\O\A\H \Suisen\P\O\B\I \Drawline{\P\H} \Drawline{\P\I} \Put\H[s]{H} \Put\I[w]{I} % 直角記号と角記号を描画する \Tyokkakukigou\A\H\P \Tyokkakukigou\O\P\A \Tyokkakukigou\O\I\P \Kakukigou\A\O\P{$\theta$} \end{zahyou}
それぞれのコマンドは,次のような内容です. 詳しくは,索引から調べてください.
  • \Candk\O{r}\P{theta}\A\B
    点Oを中心とする半径\(\small r\)の円と, 点Pを通る方向角が\(\small \theta\)度の直線との交点の 座標をA, Bに記録する. 「Candk」の「C」は円(circle),「k」は角度と思います.
  • \Landk\A\B\P{theta}\Qは 「2直線の交点」の箇所をみてください.
  • \Suisen, \Tyokkakukigou, \Kakukigou については, すでに直前の項目で解説済みです.
▲戻る(トップメニューマップ)

統計グラフ
統計教材の作成や研究発表などのプレゼンでは、 いろいろな統計グラフが有用です。 「emathG」を\usepackageで読み込ませると、 円グラフ、帯グラフ、棒グラフ、折れ線グラフなどを、 単に描画範囲とグラフのための数値を指定するだけで作成できます。 最近使用してみたら非常に便利だったので、 ここに紹介しておきます。(2024.03.22)

ただし、「emathG.sty」は、まだ仕様が確定していないαバージョンのようです。 また、「tpic specials」を利用しているようです。 「PostScript」利用のものは「emathGps.sty」です。 詳細は、それぞれのドキュメント ( emathG emathGps) を参照してください。

以下に、幾つか、ソースコードとグラフを紹介しておきます。

■円グラフ
下記の1行を書き込むだけです。zahyou環境の指定は必要ありません。 ただし、数値は四捨五入して整数にしておく必要があります。

  • \EnGurafu{2,4,6,8}

■帯グラフ
帯グラフは、Obigurafu 環境の中で書き込みます。 ただし、数値は四捨五入して整数にしておく必要があります。 横幅は minipage で調整しました。 凡例は、ObiGurafu環境の外側で指定します。 「{G1}」は、個々の帯グラフごとの識別名です。 適当につけてかまいません。 帯の高さ、間隔、帯間を結ぶ線の形式なども指定することができ、 目盛りもつけられます。 また、斜線ではなく塗りにすることもできます。

  • \begin{minipage}{.5\textwidth} \begin{ObiGurafu}{G1} \Obi{最初}{1,2,3} \Obi{つぎ}{4,5,6} \Obi{最後}{7,8,9} \end{ObiGurafu} \center{\hanrei{どっち,あっち,こっち}} \end{minipage}

■棒グラフ
縦の棒グラフは、bouG 環境の中で書き込みます。 数値は小数値でもかまいません。 棒の間隔、斜線ではなく塗り、数値の表示場所なども指定でき、 縦に目盛り線を入れることもできます。 横軸の下に単語ではなく、語句を入れたいときは 「\rotatebox{-90}{語句}」などとして90度回転するとよいでしょう。
縦ではなく横の棒グラフにしたいときは、 「bouG」ではなく「yokobouG」として同様にします。

  • \begin{minipage}{.5\textwith} \begin{bouG}[ul=5mm](0,4)(0,6) \bou**{2}{A} \bou**{4}{B} \bou*{6}{C} \end{bouG} \end{minipage}

■積み上げ棒グラフ
横の積み上げ棒グラフは、TyokobouG 環境の中で書き込みます。 縦の積み上げ棒グラフは、TbouG 環境です。 横幅は minipage で調整しました。

  • \begin{minipage}{.5\textwidth} \begin{TyokobouG} [ul=5mm](0,9)(0,4) \Tbou{1,2,3}{A国} \Tbou{2,3,3.5}{B国} \Tbou{3,2,1}{C国} \end{TyokobouG} \end{minipage}

■折れ線グラフ
折れ線グラフは、zahyou* 環境の中で、 OreG を利用して書き込みます。 書式は、「OreG{線種}{配置記号}{数値}」です。

  • \begin{zahyou*} [ul=5mm](-1,3)(0,6) % [A] \Drawline{\XMAX(-1,0)(-1,6)} % [B] \OreG{\emDottedline} {$\scriptstyle \ast$}{2,3,5} \OreG{\Drawline} {$\circ$}{3,4,2} \OreG{\Hasen} {$\scriptstyle \bullet$}{4,5,3} % [C] \multido{\ix=0+1}{3} {\emDottedline{(\ix,0)(\ix,\ymax)}} \multido{\iy=1+1}{5} {\emDottedline{(-1,\iy)(\xmax,\iy)}} \multido{\iy=1+1}{5} {\Put{(-1,\iy)}[w]{\iy}} % [D] \def\OreGmidasiF#1{\hbox{\tate #1}} \OreGmidasi{1回目,2回目,3回目} \end{zahyou*}

  • [A]では、座標軸を描画しています。 デフォルトでは、最初の点は\(\small y\) 軸上に置かれるので、 縦軸は \(\small x=-1\) にしました。
  • [B]では、折れ線を描画しています。 数値は小数値でもかまいません。
  • [C]では、格子線を 「\multido」を利用して描画しています。 emathは長年利用してきましたが、 このような繰返し処理ができることは今回初めて知りました! emathWiki の索引にも \multido はなく、書式がどこで解説されているのか 分かりませんが、「emathG」のドキュメントから察すると、
    「\multido{変数名=初期値+増加数}{繰返し回数}{処理内容}}」
    ということのように思われます。
  • [D]では、横軸の下に見出しを縦書きで入れるコマンドを定義して、 それを書き込んでいます。
  • ▲戻る(トップメニューマップ)

    ■グラフの割り付け
    グラフや図形をテキスト文章と横並びに配置するには, 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環境について詳しく解説されています. 熟読すると,次のようなことが可能です. 具体的な利用法はマニュアルを参照してください.
    • 並列にした小問の間に縦線を引く.
    • 小問の一部の番号に*をつける.
    • 番号付けに「アイウ・・・」や「イロハ・・・」を使う.
    • 番号付けをプログラムの行番号のようにする.
    • 大問と小問の間の縦の空白を調整する.
    • 並列にする個数を指定しないでベタに並べる.
    • 並列するとき,最大幅を自動計算して均等幅でベタに並べる.
    ▲戻る(トップメニューマップ)

    ■作表に関するTips
    増減表や度数分布表などの表を作成したいとき, tabular環境を利用すると, セルに数式を含むときは個別に$で囲んで数式モードにしなければならず面倒です。 そのようなときは,array環境を利用するとよいでしょう. さらに,emathの作表に関するスタイルファイル「emathT.sty」を組み込んでおくと, 列幅や行高などを簡単に変更できるようになっています. 下記は array環境の場合で説明していますが,tabular環境の場合にも適用できます.

    array環境
    下図は,LaTeXの標準仕様の場合です. 列幅は自動調整されますが,セルの内容により幅が異なります. また,高さもセルの内容が収まるように自動調整されますが, 上下が窮屈です.
    • $\begin{array}
      {|l|l|l|l|}
      \hline
      w & x & y & z \\
      \hline
      1& \bunsuu2{34}
      & \bunsuu5{678}
      & \bunsuu{\bunsuu9{10}}{12345}\\
      \hline
      \end{array}$
      
    (注) TeXのソースコードを示している部分は, この項目以前では四角い枠で囲まれています.それは, こちらで指定したわけではなく,ブラウザーで表示させると \begin...\end の間が自動的に四角い枠で囲まれました. これは,MathJaxの仕様なのかと思っていました. しかし,array環境の場合は TeXのソースコードは表示されず,MathJaxによる出力結果だけが表示されます. $を省いても同様です. そのため,ここではTeXのソースも表示させるため, 「\verb」に相当するhtmlの<pre>を利用して ソースコードを表示しています. ただし,モバイル表示ではセンタリングされてしまうようです.

    行高の調整
    行の高さは,emathを利用しなくても「\arraystretch」を利用すると 調整することができます.
    • \def\arraystretch{1.5}
      $\begin{array}
      {|l|l|l|l|}
      \hline
      w & x & y & z \\
      \hline
      1& \bunsuu2{34}
      & \bunsuu5{678}
      & \bunsuu{\bunsuu9{10}}{12345}\\
      \hline
      \end{array}$
      
    ただし,\arraystretchはすべての行に対して適用されます. そのため,高さを変える必要のない1行目も広がります. また,2行目をみると分かるように,「1.5」の指定では上下の空きがまだ窮屈です. そのようなときは,「emathT.sty」を組み込んで \usepackage{emathP, emathT}として, 分数の上下に余白を入れるコマンドである「\bsityuu」を利用すると, \arraystretchを利用しなくても適当な余白を作ってくれます. この指定は,その行全体に適用されます. 「b」は分数(bunsuu),「sityuu」は「支柱」のことのようです. 「分数の上下に支柱を立てて空きを作る」というイメージと思います。 下記では,「\bunsuu2{34}」の箇所に追記しました.
    • $\begin{array}
      {|l|l|l|l|}
      \hline
      w & x & y & z \\
      \hline
      1& \bunsuu2{34}\bsityuu
      & \bunsuu5{678}
      & \bunsuu{\bunsuu9{10}}{12345}\\
      \hline
      \end{array}$
      
    \arraystretchを外したことにより,1行目の行高がデフォルトに戻り, 2行目の分数の下方に多少の空きができているのが分かります. ただし,繁分数の箇所の上方が窮屈です. かといって「\bunsuu9{10}」の箇所にも「\bsityuu」を追記すると, 分母の「10」の箇所にも空きができてしまいます. このようなときは,セル全体に対して上方や下方の空きを調整する 「\EMvphantom*」を利用します.書式は次の形です.

    \EMvphantom*[高さ][深さ]{セルの内容}

    高さは上方の空き,深さは下方の空きを指定します. [ ]が1つだけの場合は,同じ値で上下の空きを指定します. 一つのセルで指定された空きは行全体に適用されるので, 下記では「\bsityuu」は削除しています.
    • $\begin{array}
      {|l|l|l|l|}
      \hline
      w & x & y & z \\
      \hline
      1& \bunsuu2{34}
      & \bunsuu5{678}
      & \EMvphantom*[3pt]
       {\bunsuu{\bunsuu9{10}}
       {12345}}\\
      \hline
      \end{array}$
      
    以上のようにして,セルの上下の空きを調整することができますが, 個々のセル毎に指定するのは面倒かもしれません. すべての行に対して指定するには, array宣言の配置の仕方を指定する箇所で「>{\bsityuu}」を 追記しておきます. ただし,前述のような繁分数を含む場合は, \EMvphantom* を利用するしかないと思われます.
    • $\begin{array}
      {|>{\bsityuu}l|l|l|l|}
      \hline
      w & x & y & z \\
      \hline
      1& \bunsuu2{34}
      & \bunsuu5{678}
      & \bunsuu{90}{1234}\\
      \hline
      \end{array}$
      
    ▲戻る(トップメニューマップ)

    列幅の調整
    表を作成するとき, 列によって列幅を変えたいようなときの指定は面倒です. そのようなとき,emathTを利用すると幅や配置の仕方を同時に 指定することができます. 配置の仕方は C, L, R の大文字を用い, 例えば列幅を 4zw にして中央寄せにしたい場合は, 「C{4zw}」のように指定します. 下記は,全角1文字ずつ増やして配置を変えた場合です.
    • $\begin{array}
      {|C{1zw}|L{2zw}|C{3zw}|R{4zw}|}
      \hline
      w & x & y & z \\ \hline
      1& 2.3 & 4.56 & 7.890\\
      \hline
      \end{array}$
      
    度数分布表などのように列数が多いとき, 複数列の指定を一気に行うこともできます. たとえば,「*{列数}{C{4zw}}」などのようにします. 2つ目の中括弧 { } 内が,列数の分だけ繰り返されます. この中括弧内に縦の仕切り線も含めることもできます. たとえば,下記では3つの列に対して中央寄せを指定し, 列幅を「3zw」として右側に縦の区切り線を配置しています. 列幅と区切り線の指定が,列数の分だけ繰り返されます.
    • $\begin{array}
      {|C{1zw}|*{3}{C{3zw}|}}
      \hline
      w & x & y & z \\ \hline
      1& 2.3 & 4.56 & 7.890\\
      \hline
      \end{array}$
      
    一つのセル内で改行したい場合があるかもしれません. デフォルトでは,「p{列幅}」とすることで \newline により改行することが できますが,すべて左寄せになります. emathWikiの「作表」の解説では \parbox を利用するとよいと書かれていますが, 私の環境ではエラーになりました. array環境を入れ子にすると, 改行を含めることができて配置の指定も生かせるようです.
    • $\begin{array}
      {|C{1zw}|*{3}{C{3zw}|}}
      \hline
      w & x & y & z \\ \hline
      1& 2.3
      & \begin{array}{l}
      4.56\\ 7.89\\ 9.10
      \end{array} & 1.2345\\
      \hline
      \end{array}$
      
    ▲戻る(トップメニューマップ)

    増減表の作成
    微分法の箇所で増減表を作成するには, 関数の増減や凹凸を表す記号が必要になります. それぞれ,次のようになります. \[\small \begin{array}{|*{4}{C{2zw}|}} \hline 増加& 減少& 下に凸& 上に凸\\ \nearrow & \searrow & \quad \cup & \quad \cap\\ \hline \small ¥{\small \rm NE} &\small ¥{\small \rm SE} &\small ¥{\small \rm cup}&\small ¥{\small \rm cap}\\ \hline \end{array}\] \[\small \begin{array}{|*{4}{C{2.5zw}|}} \hline 下に凸減& 下に凸増 & 上に凸増 & 上に凸減\\ \hline \small ¥{\small \rm SEE} &\small ¥{\small \rm NEN} &\small ¥{\small \rm NEE}&\small ¥{\small \rm SES}\\ \hline \end{array}\] 増加は北東方向の矢印(\nearrow), 減少は南東方向の矢印(\searrow)で, スペルが長いので単に \NE, \SE と略記することができます. 凹凸を加味した増減の3文字目の E, N, S は, それぞれ東の方向,北の方向,そして南の方向への矢印であることを示しています. これらの記号を用いると,たとえば \(\small y=x^3-3x^2\) の増減表は次のようになります.
    • $\begin{array}{|*{8}{C{2zw}|}}
      \hline
      x & \cdots & 0 & \cdots & 1
        & \cdots & 2 & \cdots\\  \hline
      y'& + & 0 & - & - & - & 0
        & + \\ \hline
      y'' & - & - & - & 0 & + & +
        & + \\ \hline
      y & \NEE &0 & \SES & -2 & \SEE
        & -4 & \NEN \\
      \hline
      \end{array}$
      
    \(\small x, y\) の値が分数になるときは 「\bsityuu」を設定しておくとよいでしょう. 繁分数等の複雑な式の場合は 「\EMvphantom*」で対応することができます.

    一方,値が定義されていない箇所には,斜線を引きたくなります. セル内に斜線を引くには「\emTsya(W=列幅)」とします. たとえば,\(\small y=\dfrac1{x^2-1}\) の場合は,\(\small x=\pm 1\) の 箇所で \(\small y, y'\) の値が定義されていません. この場合の増減表は次のようになります. 単に「\sya」だけでも斜線が引かれますが, セルを囲う矩形の頂点を結ぶ斜線にはなりません. 列幅を 2zw で指定しているので, 斜線を引きたい箇所では「\emTsya(W=2zw)」とします.

    • $\begin{array}{|*{8}{C{2zw}|}}
      \hline
      x & \cdots & -1 & \cdots & 0 & \cdots
        & 1 & \cdots\\  \hline
      y'& + & \emTsya(W=2zw) & + & 0 & 0
        & \emTsya(W=2zw) & - \\ \hline
      y & \NE &\emTsya(W=2zw) & \NE & -1
        & \SE & \emTsya(W=2zw) & \SE \\
      \hline
      \end{array}$
      
    「emathT.sty」を組み込むと, 他にも枠線の太さやセル内の色等, 作表に関して多彩な指定をすることができます. 詳細は「emathWiki」の左側メニューから, 「emath講座」の「作表」の箇所を参照してください. 「sampleP.pdf」にも作表に関する解説があります. 2重波線で表を2つに分けたりすることができます.

    ★とりあえずは, 以上の説明で一通りのことは可能になるのではないかと思われます.
    ★この解説が,emath を使いこなす上で何かの参考になれば幸いです.
    ★曲面描画などの立体図形は, MePoTeX利用も検討してください.
    ▲戻る(トップメニューマップ)

    copyright