\documentclass[papersize,a4paper,12pt,uplatex]{jsarticle} \usepackage{ketpic,ketlayer} \usepackage{amsmath} % \usepackage{amsmath,newtxmath} \usepackage[dvipdfmx]{graphicx,color} \usepackage{wrapfig} \usepackage[dvipdfmx,bookmarks=false,colorlinks=true,linkcolor=blue]{hyperref} \setmargin{20}{20}{15}{25} \usepackage{setspace} \usepackage{comment} \setcounter{tocdepth}{3} \begin{document} \title{\ketcindy の概要} \author{\ketcindy\ Project Team} \maketitle \begin{center} - 第3.2版 -\end{center} \hypertarget{index}{} \tableofcontents \newpage \section{\ketcindy について} \subsection{システムの構成} \ketcindy は,Cinderella の作図機能を利用して,作図データの\LaTeX ファイルを作成するためのスクリプトライブラリである。\ketcindy はCinderellaのプログラミング言語Cindyscriptで記述されており,ユーザーはCinderella によるインタラクティブな作図機能と,CindyScript によるプログラミングを用いて,\LaTeX 文書の挿入図を効率よく作成することができる。また,各種数式処理ソフトと連携して計算を行うことができる。 \begin{center} \scalebox{0.9}{ \input{Fig/concept}} \end{center} Cinderellaで作図した図のデータは,\ketcindy により,いったんRのファイルに書き出される。これをRで処理して\TeX ファイルを作成する。できた\TeX ファイルを,本文中に inputコマンド で挿入すれば図が表示される。(\ketcindy の初期の版ではこのデータ処理にScilabを用いていた。) CinderellaとRやその他のソフトウェアとの連携には,バッチファイル(Macではシェルファイル)を用いている。(概念図の両方向矢印) バッチファイルは kc.bat,シェルファイルは kc.sh で,\ketcindy が目的に応じてこれらのファイルを書き出して実行するようになっている。 したがって,KeTCindyでの図ファイルの作成手順は次のようになる。 (1) 必要に応じてCinderellaの作図ツールで,点や線を作図しておく。 (2) Cindyscript エディタでプログラムを書く。 (3) 出力する。 \newpage %--------- ketcindy による作図手順---------------- \subsection{\ketcindy による作図手順} \ketcindy で作図し,TeXのファイルを作図する手順をチュートリアル形式で示す。 \subsubsection{平面幾何} \ketcindy のシステムに同梱されている,template1basic.cdy をひな形として用いる。適当な場所に複製を作り,名前を変えておこう。ここでは,単に template.cdy とする。 template.cdy をダブルクリックして開き,図が表示されたら,Ctrl+9 ( Windows ) / ⌘+9 ( Mac ) でスクリプトエディタを開く。2つの画面はマルチウィンドウにしておくのがよい。 \vspace{\baselineskip} \begin{center}\includegraphics[bb=0.00 0.00 500.03 306.52,width=10cm]{Fig/start01.pdf}\end{center} この三角形で Cinderellaの作図機能を用いて内心を求め,内接円を描く。 まず,スクリプトエディタの \verb|Listplot([A,B,C,A]);| の行頭にスラッシュを2本書き入れ,Shift+Enter で実行する。こうすると,この行はコメント行となり実行されない行になる。その結果,三角形が消えて点だけ残る。 画面上部の作図ツールから「線分を加える」\includegraphics[bb=0.00 0.00 6.48 5.04,width=8mm]{Fig/segment.pdf} をクリックして選択し,点Aから点Bへドラッグすると線分が描かれる。同様にして,BC, CAを引く。 \begin{center}\includegraphics[bb=0.00 0.00 414.02 329.02,height=3.5cm]{Fig/start02.pdf} \end{center} 次に,角の二等分線を引く。「角の二等分線を加える」ツール \includegraphics[bb=0.00 0.00 6.48 5.04,width=8mm]{Fig/bisector.pdf} を選択し,辺BA,BCを順にクリックすると角ABCの二等分線が引かれる。 このとき,次図左のように,該当する角を表すガイドが出る。 \hspace{20mm}\includegraphics[bb=0.00 0.00 402.02 325.02,height=3cm]{Fig/start03.pdf} \hspace{5mm}\includegraphics[bb=0.00 0.00 413.02 320.02,height=3cm]{Fig/start04.pdf} 同様にして,角Aの二等分線を引き,「交点を求める」ツール\includegraphics[bb=0.00 0.00 6.48 5.04,width=8mm]{Fig/intersection.pdf}をクリックして,2本の二等分線を順にクリックすると交点が求められる。(角Aの二等分線を引いた直後はこれが選択状態にあるので,角Bの二等分線をクリックすればよい) \begin{center}\includegraphics[bb=0.00 0.00 397.02 319.02,height=3cm]{Fig/start05.pdf}\end{center} 内接円の半径を決めるために,辺ACに垂直で点Dを通る直線を描く。「垂線を加える」ツール \includegraphics[bb=0.00 0.00 6.48 5.04,width=8mm]{Fig/multi-add-perp.pdf} を選択し,辺AC上でマウスボタンを押し,そのまま点Dへドラッグすると垂線が引ける。 \hspace{20mm}\includegraphics[bb=0.00 0.00 403.02 319.02,height=3cm]{Fig/start06.pdf} \hspace{5mm}\includegraphics[bb=0.00 0.00 394.02 315.02,height=3cm]{Fig/start07.pdf} 最後に,垂線と辺ACの交点を求める。 \begin{center}\includegraphics[bb=0.00 0.00 409.02 312.02,height=3cm]{Fig/start08.pdf}\end{center} 図が描かれたら,「要素を動かす」ツール \includegraphics[bb=0.00 0.00 6.48 5.04,width=8mm]{Fig/move.pdf} を選択して,始めの状態(動かすモード)に戻しておく。 これで内心の作図と半径の作図ができた。内心円は描かなくてよい。 スクリプトエディタに戻り,先ほど書いた // を消して \verb|Listplot([A,B,C,A]);| を有効にし,次のスクリプトを追加し,Shift+Enterで実行すると,内接円が描かれる。なお,2行目を \verb|Setfiles("innercircle")| として,ファイル名も設定しておく。 \begin{verbatim} Circledata([D,E]); Pointdata("1",[D],["size=3"]); Letter([A,"sw","A",B,"ne","B",C,"se","C",D,"ne2","I"]); \end{verbatim} \begin{center}\includegraphics[bb=0.00 0.00 396.02 322.02,height=4cm]{Fig/start09.pdf} \end{center} 画面左上の「Figure」ボタンをクリックすると,プレビュー用のPDFができて表示される(下図左)。 描画面で点Bをドラッグして三角形の形を変えれば,それに応じて出力する図も変えることができる(下図右)。 \begin{center} \includegraphics[bb=0.00 0.00 396.02 331.02,height=4cm]{Fig/start10.pdf} \includegraphics[bb=0.00 0.00 348.02 284.51,height=4cm]{Fig/incenter03.pdf} \end{center} \vspace{\baselineskip} \ketcindy がTikZなどの作図支援ツールと異なるのは,Cinderellaの作図機能を用いてインタラクティブに図の調整ができる点である。簡単な図であれば,座標の計算は不要で,Cinderellaの作図画面を見ながら\ketcindy の作図関数でプログラムを書くだけでよい。 なお,Cinderellaの作図機能については,付録の \hyperlink{geometrytool}{作図ツール} を参照されたい。 %---------------- 関数のグラフ-------------------------- \subsubsection{関数のグラフ} 例として,$y=\sin x$ と $y=x$ のグラフを描く。 template.cdy をダブルクリックして開き,Ctrl+9 ( Windows ) / ⌘+9 ( Mac ) でスクリプトエディタを開く。 座標軸を描くので,\verb|Addax(0);| を \verb|Addax(1);| に変え,\verb|Listplot([A,B,C,A]);| は使わないので削除し,かわりに次のスクリプトを書く。 \begin{layer}{150}{0} \putnotese{80}{5}{\includegraphics[bb=0.00 0.00 552.03 409.02,height=30mm]{Fig/xsinx01.pdf} } \end{layer} \begin{verbatim} Plotdata("1","y=sin(x)","x"); Plotdata("2","y=x","x"); \end{verbatim} これだけで右のようにグラフが描かれる。 \vspace{15mm} %\begin{center}\includegraphics[bb=0.00 0.00 552.03 409.02,height=30mm]{Fig/xsinx01.pdf} \end{center} 描画範囲は点NEとSWをドラッグして適当に決めよう。また,点A,B,Cが残ったままだが,これを関数名を表示する場所として利用するために適当な位置にドラッグして移動する。 \begin{center}\includegraphics[bb=0.00 0.00 556.03 238.01,height=30mm]{Fig/xsinx02.pdf} \end{center} 関数名と$x$軸上の交点を表示するために,関数 \verb|Expr()| を使って次のように書く。 \begin{verbatim} Expr([A,"e","y=\sin x",B,"e","y=x",[-pi,0],"s2","-\pi",[pi,0],"s2","\pi", [2*pi,0],"s2","2\pi"]); \end{verbatim} 注)改行せず1行に書いてよい。 \begin{center}\includegraphics[bb=0.00 0.00 546.03 236.01,height=30mm]{Fig/xsinx03.pdf} \end{center} \verb|Figure| ボタンをクリックすると,次の図が描かれる。 \vspace{\baselineskip} \begin{center}\input{Fig/xsinx} \end{center} %---------------- 空間図形 -------------------------- \subsubsection{空間図形} \ketcindy のシステムに同梱されている samples フォルダから,s05spacefigure フォルダを開き,s0501basic.cdy をひな形として使う。適当な場所に複製を作り,名前を変えておくとよい。ここでは,3Dbasic.cdy として進める。 3Dbasic.cdy を開くと次のような画面になる。 \vspace{\baselineskip} \begin{center} \includegraphics[bb=0 0 879.05 447.02 , width=8cm]{Fig/3dstart.pdf} \end{center} 下のスライダで点TH,Fl をドラッグすると,空間での視点の位置が変わる。(座標軸が回転する) ここでは,正四面体と,高さを求めるのによく使われる補助線を描いてみよう。スクリプトエディタを開き,次の3行を消す。 \begin{verbatim} Ch=[1]; if(contains(Ch,1), Skeletonparadata("1",[1.5]); ); \end{verbatim} かわりに次のスクリプトを書いて Shift+Enter で実行する。 \begin{layer}{150}{0} \putnotese{90}{0}{ \input{Fig/tetrahedron}} \end{layer} \begin{verbatim} Putpoint3d("A",2*[-1,-1/sqrt(3),0],"fix"); Putpoint3d("B",2*[1,-1/sqrt(3),0],"fix"); Putpoint3d("C",2*[0,sqrt(3)-1/sqrt(3),0],"fix"); Putpoint3d("D",2*[0,0,sqrt(3)],"fix"); Putpoint3d("M",(B3d+C3d)/2,"fix"); phd=Concatobj([[A,B,C],[A,B,D],[A,C,D],[B,C,D]]); Spaceline("1",[D,M,A]); VertexEdgeFace("1",phd,["Edg=nogeo"]); Nohiddenbyfaces("1","phf3d1"); \end{verbatim} %---------------- 作表 -------------------------- \subsubsection{作表} \TeX\ で表を作るのはかなり面倒だが,\ketcindy\ を使えば比較的簡単に作表ができる。次の図は関数の増減・凹凸表である。以下は紹介にとどめる。関数リファレンスに例を掲載しているので参照されたい。 \begin{center} \input{Fig/zogen3} \end{center} % ====== 他のソフトとの連携 =============== \subsubsection{他のソフトとの連携} \ketcindy\ はCindyscriptで記述されているが,Cindyscriptはプログラミング言語であり,数式処理ソフトではない。そこで,R や Maxima などと連携することにより,機能を拡張することができるようになっている。統計計算はR,数式処理を用いた計算はMaximaを利用すると便利である。 【例】Rを用いて箱ひげ図を描く \begin{center}\scalebox{0.8}{ \input{Fig/boxplot} } \end{center} 【例】Maxima を用いて $ \sin x $の7次のテイラー展開を行う。 \begin{center}\scalebox{0.8}{ \input{Fig/taylor}} \end{center} % ====== プロットデータ =============== \newpage \section{プロットデータ} プロットデータ(Plot Data) とは,関数のグラフや幾何要素を描くデータのことである。\ketcindy\ では PD と略すことがある。 たとえば,線分は端点の座標2つからなるリストで表現できる。曲線は,描画範囲を分割して線分の集まりとして描画しており,このときのプロットデータはそれらの線分の端点のリストである。 プロットデータの名称は\ketcindy が次の規則により命名する。 \vspace{\baselineskip} ・名称の頭部は,プロットデータを作成する関数ごとに決まっている。 ・第1引数に name が与えられる場合,name を頭部に付加する。 \hspace{10mm} 【例】\verb|Listplot("1",[[0,0],[1,2]]);| のとき,sg1 ・第1引数の name を省略できる場合,引数で用いられた点の名前を頭部に付加する。 \hspace{10mm} 【例】\verb|Listplot([A,B,C]);| のとき,sgABC \vspace{\baselineskip} プロットデータを生成したときは,Cindyscriptエディタのコンソールにその名称を表示する。たとえば,\verb|Listplot([A,B,C,A])| で三角形ABCを描くと,コンソールに \hspace{10mm} \verb|generate Listplot sgABCA| と表示される。プロットデータを操作する関数では,この名称を用いる。 \begin{center}\includegraphics[bb=0.00 0.00 298.02 115.01,width=6cm]{Fig/pdtoconsole.pdf} \end{center} プロットデータの内容は,Cindyscriptの println() 関数を用いてコンソールに表示することができる。たとえば上記の場合, \hspace{10mm} \verb|println(sgABCA)| とすると, \hspace{10mm} \verb| [[1,3],[-1,0],[3,0],[1,3]] | と表示される。A,B,C,A のそれぞれの座標からなるリストである。 プロットデータは,Cindyscriptによるプログラムで作成してそれを\ketcindy で利用することもできる。( \hyperlink{listplot}{Listplot()の例} を参照)ただし,要素の数が大きいとエラーとなるので,1つのプロットデータの要素は200程度とするのがよい。これより多い場合は分割する。 \newpage %======= Cindyscript =========== \section{Cindyscript} \subsection{Cindyscriptエディタ} CindyscriptはCinderellaのプログラミング言語で,Cinderella上のスクリプトエディタで記述する。スクリプトエディタは,「スクリプト」メニューの「Cindyscript」を選択するか,Ctrl+9 (Windows) / ⌘+9 (Mac) で開く。\\ \vspace{110mm} \begin{layer}{150}{0} \putnotese{5.5}{15}{\includegraphics[bb=0.00 0.00 687.84 451.68,width=12.5cm]{Fig/slot.pdf}} \arrowlineseg[16]{20}{20}{10}{90} \putnotese{15}{5}{スロット} \arrowlineseg[16]{40}{20}{10}{100} \putnotese{32}{5}{ページ名} \arrowlineseg[16]{80}{20}{15}{140} \putnotese{50}{5}{フォントサイズ} \arrowlineseg[16]{107}{20}{15}{140} \putnotese{80}{5}{描画面を前面に} \arrowlineseg[16]{120}{20}{10}{110} \putnotese{110}{5}{実行} \arrowlineseg[16]{125}{20}{10}{90} \putnotese{120}{5}{ヘルプ} \putnotese{90}{35}{メインウィンドウ} \putnotese{90}{65}{コンソール} \end{layer} \noindent {\bf スロット} スロットはそれぞれの実行タイミングでスクリプトを実行するものであり,他のプログラミング言語にはない特徴である。(スロットが隠れているときは境界線をドラッグする) よく使うスロットは次の通り。 \begin{tabbing} 123456789012345678\=\kill Draw \>描画面になにか変化が起きる(点を動かすなど)と実行される。\\ \>通常はここにスクリプトを書く。ひな形の templatebasic1.cdy では,\\ \>Ketinit() などが記述された figures ページが用意されている。\\ Initialization \>スクリプトを実行すると、始めに1度 だけ実行される。\\ \>したがって,関数定義や変数の初期設定などを書く。\\ \>ひな形の templatebasic1.cdy ではここに KETlib というページがあり,\\ \>\ketcindy の初期設定に関する記述がある。\\ Key Typed \>キーボードが押されたとき実行される。\\ \> KeTCindyでは,ボタンによらずキーボードで出力を行うための\\ \>スクリプトが書かれている。 \end{tabbing} 1つのスロットに複数のページを作ることができる。たとえば,KETlib以外に初期設定のスクリプトを書く場合は,Initialzation スロットのフォルダアイコンをクリックすることで新しいページができる。 KeTCindyの描画コマンドは Draw スロットに書く。 \vspace{\baselineskip}\noindent {\bf ページ名} 各スロットでは,ページを分けて記述することができる。各ページの名前はスクリプトエディタの上の欄に書くことができる。 %\vspace{\baselineskip} \noindent {\bf フォントサイズ} 編集エリアのフォントサイズを変更する。 %\vspace{\baselineskip} \noindent {\bf 実行ボタン} プログラムを実行する。プログラムの実行は Shift+Enter でもできる。 %\vspace{\baselineskip} \noindent {\bf ヘルプボタン} ブラウザを開いてマニュアルを表示する。 %\vspace{\baselineskip} \noindent {\bf コンソール} print() 関数の結果やエラーメッセージが表示する。エラーメッセージは,「WARNING:」または「syntax error」に続いてその内容と該当する行番号が示される。これを読んでスクリプトの書き間違いをチェックする。 \subsection{スクリプトの記述} 編集エリアにプログラムを書くと,文字が色分けされて表示される。組み込み関数は青,ユーザー定義関数は紫,定義されていない関数は赤,文字列は緑で表示される。KeTCindyの関数はユーザー定義関数なので紫色で表示される。 \begin{layer}{150}{0} \putnotese{35}{5}{\includegraphics[bb=0.00 0.00 350.02 184.01,width=7cm]{Fig/coloring.pdf} } \putnotee{5}{27}{組み込み関数} \arrowlineseg[20]{35}{27}{10}{180} \putnotee{77}{9}{ユーザー定義関数} \arrowlineseg[10]{67}{9}{8}{0} \putnotee{110}{17}{文字列} \arrowlineseg[15]{80}{17}{28}{0} \end{layer} \vspace{45mm} 編集エリアでは,Ctrl+C と Ctrl+V によるコピーアンドペースト,Ctrl+X と Ctrl+V によるカットアンドぺーストができる。他のテキストエディタなどとの間でのコピーも同様にできる。 文字列の選択はマウスドラッグまたは Shift+カーソルキーでおこなえる。 Ctrl+F による検索はできない。 スクリプトを記述するときの基本的なルールは次の通り。 \vspace{\baselineskip} ・基本的に小文字で書く。大文字と小文字は区別される。 \hspace{5mm}\ketcindy では,Cindyscriptに組み込みの変数名・関数名と区別しやすいように, \hspace{5mm}次の規則により名前を付けている。 \hspace{5mm}・グローバルな変数はすべて大文字か,大文字で始まるものとする。 \hspace{5mm}・局所変数は小文字で,関数定義の冒頭で regional() により局所変数として宣言する。 \hspace{5mm}・関数名は大文字で始まる。 ・複数の半角スペースは無視され,一つの半角スペースと見なされる。 ・行末にはセミコロンを書く。改行だけでは命令文の終わりにならない。 \subsection{変数と定数} \vspace{\baselineskip}\noindent {\bf 変数} Cindyscriptでは,変数の型の宣言は不要。使用されたときに何が代入されたかで自動的に型が決まり,さらに,宣言し直さなくても異なる型の値を代入することができる。 \vspace{\baselineskip} 【例】 \begin{verbatim} a=10; b=2; c=a+sqrt(b); a="の平方根"; println("10に "+b+a+" を加えると"+c); \end{verbatim} この例では,始めにaは整数型であるが,4行目で文字列に変わる。 文字列はダブルクウォートでくくる。異なる型の演算には注意を要するが,例外的に,5行目のように,文字列と数を+演算子で結ぶと,数は文字列化されて結合される。 \vspace{\baselineskip}\noindent {\bf 予約定数} Cindyscriptでは,円周率 (pi) と虚数単位(i) が定数として予約されている。i は,変数として使用することもでき,そのような場合,虚数単位に戻すには \verb|i=complex(0,1)| を実行する。 \vspace{\baselineskip}\noindent {\bf KeTCindyの予約変数} \ketcindy が内部的に使用する予約変数がある。そのうち次のものはユーザーが値を変更または設定することができる。 \begin{tabbing} 1234\=567890123\=45678989012345678901234567890123\=\kill \>Fhead \>書き出されるファイル名の頭部。Setfiles() によって設定できる。\\ \>Texparent \>親プロセスのファイル名。Setparent()によって設定できる。\\ \>Dirhead \>パスの頭部\\ \>Dirlib \>ライブラリ ketlib のパス\\ \>Dirbin \>ketbin のパス\\ \>Dirwork \>作業ディレクトリのパス。Changework()によって設定できる。\\ \>Shellfile \>シェルファイル名 \end{tabbing} 以下の予約変数は,ライブラリが使用するグローバル変数であるので,ユーザーはこれらの変数に値を代入してはいけない。なお,変数は大文字小文字を区別するので,すべて小文字で書く分には支障はない。ユーザーが作るプログラムでは,すべて小文字か,先頭だけが大文字の変数を使うことを勧める。 \vspace{\baselineskip} ADDAXES, ArrowlineNumber, ArrowheadNumber, BezierNumber, COM0thlist, COM1stlist, COM2ndlist, Dq, FUNLIST, Fnamesc ,Fnamescibody,Fnameout,Fnametex, GDATALIST, GLIST, GCLIST, GOUTLIST, KCOLOR, KETPICCOUNT,KETPICLAYER, LETTERlist, LFmark, MilliIn, PenThick,PenThickInit, POUTLIST, SCALEX, SCALEY, SCIRELIST, SCIWRLIST, TenSize, TenSizeInit, ULEN, XMAX, XMIN, YaSize, YaThick, YMAX, YMIN, VLIST \vspace{\baselineskip}\noindent {\bf リスト} リストとは,数や文字などを集めたもので,それぞれのものを「要素」といい,\verb|[ ]|の中にコンマで区切って記述する。要素は型を問わない。\ketcindy\ では,曲線を描くプロットデータが座標のリストであり,リスト処理をうまく使えば \ketcindy\ で効率的に作図ができる。 リストのn番目の要素にアクセスするのに,アンダーバー\_ を使う。 \begin{verbatim} list=[1,2,3,4,5]; println(list_2); \end{verbatim} とすると,list の中の2番目の要素 2 が表示される。 \begin{verbatim} list=[1,2,3,4,5]; list_2="a"; \end{verbatim} とすると,list の中の2番目の要素が文字 a に変わる。 たとえば,曲線の交点を求める \hyperlink{intersectcrvs}{Intersectcrvs()} の戻り値から交点の座標を求めるにはアンダーバーを使う。使用例は,Intersectcrvs() の例を参照されたい。 \subsection{よく使うCindyscriptのコマンド} \vspace{\baselineskip}\noindent {\bf 値の表示} print(値) :コンソールに値を表示する。改行しない。 println(値) :コンソールに値を表示する。改行する。 \vspace{\baselineskip} 【例】関数Intersectcrvs() の戻り値を表示する。 \begin{verbatim} tmp=intersectcrvs("sgAB","crCD"); println(tmp); \end{verbatim} \vspace{\baselineskip}\noindent {\bf 条件判断} if(A,B,C) : もしAが真なら(成り立てば)Bを,偽ならCを実行する。 Aの条件判断には次のものがよく使われる。 \begin{tabbing} 1234\=56789012345678989012\=3456789012\=34567890123\=\kill \> \verb|a|が\verb|b|より大きい \> \verb|if(a>b|,$\cdots$\\ \> \verb|a|が\verb|b|より小さい \> \verb|if(a \verb|a|が\verb|b|以上 \> \verb|if(a>=b|,$\cdots$ (\verb|>|と=の順序に注意)\\ \> \verb|a|が\verb|b|以下 \> \verb|if(a<=b|,$\cdots$ (\verb|<|と=の順序に注意)\\ \> \verb|a|と\verb|b|が等しい \> \verb|if(a==b|,$\cdots$ (等号を2つ)\\ \> \verb|a|と\verb|b|が異なる \> \verb|if(a!=b|,$\cdots$\\ \end{tabbing} if 文はネストして使うことができる。 \vspace{\baselineskip} 【例】n が正,負,ゼロのいずれかを判断して,コンソールに表示する。 \begin{verbatim} if(n>0,print("正"),if(n==0,print("0"),print("負"))); \end{verbatim} \vspace{\baselineskip}\noindent {\bf 繰り返し} repeat(n,操作) :操作をn回繰り返す。 repeat(n,s,操作) :操作をn回繰り返す。カウンタとしてsを使う。(文字は他でも可) \vspace{\baselineskip} 【例】Aを4個並べて描画面に表示する。 \begin{verbatim} repeat(4,s,drawtext([s,0],4)); \end{verbatim} ここで,sの値は4回繰り返すうちに,1,2,3,4と変化する。 \vspace{\baselineskip}\noindent {\bf リストによる繰り返し} forall(list,処理) :リストの要素すべてに渡るように繰り返す。 \vspace{\baselineskip} 【例】点のペアをリストとし,線分を描く。 \begin{verbatim} sglist=[[A,B],[C,D],[E,F]]; forall(sglist,Listplot(#)); \end{verbatim} これは, \begin{verbatim} Listplot([A,B]); Listplot([C,D]); Listplot([E,F]); \end{verbatim} とするのと同じ。ここで,\verb|#|は実行変数と呼ばれ,リストのそれぞれの要素を表す。 \vspace{\baselineskip}\noindent {\bf ユーザー定義関数} ユーザー定義関数は次の書式で定義する。 \hspace{10mm}関数名(引数):=(処理) \vspace{\baselineskip} 【例】 引数の値の正負を表示する関数 sign(n) を定義する。 \begin{verbatim} sign(n):=( if(n>0,print("正"),print("0または負")); ); \end{verbatim} 定義した関数は \begin{verbatim} n=3; println(sign(n)); \end{verbatim} のようにして使う。 KeTCindyでは,アニメーションPDFを作成するときに,フレームを定義するのに使う。 \vspace{\baselineskip}\noindent {\bf 幾何要素へのアクセス} Cinderellaでは,点の座標は同次座標で表されており,点の名称でそのまま座標を取得できることが多い。そのため,たとえば Listplot() 関数では,点を指定するのに,座標 \verb|[a,b]| の代わりに点名を使うことができる。 \vspace{\baselineskip} Listplot() の書式1 \verb|Listplot("1",[[1,1],[4,5]])| Listplot() の書式2 \verb|Listplot("1",[A,B])| \vspace{\baselineskip} しかし,明確に直交座標で取得したい場合は \verb|A.xy|(x,y 座標) \verb|A.x|(x 座標 ) \verb|A.y|(y 座標) として取得する。 \vspace{\baselineskip}\noindent {\bf リスト処理} Cindyscriptのリスト処理のうち,よく使うものを挙げる。 aからbまでの整数のリストは \verb|a..b| (ドット2つ)で生成できる。このリストの各要素を番号代わりに使って,\verb|apply(list,expr)| を用いると座標のリストを作ることができる。\verb|apply(list,expr)| は,\verb|list| の各要素に,処理 \verb|expr| を施したリストを作る関数である。 \vspace{\baselineskip} 【例】星形五角形を描く \begin{verbatim} r=2; pt=apply(0..5,r*[cos(pi/2+#*4*pi/5),sin(pi/2+#*4*pi/5)]); repeat(5,s,Listplot(text(s),[pt_s,pt_(s+1)])); \end{verbatim} ここで,\verb|text(s)| は,数を文字列に変換するCindyscriptの組み込み関数。 \vspace{\baselineskip}\noindent {\bf よくあるエラーメッセージ} \begin{tabbing} 1234\=5678901234567890123456789\=\kill \>Index out of range \>リストの要素の個数外の値を指定した。\\ \>String Index out of range \>文字列のインデックスが範囲外。\\ \>Potential type mismatch \>変数の型が合わない。文字と実数をかけ算したときなど。\\ \>unexpected ) \>括弧の種類が前後で合っていない。\\ \>close without open \>閉じ括弧に対応する開き括弧がない。\\ \>open without close \>開き括弧に対応する閉じ括弧がない。\\ \>Unknown function \>関数が定義されていない。 \end{tabbing} \vspace{\baselineskip} その他,Cindyscriptについては,スクリプトエディタからヘルプを参照されたい。 \end{document}