KETpicのtips
- Scilab & KETpicで出力したTeXファイルを使う
- 挿入用のPDFファイルを作る
- 重要なキーボード・ショートカット
- よくあるエラー
- プレビュー Windisp
- 表示・描画する枠 Setwindow
- 図の縦横比を変える Setscaling
- 3次元のプロットの視点・投影方向
- よく使う記法
- 終了時に音を鳴らす
- 実行にかかる時間を計る
- Virtualbox上のUbuntuでScilabを使うには
Scilab & KETpicで出力したTeXファイルを使う
Scilabから出力したTeXファイルはpicture環境で書かれています。たとえば、曲線上の矢印で生成したTeXファイル"arrow_sample2.tex"を例にとってみます:
%%% tex/arrow_sample2.tex 2015-2-3 1:1
%%% arrow_sample2.sce 2015-2-3 0:52
{\unitlength=2cm%
\begin{picture}%
( 1.40000, 1.40000)( -0.20000, -0.20000)%
\special{pn 8}%
%
\special{pn 14}%
\special{pa 787 0}\special{pa 0 -787}\special{pa 0 0}\special{pa 787 0}%
(中略)
\settowidth{\Width}{O}\setlength{\Width}{-1\Width}%
\settoheight{\Height}{O}\settodepth{\Depth}{O}\setlength{\Height}{-\Height}%
\put(-0.0500,-0.0500){\hspace*{\Width}\raisebox{\Height}{O}}%
%
%
\end{picture}}%
これを実際に図として利用してみましょう。figure環境内やminipage環境内で\input{..}すればよいです。ここでは、以下のようなTeX文書を用意してみます:
%#! latexmk -dvi -pdfdvi line_integral_sample.tex
\documentclass[b5paper]{article}
\usepackage{amsmath,amssymb}
\usepackage[top=4cm, bottom=4cm, left=1cm, right=1cm, includefoot]{geometry}
\usepackage[T1]{fontenc}
\usepackage{euler}
\usepackage{concrete}
\newlength{\Width}%
\newlength{\Height}%
\newlength{\Depth}%
\pagestyle{empty}
\renewcommand{\labelenumi}{(\arabic{enumi})}
\begin{document}
{\Large 線積分の問題のサンプル}\\[15mm]
\begin{minipage}{\textwidth}
\begin{minipage}{4cm}
\input{arrow_sample2}
\end{minipage}
\begin{minipage}{11cm}
次で与えられる閉曲線$C$に対し、線積分
$\displaystyle \int_C (x+y)\,dx+xy\,dy$の値を求めよ。
\begin{enumerate}
\item 4点$A=(1,0),\,B=(0,1),\,O=(0,0),\,A$を通る折れ線$ABOA$
\item 反時計回りに向き付けられた、原点を中心とし半径が$1$の、
点$A$から点$B$までの円弧$C_4$
\end{enumerate}
\end{minipage}
\end{minipage}
\end{document}
これをコンパイルすると、次のようになります:

挿入用のPDFファイルを作る
上の手順では、直接TeX文書に挿入しましたが、一旦PDFファイルにしてから、画像としてTeX文書に貼り付ける方法もあります。拡大縮小が手軽にできるので、私は普段こちらを使っています。
次の手順はUbuntu上で行っています。KETpicを利用して得られたTeXファイルhoge.texを、実際にTeX文書に図(ここではPDF形式とする)として挿入するために、次のTeXファイルhoge_ketpic.texを用意します:
hoge_ketpic.tex
\documentclass{article}
\usepackage{amsmath,amssymb}
\newlength{\Width}%
\newlength{\Height}%
\newlength{\Depth}%
\pagestyle{empty}
\begin{document}
\input{hoge}
\end{document}
自分の場合は、これを latexmk (platex > dvipdfmx) にかけて、PDFを作り、それを pdfcrop で余白を削除、最後に extractbb でバウンディングボックスの情報を取っています:
latexmk -dvi -pdfdvi hoge_ketpic.tex
pdfcrop hoge_ketpic.pdf hoge_ketpic.pdf
extractbb hoge_ketpic.pdf
これであとは、TeX文書の使いたいところでincludegraphics*{hoge_ketpic.pdf}とすればOKです。そして、この一連の流れを、以下のようにシェルスクリプトconvert_ketpic.shにしておくと便利です:
templete_ketpic.tex
\documentclass{article}
\usepackage{amsmath,amssymb}
\usepackage{euler}
\newlength{\Width}%
\newlength{\Height}%
\newlength{\Depth}%
\pagestyle{empty}
\begin{document}
\input{tmp}
\end{document}
convert_ketpic.sh
#!/bin/bash
# -*- coding: utf-8 -*-
# convert_ketpic.sh 使い方は convert_ketpic.sh hoge.tex など
file=${1%.tex}_ketpic.tex # hoge.tex > file=hoge_ketpic.tex
name=${1%.tex} # hoge.tex > name=hoge
pdf=${1%.tex}_ketpic.pdf # hoge.tex > pdf=hoge_ketpic.pdf
cp templete_ketpic.tex $file
sed -i -e "s/tmp/$name/g" $file # $file中の"tmp"というワードを$nameで置き換える
latexmk -dvi -pdfdvi $file
pdfcrop $pdf $pdf
extractbb $pdf
[このページのトップへ]
重要なキーボード・ショートカット
Scilab中で重要なキーボード・ショートカットたち:
Ctrl + Space | (関数を途中まで書いて) 補完する |
Ctrl + e | 選択した領域を実行 |
F5 | 現在のファイルを保存して実行 |
Ctrl + d | 現在カーソルのある行をコメントアウト。領域を選択した状態だと、その領域をコメントアウトする |
Ctrl + Shift + d | 選択した領域をコメントアウトを外す |
よくあるエラー
- Paramplotなどでのパラメータの注意
例えば、一見同じように見えて、Paramplotで以下の式は前者はエラーで後者は正常に実行されます:
C1=Paramplot('[cos(s), sin(s)]', 's=[0,2*%pi]'); C2=Paramplot('[cos(t), sin(t)]', 't=[0,2*%pi]');
- 改行について
関数 (マクロ) の途中で改行するときは、'..'を文末に加えましょう。
A=[1,0,0;.. 0,2,0;.. 0,0,4]; B=[1,0,0; 0,2,0; 0,0,4]; // A=B
- 曲面の描画時のエラー1
Wireparadata関数で、エラーが出ることがありますが (sample:曲面上の曲線の描画)。原因はわかっていません。
- 曲面の描画時のエラー2
曲面の描画でエラーが出たときは次のことを疑ってみたほうがよいでしょう。曲面のパラメータ付けで原点を含むケース、例えば、関数 $f(x,y)=x^2y\;(0\leq x\leq 1,\,0\leq y\leq x)$ のグラフのワイヤーを描画するときにエラーが出ます。原点 $(x,y)=(0,0)$ の部分が問題になるようで、$x=0$ の部分を避けるようにして、以下のようにコードを書くとエラーが回避されます:
e=0.01; fd=list('z=x^2*y',.. 'x=s', 'y=s*t', 's=[0+e,1]', 't=[0,1]', 'esn'); // 's=[0,1]'としてはエラーが出る surface=Sf3data(fd, 25, 25); outline=Sfbdparadata(fd, 100); wire=Wireparadata(outline, fd, 5, 5);
プレビュー Windisp
Setwindowや3次元プロットの投影方向を決めたり、グラフの表示の感じをつかむために、Windisp関数をよく使います。例えば、曲面の陰線処理は時間がかかるため、計算の早い、曲面のワイヤーフレームをWindispで表示させてみて、構図を決めておいたほうがよいでしょう。選択領域を実行するショートカットCtrl + e とあわせて使うと効率的です。
Windisp(プロットデータの列);
[このページのトップへ]
表示・描画する枠の設定 Setwindow
Setwindow([xmin,xmax],[ymin,ymax])で、表示する範囲を $[\textrm{xmin},\textrm{xmax}]\times[\textrm{ymin},\textrm{ymax}]$ に設定します。Windispで表示する範囲や、TeXファイルに出力するときの描画範囲に影響します。3次元のプロット場合は、Setangleで指定した視点(投影方向)から見た、見かけの範囲になります。
Setwindow([xmin,xmax],[ymin,ymax]);
[このページのトップへ]
図の縦横比を変える Setscaling
Ketpicでは、デフォルトで図の縦横比は1:1になります。縦横比を変えるには、Setscaling(数値r)で、出力する図を縦r:横1の比率に変えることができます。これは、Windispにも、出力したTeXファイルにも適用されます。

Setwindow([-15,15], [-0.5,1.2]);
Setscaling(6);
curve=Paramplot('[x, sin(x)/x]', 'x=[-25,25]', 'N=300');
//Windisp(curve);
Openfile('tex/scaling_sample.tex');
Beginpicture('0.5cm');
Drwline(curve, 0.4);
for i=-9:9
Htickmark(%pi/2*i, ' ');
end
Vtickmark('m0.5n1r1');
Expr([%pi/2,0], 's6', '\frac{\pi}{2}');
Expr([%pi,0], 'n3e3', '\pi');
Expr([%pi-0.4,1/2], 'e', '\displaystyle y=\frac{\sin x}{x}');
Endpicture(1);
Closefile();
Setscaling(1);
[このページのトップへ]
3次元のプロットの視点・投影方向
Setangle(theta, phi);
3次元のプロットでは、ひとつ方向ベクトルを決めて、その方向から、3次元のプロットデータを2次元のプロットデータに投影します。この方向ベクトルは、図のように $\varphi,\,\theta$ の角によって決まります。
上述のように、Windispでプレビューしながら調整すればよいでしょう。
[このページのトップへ]よく使う記法
- 行末
行末にセミコロン ; を入れると、実行結果が出力されません。逆に、セミコロンを入れないことで、実行結果が出力できます。通常はコンソールのログを流さないように、セミコロンは入れておくのが良いかと思います。
- ベクトル
u=[1,2,3,4]; v=1:4; // u=v w=1:2:8; // w=[1,3,5,7]
Scilabでは、(列)ベクトルの記法は、要素を[]で囲むようにします。
n:mは、ベクトル $[n,\,n+1,\dotsc,\,m-1,\,m]$ を表します。
n:d:mは、ベクトル $[n,\,n+d,\,n+2d,\dotsc,\,n+Nd]$ を表します。ただし、$N$ は $n+Nd\leq m$ となる最大の自然数です。dは負でもよいです。- ベクトルの演算 (和、スカラー倍、ノルム、要素の個数、取り出し、追加)
u=[1,2,3,4]; v=1:4; // u=v U=u+v; // 和 V=4*u; // スカラー倍 norm(u) // ノルム: \sqrt(1^2+2^2+3^2+4^2) length(u) // 要素の個数: 4 u(1,3) // 1番目と3番目の要素を取り出す: [1,3] u(2:4) // 2から4番目の要素を取り出す: [2,3,4] u($+1)=5 // ベクトルuに要素5を追加する: u=[1,2,3,4,5]
- 繰り返し (for文)
上に書いたベクトルの記法を使って
for n:m ... end for n:d:m ... end
- 条件分岐 (if文)
if 条件式 then ... else ... end if 条件式 then ... elseif 条件式 then ... else ... end
条件式には次の比較演算子が使えます:
a==b a<>b a<b a>b a<=b a>=b & (and) | (or) ~ (not)
終了時に音を鳴らす
Scilabでsceファイルを実行し終えても、beep音が鳴ったりしません。ときには、長い計算時間を必要として、計算中に別作業もしたくもなるのが人情。実行後、音(WAVファイル)を鳴らすには、たとえば、ファイルの最後に次のコードを追加すればOKです:
y=loadwave("../sound/hoge.wav");
sound(y)
ただし、カレントディレクトリの下のsoundフォルダにhoge.wavがあると仮定しています。
[このページのトップへ]
実行にかかる時間を計る
ファイルの実行にかかる時間を計るときは、ファイルの最初にtic()を、ファイルの最後にtoc()を挿入するとよいです:
tic();
....
T=toc();
minute=floor(T/60);
second=floor(T-60*minute);
disp(strcat([string(minute), ' minutes ', string(second), ' seconds']));
こうすると、実行にかかった時間がコンソールに表示されるようになります。たとえば、パラメータ付けされた曲面の描画のソースコードを参照してみてください。
[このページのトップへ]
Virtualbox上のUbuntuでScilabを使うには
すっかりここの文章を放置していましたが、現在(2016年)はVirtualbox上のUbuntuでもScilabが問題なく使えています。
自分の場合は、自宅ではWindows 7で、TeX原稿を打つときはVirtualbox上でUbuntuを動かしています。最新のVirtualbox上のUbuntuでScilabを動かしてみようとすると、OpenGLの関係で起動すらしてくれないありさまです。回避策として、Virtualboxは古めのVersion 4.3.14を使い、Virtualboxの "設定" > "ディスプレイ" > "ビデオ" から、"3Dアクセラレーションを有効化" のチェックボックスを消す(!)という奇手を打ちます。
正直、ここまでして使うメリットがあまりないので、Windows上でScilabを実行して、適宜出力したTeXファイルをUbuntuの方に渡しているのが現状です。