coutの作業は95レイアウトを埋めます

LINUX の利用について (参考資料)
応用数学
高橋 慶紀
平成 24 年 6 月 1 日
概 要
この資料はもともと理学部開設当初に情報科学 I を担当していた時に行っていた講義の内容
を、研究室に配属になった卒研生の指導に役立てるために 2004 年頃に修正したものである。そ
の頃の情報処理室に導入されていたシステムに合うように修正が施された。その後、平成 21 年
後期に開講された情報処理演習 II の第 1 回目と第 2 回目の講義の参考資料として用いるために
再修正を行った。
平成 24 年度にさらに追加の修正を行った。
目次
1
2
はじめに
1.1
login と logout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
3
1.2
端末の利用
3
Linux におけるファイルシステムの利用 I
2.1
2.2
3
4
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
ディレクトリーについて . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ファイル操作に関するコマンド . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ファイルシステムの利用 II
3.1
慣用的なファイルの命名法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2
3.3
ディレクト操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ファイルの属性と保護 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
シェルについて
4
5
5
5
6
6
ファイル名とメタキャラクタ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
8
5
標準入出力とリダイレクト、パイプ
5.1 練習問題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
10
6
ジョブ管理
10
7
Editor について
11
4.1
7.1
7.2
vi と emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
emacs の利用法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
12
テキストの入力と日本語の入力 . . . . . . . . . . . . . . . . . . . . . . . .
12
13
7.2.1
7.2.2
オンラインチュートリアル . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
7.2.3
7.2.4
8
機能の拡張 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
13
TeX、LaTeX 入門
8.1 TeX, LaTeX について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
14
LATEX を用いた文書の整形処理の実際の例 . . . . . . . . . . . . . . . . . .
LaTeX のソースファイルの作り方 . . . . . . . . . . . . . . . . . . . . . .
15
15
8.1.3 練習問題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
文書のスタイル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.2.1 LaTeX のソースファイルの構造 . . . . . . . . . . . . . . . . . . . . . . . .
16
16
16
各種のレイアウトと環境 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.1.1
8.1.2
8.2
8.2.2
8.2.3
箇条書きのための環境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
18
8.3
8.2.4 文字の大きさと字体の指定 . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.2.5 練習問題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
数式の清書出力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
19
19
8.4
8.3.1 数式モードで利用できる数式や記号など . . . . . . . . . . . . . . . . . . .
配列や表の出力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
21
空白、スペースの挿入 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
emacs の利用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
練習問題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
23
24
Fortran を用いたプログラムの開発
9.1 開発のための手順 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
24
モジュール副プログラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
モジュールの利用のしかた . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
26
9.2.2 モジュールを利用する場合のコンパイルの方法 . . . . . . . . . . . . . . . .
emacs を利用した fortran のソースプログラムの作成 . . . . . . . . . . . . . . . .
28
28
8.5
8.6
8.7
9
スペルチェック aspell の利用法 . . . . . . . . . . . . . . . . . . . . . . . .
9.2
9.2.1
9.3
10 グラフ表示
29
A vi 入門
30
A.1 vi の利用法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.2 便利な使い方 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
32
A.3 英文の文書のスペルチェック . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.4 練習問題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
33
2
はじめに
1
1.1
login と logout
複数の利用者が同じコンピュータを利用する場合、あらかじめ利用者登録をして、利用の開始時
には最初の画面に現れる「ユーザ名」に利用者を識別するログイン名を入力し、次の画面でパス
ワードを入力する必要がある。パスワードの管理には細心の注意を払うこと。すぐに推測できそう
な簡単なものは避け、ときどきパスワードを変更するのが望ましい。
利用が終わった時点では、必ずログアウトするようにこころがける。
1.2
端末の利用
コンピュータを利用した作業の一部は、マウスなどを利用して行なうことができる。しかしなが
ら、作業の効率を考えた場合キーボードをできるだけ利用する癖をつけた方がよい。普段からブラ
インドタッチなどの練習をしておくことをすすめる。
キーボードを用いてコンピュータを操作するには、端末(Terminal)と呼ばれるウィンドウを
画面上に表示して利用する。画面の背景部分をマウスの「右」ボタンでクリックすると現れるメ
ニューで「端末を開く」を選択すると端末のウィンドウが現れる。端末の中には、入力を促す記
号($: プロンプト)の次にカーソルが表示される。キーを入力すると、対応する文字、記号など
がカーソル位置に表示される。
コンピュータを操作するには、コマンドと呼ばれる文字列を入力して Enter を押すと、対応す
る処理を実行し、必要に応じて処理内容に関係があるメッセージなどが画面に出力が表示される。
以下に、簡単な操作の例を示す。
$ date
2006 年
$
4 月 27 日 木曜日 14:51:51 JST
これは、日付を表示する date というコマンドを入力した場合の例である。基本的には、このよう
なコマンドの入力を繰り返すことによって必要な処理を行なう。
オンラインマニュアル
Linux には利用者の役に立つ多くのコマンドが用意されている。それらの
利用法についてはオンラインのマニュアルが利用できる。そのための代表的なコマンドが man と
info である。それぞれの使い方は以下のように入力する。
$ man man
...
: man の使い方を表示
$ info
$ info info
: info マニュアルのトップページが表示される
: info の説明を表示
info の場合、次のページに移動するには文字 n 又は、スペースキーを入力し、前のページを表示
するには b を入力する。q (quit) を入力すればいつでも説明を終了できる。情報がツリー状に管
理されているので選択メニューが現れることがある。その場合、必要とする項目にカーソルを合わ
せ Enter を入力する。
3
Linux におけるファイルシステムの利用 I
2
コンピュータの記憶装置には、用途によっていろいろあり、アプリケーションプログラムや各種
の文書ファイルを保管するために利用される。保管されるファイルは、コンピュータのプログラム
によって管理されることになるが、その方法は OS (WindowsXP, UNIX, Linux などの管理ソフト
ウェア) 毎に異なっている。ここでは、Linux におけるファイルシステムの概要と、それを利用し
て各ユーザがファイルを操作する方法について述べる。
Linux におけるファイルシステムは次のような特徴がある。 • 何でも(論理的には)ファイルのように取り扱える。
• ツリー状の構造(ディレクトリとファイル)を用いて大量のファイルを分類し、管理する。
• 自由度のあるファイル(長さ、大文字小文字の区別あり)の命名法。
2.1
ディレクトリーについて
Linux では、樹木をひっくり返したような階層構造を用い、コンピュータに含まれるすべての
ファイルを整理し分類する。したがって、ディレクトリは文書を入れる文書箱のようなものと考え
たらよい。樹木の根にあたる root (ルート)と呼ばれるディレクトリがあり、その下に別のディ
レクトリまたは、ファイルが作られる。データの一意性を確保するため、同じディレクトリの下に
作るファイル、またはディレクトリは互いに異なる名前である必要がある。
予め名前が決まっている特別なディレクトリがあり、それには以下のようなものがある。
ディレクトリの名称
表示のしかた
ルートディレクトリ
/
ホームディレクトリ
~
.
..
カレントディレクトリ
親ディレクトリ
子ディレクトリ
この説明からもわかるように、あるファイルを指定するには2つの方法がある。
1. 絶対パス名(ルートディレクトリから)の指定
ルートディレクトリから、そのファイル名までの全てのディレクトリを用いてファイルを指
定する。
2. 相対パス名(カレントディレクトリから)の指定
カレントディレクトリから始まり、そのファイル名までに至るディレクトリを指定する。
ファイル名の最初に root を表す記号 / があるかでどちらの指定かを知ることができる。
Linux では、通常各利用者に固有のファイルやディレクトリは、/home/login_name というホー
ムディレクトリの下に作られる。理学部の場合は、/usr/users?/login_name (? は、1 ∼ 4 の数
字、または a ∼ e までのアルファベット) の下に作られている。
Linux で利用される多くのコマンドは /usr/bin ディレクトリの下にまとめられている。コマン
ド (cmd) がどこにあるかを知るには which コマンドを利用し、次のように入力する。
$ which cmd
4
ファイル操作に関するコマンド
2.2
ファイル操作に用いられる代表的なコマンドとその用途を以下にまとめた。
コマンド名
機能と利用例
pwd
mkdir
カレントディレクトリの絶対パス名を得る
ディレクトリの作成
例 mkdir abc (ディレクトリ abc を作成)
ディレクトリの消去
rmdir
例 rmdir aaa (ディレクトリ aaa を消去)
カレントディレクトリの変更
cd
例 cd Adir (カレントディレクトリを Adir に)
ディレクトリやファイル名の表示
ls
ls (カレントディレクトリにあるファイル、ディレクトリ名を表示)
ls .. (親ディレクトリにあるファイル、ディレクトリ名を表示)
ファイルの複写
cp
例 cp file1 file2 (file1 の内容を file2 に複写)
例 cp fileA dirB (fileA の内容を dirB の下に同じファイル名 fileA として複写)
mv
cat
ファイル名の変更
file
diff
ファイルの種類
ファイルの内容の表示
2つのファイルの中身を比較
練習問題
1. man コマンドで、echo、date、cal のコマンドについて調べこれらのコマンドを実際に使っ
てみなさい。
2. 自分のホームディレクトリの絶対パス名が何であるか調べなさい。
3. 自分のホームディレクトリの下に、subdir という名前のディレクトリを作りなさい。また、
これを消去しなさい。
4. ls のいろいろな使い方を man を用いて調べなさい。ls -F や ls -a を入力してみて、出力結
果の意味を考えなさい。
5. 確認のため 4. でコピーしたファイルの中身を画面に表示し、その後これを消去しなさい。
6. man を用いて、lpq、lprm コマンドについて調べなさい。また、lpq -Plp1 と入力した時の
出力結果の意味について答えなさい。
3
3.1
ファイルシステムの利用 II
慣用的なファイルの命名法
Linux には、ファイルの内容(中身)によって慣用的な名前の付け方があります。なるべく、こ
の方法にしたがった命名のしかたをするよう心がけて下さい。ファイルの内容によりファイルの最
後に修飾子をつけるのがよく行われます。 5
ファイル名の例
ファイルの内容
abc.f
abc.f90
def.c
FORTRAN のソースプログラム
FORTRAN 90 の文法にしたがうソースプログラム
C 言語のソースプログラム
lmn.o
123.a
オブジェクトファイル、ソースのコンパイル (翻訳) により作成する
xxx.tex
yyy.tar
zzz.gz, zzz.zip
TeX, LaTeX のソースファイル
tar プログラムによるアーカイブファイル
gzip, zip プログラムによる圧縮ファイル
xyz.tar.gz, xyz.tgz
tar を用いてアーカイブし、さらに圧縮したファイル
3.2
ライブラリ (複数のオブジェクトファイル)
ディレクト操作
次のコマンドを利用することにより、カレントディレクトリを一時的に他のディレクトリに切り
替えることができます。これらのコマンドはスタックという特別な記憶領域に現ディレクトリをひ
とつずつ順番に記憶させながらディレクトリを切り替えます (pushd)。popd コマンドにより、ひ
とつずつスタックにあるディレクトリを取り出して、ひとつずつ前のディレクトリに戻すことがで
きます。dirs コマンドでスタックの内容を知ることができます。ディレクトリをいったり来たりす
るのに便利です。
利用例
pushd another_dir
別なディレクトリに移動し、
カレントディレクトリ名をスタックに入れる。
ひとつ前のディレクトリに戻る
popd
dirs
3.3
ディレクトリスタックの内容を表示
ファイルの属性と保護
個人の所有するファイルを、人に見せたり、見せなかったり、他人にもその変更や書き換えを許
可したり、禁止したりという設定をすることをファイルの保護といいます。Linux では、ファイル
の保護を、利用者を 3 つに分類してそれぞれに対して別々の設定が可能です。この設定情報など
のファイルの情報を、ファイルの属性と呼びます。このファイルの属性に関する詳細情報を ls コ
マンドを利用して知ることができます。
ls -l -rw-r--r--rw-r--r--
1 sb93m001 100
1 sb93m001 100
drwx-----drwxr-xr-x
drwxr-xr-x
5 sb93m001 100
2 sb93m001 100
2 sb93m001 100
35 Sep
0 Oct
8 15:19 aaa
5 12:52 bbb
512 Sep 8 15:19 Mail
512 Oct 5 12:56 game
512 Oct 12 12:34 subdir
6
最初の 10 文字は、桁の範囲を 4 つに分け、それぞれ次のような情報を示しています。1 桁目は、
普通のファイル (-) か、ディレクトリであるか (d) を示しています。2 桁目以降は次のような保護
情報を表している。
桁の範囲
2–4
5–7
8 – 10
保護情報
所有者 (u)
グループ (g)
一般ユーザー (o)
記号
意味
r
読みとり可能
w
x
書き込み(消去)可能
実行可能
ファイル属性の現在保護設定の設定には chmod コマンドを利用します。
例 chmod o+r file1 file1 を誰でも見せてあげる
chmod u-r file2 file2 を一般の人には見せない
練習問題
1. ファイルを空でよいからとにかく作るには (touch ファイル名)で作ることができます。最
初の文字が a、b、c で始まるファイルを作りなさい
2. 自分の所有するファイルの詳細な情報を出力してみなさい。
3. chmod コマンドでファイルの保護情報を変更し、これを ls コマンドを用いて確かめよ
4. rm コマンドで a で始まるファイルをいっぺんに消去しなさい
5. 次のようにして、新しいファイルを作成しなさい。
cat > newfile newfile というファイルを作る場合
aaa 1行入力してリターンキー
bbb 以下同じことを繰り返す
... リーターンキーを押すまでは修正可能
...
^d 終了するとき、ctrl キーを押したまま d を入力
6. 確認のため 5. で作成したファイルの中身を表示しなさい。
7. wc、grep という名前のコマンドの使い方をオンラインマニュアルで調べ、5. で作ったファ
イルにこのコマンドを適用してみなさい
4
シェルについて
Linux では、利用者が login すると自動的にシェルというプログラムが動くことになっています。
このシェルの役割は、
利用者が入力したコマンドとプログラムとの間をとりもち(インターフェイス)、入力したコマ
ンドを解釈、実行し、利用者に結果を返すことです。
7
最近では普通 bash という名前のシェルプログラムが起動されることが多いようですが、この他
にもいろいろなシェル(sh、csh、ksh、tcsh、zsh)なども利用されています。理学部では bash の
他に zsh が利用できます。
シェルにはいろいろな便利な機能があり、効率的な作業を可能にしてくれます。また、簡単なプ
ログラムも可能です(シェルプログラムと呼ぶ)。 4.1
ファイル名とメタキャラクタ
シェルのもつ便利な機能のひとつとして、メタキャラクタと呼ばれる機能を利用すると、複数の
ファイルをひとつのファイル名ですべて表すことができます。これをうまく利用すると効率的な作
業が可能となります。メタキャラクタは、ひとつの文字または文字列で、ある範囲の文字や、文字
列をすべてあらわすものです。
メタキャラクタ
意味
利用例
*
任意の文字列
a*: abc, abb, ac, etc
?
[a-z]
任意の1文字
a?c: a2c, a3c, a5c, etc
[a-c]1: a1, b1, c1
a から z までの 1 文字
実際の利用例としては、
$ rm *.c .c で終わるファイルをすべて消去
上のような操作は、必要なファイルを誤って消去する可能性があるので、
$ rm -i *.c と入力すれば、ファイル毎に確認しながら消去できます。
5
標準入出力とリダイレクト、パイプ
Linux におけるファイルシステムの大きな特徴として、外部入出力装置へのデータ入出力をファ
イルへの入出力と同様に取り扱いを可能とする機能がある。
一般に多くの場合、実行プログラム(またはアプリケーションプログラム)は、何らかの入力
データをプログラムで読み込み、これを加工した後に結果を外部に出力するものである。これを模
式的示すと以下のようになる。
入力データ =⇒ プログラム =⇒ 計算結果など
UNIX(Linux) OS 以外の場合には、プログラムを実行させる際に必ず外部の入出力装置に関する
指示を何らかの方法でプログラムに伝える必要がある。つまり、プログラムを開発するための言語
の文法書以外に、これとは別なマニュアルを参照しなくてはならない。このことが、初めてのコン
ピュータの利用者には大きな負担となることが多かった。
8
標準入出力装置
UNIX(Linux についても同じ) では外部装置への入出力を容易にする仕組みが用意されている。
まず、標準入出力装置という考え方があり、標準的には入力装置としてキーボード、出力はモニ
ターにとする考え方がある。必ずしもこれが標準的な入出力装置ではなかった時代もありました。
つまり、
標準入力装置: キーボード,
標準出力装置: ディスプレイモニター
これで問題なければ、利用者は入出力装置について何も悩む必要はありません。ただし、意識し
て別な入力装置を利用する必要がでてくるかも知れません。その場合も以下のリダイレクトの機能
を利用して、入出力装置を簡単に切り替えることが可能です。
リダイレククト
Linux では上で説明した標準入出力装置をプログラムの実行時に、柔軟に他の装置に変更できる
仕組が用意されている。これが「リダイレククト (redirect)」と呼ばれる機能である。不等号を表
す記号 < (入力の場合), > (出力の場合)を用いることによって以下の例にしたがって標準出力
の切り替えが可能です。ファイルからのデータ入力やファイルへの出力がよく利用されるので、そ
の場合の例です。
$ cmd < input.txt > output.txt
このように入力するとコマンド cmd への入力はキーボードからではなくファイルの中身が入力
され、その出力はモニター上ではなく出力ファイル output.txt となります。出力ファイルがすで
に存在している場合は、そこに含まれている内容は上書きされ消えてしまうので注意が必要です。
上書きではなくファイルの最後にデータを追加する場合は、 > の代わりに >> を入力します。
パイプ
Linux はその設計の基本姿勢の中に、できるだけ単純な機能を有する多くの小さなプログラム
(コマンド) を数多く用意しておけば、複雑な処理が必要になる場合でも大抵の場合はそれらをう
まく組み合わせて処理が可能できるというものである。そのような場合、複数のコマンドが互いに
連携をとりながら動作する必要がある。たとえば、あるコマンド (例えばコマンド cmd1) の実行
結果である出力を次のプログラム (例えばコマンド cmd2) に引き渡すようなことが必要となる場
合がよくある。これを、今説明したリダイレクトを利用して実行しようとすると以下のように入力
する必要がある。
$ cmd1 > tmp
$ cmd2 < tmp
つまり、最初のコマンドの実行結果をあるファイル tmp に一旦保存し、それを次のコマンドの入
力とすればよい。パイプの機能を利用すれば、以下のような 1 行だけ入力すれば同じ結果が得ら
れる。
$ cmd1 | cmd2
9
ただし、この場合は中間の作業ファイル (tmp) は残りません。また、2つのコマンドはほぼ同時
に起動されるので、最初のコマンドからの出力が発生すれば、それはすぐに次のコマンドに入力さ
れます。
5.1
練習問題
1. すでに使い方について調べた echo コマンドを利用してリダイレクトの機能を利用するため
に次のように入力してみてください。
$ echo I have a pen. > ex.txt
$ echo I am a boy. >> ex.txt
....
最後にファイル ex.txt には何が入っているでしょう。
2. コマンド wc (word count の略) はファイルに含まれる単語の数を調べて出力してくれます。
次のように入力したらどのような結果が得られるでしょうか。
$ ls | wc
ls -l と入力した場合はどうでしょう。
3. 他にもいろいろ工夫して試してみて下さい。
6
ジョブ管理
バッチジョブと TSS (Time Sharing System)
PC を含め多くのコンピュータは、同時に複数のプログラムが並行して稼働しています。Windows
や UNIX(Linux) といったコンピュータの管理システム (OS) を利用している場合には、この OS
と利用者の実行するジョブとが交互に動作しています。
OS の下で利用者がコンピュータを使用する際に、Linux では OS と利用者との仲介を するシェ
ル (shell) 呼ばれるプログラムを利用することになります。このシェルに備わった機能を利用する
ことによって利用者は自分自身の利用するジョブの制御を行うことができます。まず、プログラム
をどのように実行させるかについて以下に述べる2種類の方法があることを理解しましょう。
• フォアグラウンドジョブ
シェルと同期を取りながら実行されるジョブ。このジョブが動作している場合、このプログ
ラムが終了しないと次のジョブを始めることができない。
• バックグラウンドジョブ
シェルとは同期をとらずに実行されるジョブ。 したがって、このジョブを起動しても利用者
はこのジョブの終了を待たずに別のジョブの実行が可能である。「実行中」と「停止中」の
ジョブがあります。
10
もちろん、同じコンピュータを利用している限り、すべてのジョブの実行時間が短縮されるわけ
ではありません。ただ、結果がでるまで長い時間のかかるジョブを動かしてしまったら、それが終
わるまでそのコンピュータを利用できないとすると全体の仕事の効率という面から望ましくはない
こともあります。そのような場合はこのジョブ管理の機能が役に立ちます。
フォアグランドジョブとバックグランドジョブの起動のしかたと、それらのジョブの実行状態を
変化させるために方法は以下の通りです。
$ command
$ command &
-
-
ctrl-c
フォアグランド
@ ctrl-z
@
I
@@
@
R
6
fg @
バックグランド
fg
(停止中)
stop bg
バックグランド
(実行中)
?
kill
-
強制終了
6
kill
最初からバックグランドジョブを起動するには、最後に & の記号をつけてコマンドを入力しま
す。実行中のフォアグランドジョブを強制終了するには ctrl-c を、バックグランドジョブの停止
状態にするには ctrl-z を入力します。
fg, bg, stop, kill のコマンドはジョブの状態を変えるためのコマンドです。その使い方は以下
のようにジョブの番号を指定して入力します。
$ fg %n
ただし、n はジョブの番号ですが、これは実行中のジョブを確認するためのコマンド jobs を入力
することによって確認できます。ジョブの確認にはこの他 ps コマンドもあります。
Editor について
7
計算機を利用した作業では、文書を作成したり、プログラムの開発を行うために何らかのデータ
を入力してファイルを作成し、またそのファイルを変更、修正したりすることが必要となります。
このデータ入力と、入力データの修正、変更はコンピュータ利用の最も基本的な作業です。この目
的で利用されるプログラムがエディタです。したがって、コンピュータを利用している大部分の時
間は、何らかのエディタを利用した作業に当てられているということができます。コンピュータを
うまく使いこなすためには、エディタの習熟が必須であると言えます。
7.1
vi と emacs
昔から Linux (UNIX) における標準的なエディタとして vi (vim) と emacs の 2 つが特に有名
です。習熟した利用者の大部分はこのどちらかのエディタを利用するか、用途に応じてこれらを使
い分けていると言えます。エディタには、1 度に 1 行ずつ入力や編集を行うか(行エディタ)、複
数の行を表示させながら作業を行うか(スクリーンエディタ)で 2 つの方式に分けることができ
ます。現在では、行エディタは極めて限られた場合に用いられるに過ぎません。
これらの分類に属するエディタには次のようなものがある。
11
ed, ex プリンタとキーボードが一緒になったテレタイプ端末
vi, emacs ディスプレイ上で複数の行を取り扱う
テレタイプ端末(タイプライターと思って下さい)とは、今のようなディスプレイ端末がなくて、
タイプライターがコンピュータにつながったような入出力機器でコンピュータの制御やデータ入力
をしていた時代の名残です。
• vi (ex, ed) : 以前は、UNIX OS に最初から標準でついてくるエディタで以下のような特徴
がある。
ed 行エディタ、すべての Linux で利用可
ex vi の特殊バージョン (行エディタ)
vi スクリーンエディタ、モード指向がつよい
• emacs : 以前は OS に標準として付属していなかったこともあり、場合によっては別にイン
ストールする必要あったが、現在では最初からインストールされている。
(GNU で有名な R.
Stallman によって作られた)lisp とよばれる言語を用いて機能を拡張することができ、電子
メールやファイル操作など多くの用途にも利用できる。lisp と呼ばれるプログラム言語を用
いて作られている。
プログラム名の語源は、editor macros の略から命名されたとのことですが、大きなサイズ
のプログラムであることから emacs makes a computer slow などと悪口をいう人ともいた
とのことです(現在では、コンピュータも速くなり、メモリ容量も増えたので当てはまりま
せん)
7.2
emacs の利用法
emacs の利用法について簡単に説明します。vi の使い方についての簡単な説明は、Appendix を
参考にしてください。emacs を起動するには端末のウィンドウで次のように入力する。
emacs filename &
ファイル名 filename には編集しようとするファイルを指定するが、ここで何も入力せず、後から
ファイルを読み込むこともできる。最後の& の記号は
emacs の操作には Ctrl キーや Alt キーを多用する。例えば C-c (Ctrl-c) は Ctrl キーを押しな
がら英字の “c” を入力 ls g することを意味する。バックグラウンドとして、端末のプログラムと
同時に emacs を利用するためのものである。
7.2.1
テキストの入力と日本語の入力
文章の入力は、単にキーボードから必要な文字や、数字、特殊記号を入力するだけです。単に文
字データの集まりであるテキストファイルの作成、変更が基本です。入力データは、バッファと呼
ばれる一時的な作業ファイルに収められることに注意が必要です。
日本語の入力には、C-\ を入力することにより、日本語入力モードの ON/OFF を制御できます。
12
よく利用される編集操作の一部は、emacs ウィンドウの上部に表示されるメニューを用いること
ができます。例えば、メニューで「File」をクリックすると最初の項目に「Open File ... C-x C-f」
が現れ、編集するファイルを選ぶことができます。キーボードから C-x C-f と続けて入力すること
のよって同じ操作を行うことができます。操作性の点ではキーボード入力の方が断然勝ります。。
emacs を終了するには C-x に続いて C-c を入力すればよい。
7.2.2
オンラインチュートリアル
emacs の入門的な利用のしかたを emacs を使いながら覚えることができるチュートリアルが準
備されているので、初心者はぜひ利用することを勧めます。emacs をまず起動して、C-h の後に続
いて t を入力してみるか、「Help」メニューから「Emacs Tutorial」を選択して起動することがで
きます。後は、画面に現れる指示にしたがって操作を体験すれば、ある程度使えるようになります。
7.2.3
スペルチェック aspell の利用法
aspell と呼ばれるコマンドを用いて、会話的に英単語のスペルチェックを行うことができる。emacs
で編集中のファイルのスペルをチェックすることもできます。メニューの Tools をクリックすると
現れる、Spell Checking > にマウスを合わせて右スライドすると現れる Spell Check Buffer を選
択すれば、作業バッファのテキストデータのスペルチェックができます。
最近ではチェックする言語を指定するため、利用者のホームディレクトリの下に次のファイルを
作成し、その中に lang en_US という 1 行を入れる必要がある。
.aspell.conf
7.2.4
機能の拡張
emacs は、lisp と呼ばれる言語を用いて作られている。そこで、emacs にいろいろな機能を追加
するための lisp ファイルが開発されている。標準では、それらは /usr/share/emacs/site-lisp ディ
レクトリに置かれている。それらを利用するためには、各利用者のホームディレクトリの下にある
設定ファイル.emacs または、.emacs.el ファイルにそのための設定を追加する必要がある。
8
TeX、LaTeX 入門
コンピュータを利用した文書整形システム、いわゆる電子組版システム DTP (デスクトップパ
ブリッシング) システムには大きく分けて2つの方式がある。
1. WYSIWIG (What You See It What You Get) 方式
これは、文書を整形した結果をディスプレイ上で確認しながらデータを入力する方法である。
例 MS Office、OpenOffice.org、一太郎 など
2. バッチ方式、マークアップ方式
文章中に整形のためのコマンドを埋め込む 例 TeX (LaTeX)、roff
13
UNIX システムには初期の段階から roff が入っていて、UNIX 自体のレベルアップを図るため、
文書の作成ということを開発の口実にしていたとのことである。
これから説明する TeX, LaTeX システムの属する 2. の方式の長所、欠点は次のように考えら
れる。
• 最終的な仕上がりを文章入力中確認できない
• 全体にわたるレイアウトの変更が容易
• 文章全体の論理構造をじっくり考えるようになる
8.1
TeX, LaTeX について
スタンフォード大学の Donald E. Knuth 教授が、自分の著作を電子出版する目的で開発したの
がきっかけで開発された無償のソフトウェアで次のような特徴がある。
• 文書の各種レイアウト、数式の記述、作表が便利
• 高品質の出来上がり。活字で組版したものとほとんど変わらない
• フリー(無償)であるが、有償の日本語のフォントを利用することもできる
• 家庭用のパソコンから、大規模な計算サーバまで幅広いプラットホームで利用でき、どの OS
にも移植されている。
アカデミックな学会では、投稿する科学技術論文の標準的な書式として LaTeX が採用され、論文
の原稿の作成にも利用されている。現在では TEX や LATEX に関する参考書が多く出版されている。
Knuth によるもともとの TEX は、plain TEX と呼ばれている。plain TEX はいろいろなことが
できる反面玄人向けである。そこで、Leslie Lamport (DEC 社) によって一般の利用者にもより使
いやすくする目的で LATEX が開発された。TEX と比較した場合、LATEX は次のような特徴がある。
現在では、LATEX の方が使われることが多い。
1. TeX のコマンドのマクロ化
2. 標準的な文書スタイル
3. 素人にも使いやすい
TeX の日本語化は、大きく分けてアスキー版と NTT 版の2つのアプローチがあった。現在広く
利用されているのはアスキー版であり NTT 版の開発は終わっている。
LaTeX における処理の流れ (sample.tex を用いた場合の例) を以下に示す。まず、platex コマン
ドを用いて出力媒体に依存しない中間ファイル (dvi ファイル) を作成し、このファイルをさらに出
力形態にあうように加工してプリンターに出力したり (dvips コマンド)、ディスプレイ上に表示す
る (xdvi)。dvips コマンドは、dvi ファイルをポストスクリプトファイルに変換する。dvi ファイ
ルを pdf ファイルに変換するには dvipdfmx コマンドが利用し、$ dvipdfmx sample を入力する
と、sample.dvi から sample.pdf ファイルが得られる。
14
sample.tex
sample.dvi
- dvi ファイル
ソースファイル
platex
注意
-
印刷、表示
xdvi, dvips
LaTeX は文章の整形の部分だけを受け持つ。文章やコマンドは他の手段で入力する必要
がある(たとえば、emacs や vi を用いて)
8.1.1
LATEX を用いた文書の整形処理の実際の例
以下の手順で整形処理が行われる。ファイル名の指定で修飾子 (.tex, .dvi) は省略できる。
1. LaTeX のソースファイル (sample.tex) から dvi ファイルを作成
$ platex sample
2. 処理の結果をディスプレイ上でプレビュー
$ xdvi sample
3. 処理の結果をプリンターから出力
$ dvips -f sample | lpr -Pprinter name
重要
sample.dvi ファイルは普通のテキストファイルではない、バイナリーファイルである。こ
れらを画面に表示させたり、プリンターから出力してはいけない。
8.1.2
LaTeX のソースファイルの作り方
付録 A.4 の練習問題に示した small2e.tex は LaTeX のソースファイルの例である。基本的な文
書の構造などについては後で説明するが、普通の文章の入力のしかたの規則は下記の通りである。
• 単語間のスペース: ひとつ以上いくつでもよい
清書出力時は適当に単語間のスペースが調節される(スペースが詰め直される)。同時に右
端がきれいにそろった形となる(場合によっては hyphenation を行う)。ただし、日本語の
全角の空白はスペースとはみなされない。
• 段落(パラグラフ)の区切り: 1行以上の空白行を入れる
• \ の記号は、=
Y キーで入力する。
• 以下の記号は特殊な意味をもつ。これらの記号をそのまま出力するには特別の方法を用いる
必要がある。
{, }, &, $, #, ,̂ , \,
• % の記号を入力すると、これ以降行末まで無視されるので、コメントをつけたりするのに利
用される
15
8.1.3
練習問題
1. small2e.tex を作成し、platex にかけて動作を確認する。うまくできていればプリンターか
ら出力してみる。
2. small2e.tex と出力結果を比較してみる。また、出力結果に書いてある内容をよく読んでみる。
3. sample2e.tex ファイルを自分のホームディレクトリにコピーし、1、2 の問題と同じことを
行いなさい。
4. small2e.tex や sample2e.tex にならって、簡単な日本語の文章からなる LaTeX のファイル
を作成してみなさい。
small2e.tex, sample2e.tex などのファイルは、ディレクトリ
/usr/teTeX/share/texmf-dist/tex/latex/base からコピーできる (または、次のコマンドで探
すことができる)。
% kpsewhich small2e.tex
文書のスタイル
8.2
LATEX には、文書の論理構造の違いや内容により以下の標準的なスタイルが標準で備わってい
る。このどれかのスタイルを指定すれば、入力した文書をそれぞれにあった体裁に自動的に整形し
てくれる。章や節、これらの表題の大きさ、その字体、改ページのしかた、などを自動的に決めら
れた体裁で行ってくれる。通常の長さの文書の場合は、jarticle を用いればよい。
クラス名
クラスの用途
jarticle
学会等の論分誌の形式(あまり、長くないもの)
jreport
jbook
jletter
テクニカルレポートの形式
本を書くとき
手紙を書くとき
これ以外にも用途に応じて多くのクラスファイルが作成されていて、自由に利用可能である。理学
部で利用できるスタイルファイルと追加のスタイルパッケージは、下記のコマンドで確認できる。
$ ls /usr/teTeX/share/texfm-dist/tex/latex
8.2.1
LaTeX のソースファイルの構造
LATEX で清書する元になる文書は、ある決められた構造をもつことが決められている。必ず最初
の\documentclass から始まり、文書の本体は \begin{document} と \end{document} の間に挿
入する。標準的な文書全体の骨格の例を示す。
\documentclass[オプション]{クラス名}
%
%
%
%
プリアンプル を \begin{document} までの間に指定して 文章全体に関わる各種の設定をここで行うことができる。
オプションには、[a4p,12pt] などのように用紙サイズ、文字のサイズを
指定する
16
%
プリアンプルの例としては、
\usepackage{...}
% 機能を追加したり、スタイルを追加するとき指定する。
\title{...}
\author{...}
\date{...}
\pagestyle{empty} % ページ番号の制御 (この場合、出力を抑制)
% ---------------- これはコメント行
\begin{document}
\maketitle
% 本文の開始
% 表題、著者名、日付を出力
\chapter{Title of Chapter 1}
....
\section{Title of Section 1}
....
\subsection{Title of Subsection}
....
\subsubsection{Title of Sub Subsection}
....
\section{Title of Section 2}
....
\end{document}
8.2.2
% 最後にこれを忘れない
各種のレイアウトと環境
次のように、\begin と \end で囲まれた範囲を環境と呼び、各種のレイアウトを行うことがで
きる。
\begin{環境名}
. . .
\end{環境名}
以下のような環境が利用できる。詳しくはオレンジブックを参照。
環境名
用途
center
flushleft
センタリング
flushright
quote
右寄せ
quotation
verse
verbatim
長い引用文の記述
左寄せ
引用文の記述 (左右のマージンを狭める働き)
詩を書くとき利用
入力したテキストをそのままの形で出力
17
ceter, verbatim 環境を用いた例
\begin{verbatim}
\begin{center}
ここに書いた文は
中心に \\ % \\ で改行を指定
そのままの形で
よせた形で \\
出力さ れ
出力されるよ。
るよ。
\end{center}
\end{verbatim}
箇条書きのための環境
8.2.3
標準で用意されている itemize、enumerate、description がよく利用される。使用例を以下に
示す。
itemize 環境の例
enumerate 環境の例
description 環境の例
\begin{itemize}
\begin{enumerate}
\begin{description}
\item 項目 1
\item 項目 2
\item 項目 1
\item 項目 2
. . .
\end{itemize}
. . .
\end{enumerate}
\item[項目名] 項目 1
\item[項目名] 項目 2
. . .
\end{description}
文字の大きさと字体の指定
8.2.4
以下に示すコマンドを用いることにより、文字の大きさや字体を制御することができる。基本的
にはコマンドが現れた以降の文書で有効なる。
• 文字サイズ(小さいものから大きくなる順に)
\tiny, \scriptsize, \footnotesize, \small, \normalsize, \large, \Large, \LARGE, \huge,
\Huge
• 字体の指定
次のコマンドを入力すると、字体が切り替わる
コマンド
字体
コマンド
字体
\rm
ローマン体
\bf
bold face 太字
\sl
\em
slanted 斜体
強調 イタリック
\sc
\it
small caps
イタリック
\sf
sans serif
\tt
type writer
環境の内部 (つまり \bigin{...} から \end{...} までの間)で指定すると、その環境の中だけで有効
有効となる。また、{, } を用いることによっても、宣言の有効範囲を限定できる。
使用例
. . . 中括弧でくくると {\em 括弧で囲まれた内部だけ} 強調になる ...
18
8.2.5
練習問題
1. tiny, scriptsize, footnotesize, small, normalsize, large, Large, LARGE, huge, Huge の各単
語を、それぞれの意味に対応する文字サイズで出しなさい。
例 {\tiny tiny}
2. roman、bold face、slanted face、small caps、sans serif、type writer のそれぞれの文字列
を、対応する字体を用いて出力してみなさい。
例 {\tt type writer}
3. 箇条書きの環境を利用した文を作り、上に述べた環境を利用して実際に出力してみなさい。
4. センタリング、右寄せ、左寄せについて実際に文章を作り、その機能を試してみなさい。
8.3
数式の清書出力
数式を出力するには、特別な数式モードに切り替える必要がある。この数式モードに対し、普通の文
章を入力するモードをパラグラフモードと呼ぶ。特に数式の出力の場合には、amsmath, amssymbol
のパッケージを利用すると便利であり、その場合プリアンプル部で \usepackage{amsmath,amssymb}
と指定する。数式モードにおける特徴を下記に記す。
• 英字はすべてイタリックの字体になる。
数式モード中でローマン字体を用いるには、そのことをあえて\mathrm{Roman} などのよう
に指定する必要がある。
• ギリシャ文字を出力できる。
したがって、普通の文章中でギリシャ文字を出力するには、一時的に数式モードに切り替え
ればよい。
• 各種の数学上の記号が出力できる。
指定のしかたについては symbol.tex ファイルを参照
• 上ツキ、下ツキの指定が可能。
上ツキには ^、下ツキには _ を用いる。通常の文章中でこれらを用いる例を下記に示す。
H$_2$O (H2 O)、$A_{ij}$ (Aij )
^、_ は原則として、この次の 1 文字に対して有効である。ある範囲にわたり上ツキ、下ツ
キにするには上の 2 番めの例のように { と } を用いて範囲を指定する。
2 種類のモード 数式モードには、以下のようにその使い方により2種類ある。
1. 本文中に数式を埋め込む場合。以下の例のように、数式を2つの $、または \( と \) ではさ
むか、math 環境を利用する。
例 19
... $x^2$ ... ... \(\alpha)\ ...
... \begin{math} x+y \end{math} ...
2. 本文とは別に、独立して数式を表示する場合。これには、表示する行数により 2 通りの方法
がある。
• 数式が1行だけの場合、数式を \[ ... \] のように囲むか、displaymath や equation
環境を利用する。
例
\[ x + y \]
\begin{displaymath}
r^2 = x^2 + y^2
\begin{equation}
\sum_{i=1}^n i = n(n+1)/2
\end{displaymath}
\end{equation}
注 equation 環境を用いると式に自動的に番号が振られる。
• 数式が複数行にわたる場合 eqnarray 環境を用いる。
例 \begin{eqnarray}
A & = & B \\ 各行で & の位置を揃えて出力し(& はタブ位置)
C & = & D \\ \\ はここで改行することを表す。
E & = & F
\end{eqnarray}
amsmath パッケージを用いた場合、次のような方法も可能となる。
\begin{equation}
\begin{split}
x &= r\cos\theta \\
y &= r\sin\theta
\end{split}
\end{equation}
注意 はいつも改行の意味をもつわけではない。普通の文章中で改行を行いたい場合は \newline
コマンドを用いる(改ページは、\newpage)。eqnarray 環境では、自動的に式に番号
が振られる。番号を付けたくなければ、代わりに eqnarray* を用いることができる。
8.3.1
数式モードで利用できる数式や記号など
分数
平方根
省略記号
\frac{分子}{分母}
\sqrt{式}
ベキ乗根 \sqrt[ベキ]{式}
...
\ldots
···
\cdots
20
ギリシャ文字(小文字)
α
β
γ
\alpha
\beta
\gamma
θ
ϑ
ι
\theta
\vartheta
\iota
o
π
ϖ
o
\pi
\varpi
τ
υ
ϕ
\tau
\upsilon
\phi
δ
ϵ
\delta
\epsilon
κ
λ
\kappa
\lambda
ρ
ϱ
\rho
\varrho
φ
χ
\varphi
\chi
ε
ζ
η
\varepsilon
\zeta
\eta
µ
ν
ξ
\mu
\nu
\xi
σ
ς
\sigma
\varsigma
ψ
ω
\psi
\omega
ギリシャ文字(大文字)
Γ
\Gamma
Λ
\Lambda
Σ
\Sigma
Ψ
\Psi
∆
Θ
\Delta
\Theta
Ξ
Π
\Xi
\Pi
Υ
Φ
\Upsilon
\Phi
Ω
\Omega
数学記号(2項演算記号)
±
∓
\pm
\mp
÷
∗
\div
\ast
×
\times
·
\cdot
∩
∪
\cap
\cup
†
‡
\dagger
\ddager
数学記号(関係記号)
≤
≪
⊂
\leq
\ll
\subset
≥
≫
⊃
\geq
\gg
\supset
≡
∼
≃
\equiv
\sim
\simeq
̸=
∝
⊥
\neq
\propto
\perp
⊆
∈
\subseteq
\in
⊇
∋
\supseteq
\ni
≈
∼
=
\approx
\cong
|
∥
\mid
\parallel
数学記号(その他)
ℏ
ℜ
\hbar
\Re
∇
∠
\nabla
\angle
¬
∂
\neg
\partial
ℑ
℧
\Im
\mho
∀
∃
\forall
\exists
∞
∑
\infty
\sum
∏
∫
H
\prod
\int
\oint
Log 型関数
\arccos
\cos
csc
\exp
\ker
\limsup
\min
\sinh
\arcsin
\arctan
\arg
\cosh
\cot
\coth
deg
det
dim
\gcd
\hom
\inf
\lg
\lim
\liminf
\ln
\log
\max
\Pr
\sec
\sin
\sup
\tan
\tanh
8.4
配列や表の出力
配列や表の出力を容易に行うための環境として以下のものがある。ただし、利用できるモードに
制約があることに注意が必要である。
21
環境
利用可能なモード
array
tabular
tabbing
数式モード
パラグラフ、数式モード
パラグラフモード
例
\begin{array}{llrc...}
l、r、c はそれぞれの欄で値を左、右、
A1 & A2 & . . . & An \\ 中央に揃えて出力することを表す。
B1 & B2 & . . . & Bn \\
. . .
Z1 & Z2 & . . . & Zn 最終行には \\ を指定しない。
\end{array}
注 eqnarry 環境との違いは、eqnarray が項目数が 3、式に番号が振られる、自動的に数式モー
ドに移行することである。
\begin{tabular}{l|l|rc...|}
A1 & A2 & . . . & An \\
B1 & B2 & . . . & Bn \\
\hline
\hline
\hline
. . .
Z1 & Z2 & . . . & Zn \\
\end{tabular}
\hline
注 l、r、c の意味は上と同じ。— を指定するとコラムを区切る縦の罫線を出力する。横の
罫線を出力するには \hline を指定する。
\begin{tabbing}
abc \= defg \= hijklmn \= opqr \kill % \= はタブの設定。\kill はこの行
A1 \> A2 \> . . . \\ % の出力を抑制する。
B1 \> B2 \> . . . \\ % \> はタブ位置の移動、\\ は改行
. . .
Z1 \> Z2 \> . . .
% 最終行には \\ を指定しない。
\end{tabbing}
8.5
空白、スペースの挿入
水平方向 \hspace{長さ}
垂直方向 \smallskip, \medskip, \bigskip によって垂直方向の空白部を制御できる。\vspace{
長さ} を用いて直接長さを指定することもできる
長さの単位は以下のものが利用できる。
22
単位
意味
cm、mm
pt
in
センチメートル、ミリメートル
pc
em
パイカ (1 pc = 12 pt)
ex
現在の書体の x の横幅の長さ
ポイント
インチ (1 in = 2.54 cm = 72.27 pt)
現在の書体の M の横幅の長さ
この他にも次のようなコマンドもある
8.6
コマンド
機能
\hfill
\dotfill
\hrulefile
空白で埋めつくす
... でスペースで埋めつくす
横線でスペースえ埋めつくす
emacs の利用
emacs を利用しながら LATEX のファイルの便利に編集するために elisp パッケージが存在する。よ
く利用されている auctex を利用するには、自分のホームディレクトリの .emacs (又は、.emacs.el)
ファイルに下記の内容を追加する必要がある。emacs を起動したとき、これらのファイルが自動的
に読み込まれ、emacs でこの機能が利用可能となる。
;; ---------------------------------------------------------;; AUCTeX
(require ’tex-site)
(add-hook ’LaTeX-mode-hook (lambda ()
(TeX-fold-mode 1)))
;
(setq TeX-default-mode ’japanese-latex-mode)
(setq TeX-auto-save t)
(setq TeX-parse-self t)
(setq-default TeX-master nil)
; RefTeX settings
(add-hook ’laTeX-mode-hook ’turn-on-reftex)
(setq reftex-enable-partial-scan t)
(setq reftex-save-parse-info t)
(setq reftex-use-multiple-selection-buffers t)
(setq reftex-plug-into-AUCTeX t)
Auctex の使い方
基本的な操作として下記のコマンドを入力することによって環境の設定や清書用のコマンド入力
が省力化される。emacs の画面のメニューにも LATEX 用の新たなメニューが表示されるので、そ
れを利用することもできる。
23
入力コマンド
機 能
C-c C-c :
コンパイルやプレビュー
C-c C-s :
C-c C-e :
節などを追加
C-c C-p C-d :
C-c C-p C-p :
C-c C-p C-c C-d :
Emacs 内で図や数式をプレビュー (preview-latex)
preview-latex モードで、カーソルの場所だけプレビュー
preview-latex モードの解除
式や箇条書きなどの環境を追加
より詳しい使い方を info auctex で見ることができる。
8.7
練習問題
1. 何か適当な数式を出力してみなさい。たとえば、Maxwell 方程式、Schrödinger 方程式など。
2. tabular 環境を利用して、適当な表を作りなさい。
Fortran を用いたプログラムの開発
9
Linux 環境で Fortran という言語を用いて数値計算を実行について説明を行う。
• ある目的で利用するプログラムは、あるディレクトリを作成しその下にすべておく。他の場
合についても同様。
• 開発や利用のための文書も必ず準備する。何のためのプログラムなのか、どのような考えに
基づいて作成したか、コンパイルの方法、利用のしかたなど。ソースプログラムの中にもコ
メントを多用する(いくらたくさん入れても最終的なプログラムには無関係)よう心掛ける。
• わかりやすいプログラムを書く。
9.1
開発のための手順
ほとんどの場合について、計算機で利用できるアプリケーションプログラム(実行形式のプログ
ラム)をつくる場合、何らかの機械的な翻訳プログラムを利用するのが普通です。ここでいう翻訳
とは、我々の分かりやすい手順、例えば C = A + B をコンピュータの演算装置 CPU の命令コー
ドに変換することを意味します。
ここでいう実行形式のプログラムは、プログラムの動作に必要な入出力の制御、文法書 (Fortran
などの) で決っているサブルーチンなどすべてを含んだものでなければなりません。これらについ
ても、普通の開発者が毎回、最初から作らなくてはいけないとしたらプログラムの開発は膨大な労
力を要することになります。このような共通性のある処理に関しては、予めライブラリーとして用
意しておき、それを利用者が作ったプログラムといっしょにすることで完成したプログラムができ
あがるということです。ライブラリには、入出力などに関係するシステムライブラリー、それぞれ
の言語に特有の数値演算ライブラリー、利用者が独自に作成したライブラリーなどがあります。
24
上の説明に対応して、実際の実行可能なプログラムの作成は下記のような手順を踏むことにな
る。この手順は Linux の環境にとどまらず一般的に言えることです。
1. ソースプログラムの作成
文法書にしたがって、テキストファイルとしてプログラムを作成する。ファイル名は fortran
の場合、最後に修飾子として .f をつけるようにする。fortran90 用のソースファイルは .f90
をつけるようにした方がよい。
内部副プログラム、モジュール副プログラム、外部副プログラム
モジュール副プログラムは、
COMMON 文の拡張、INCLUDE によるパラメータ文の読込、関数の記述などの用途にも
利用できる。
2. コンパイル
ソースプログラムを翻訳プログラム (Compiler) を利用してマシン語に変換する。コンパイ
ラーの出力ファイルはオブジェクトコードと呼び、このままではまだプログラムを動作する
ことはできません。必要なライブラリーがまだ組み込まれていないためです。オブジェクト
コードは Linux の場合、ファイル名の最後に.o がつきます。
コンパイルの方法には、大きく分けて a) 分割コンパイル、と b) 一括コンパイルの2つの
方法があります。大きなプログラムになると、ソースプログラムは複数のプログラムの集ま
りからできています。ひとつのファイルの中に複数の副プログラムやサブルーチンが入って
いる場合もあれば、それらが複数のファイルに分散されていることもあります。特にソース
ファイルが複数のファイルから成る場合、それらを個別にコンパイルすることも、一括して
コンパイルすることも可能です。
3. リンクエディット
オブジェクトコードがすべて揃ったとき、実行に必要なライブラリーを外部から組み込むこ
とによって完成したプログラムを作るのがこの最終段階の手順です。プログラムの実行には、
すべての命令コードがプログラムの先頭から何番目にあるか、つまり番地が決っている必要
があります。ただし、これはすべてもプログラムが出揃った段階で、また個々のプログラムの
サイズがわかってから可能になります。オブジェクトコードを作成する段階では、それぞれの
プログラムの番地が確定していないので、番地に当たるデータには何も入っていません。した
がって、オブジェクトコードは実行させることが不可能です。Linux では、ローダー (loader)
と呼ばれるプログラムが自動的にこの処理をしてくれます。最終的にできたプログラムは実
行可能となります。
Linux などの環境のように、上のコンパイルとこのリンクエディットのプロセスを自動的に
行ってくれる場合もあります。
オブジェクトコードと実行ファイルとの違いについてよく理解しておいて下さい。Linux の環境
でコンパイラを利用してプログラムを開発するためのコマンドの入力例のいくつかを以下の示し
ます。
コンパイラーを利用するためのコマンドは、f77 や f90、f95 (gfortran)、ifort (Intel) などで
ある。このコマンドは、特に指定しない限りコンパイルが正常に終了すれば、自動的にリンクエ
ディットも実行する。
25
• 1個のソースファイルからコンパイルとリンクエディットを行い、実行形式のプログラムを
作る場合、以下のように入力する。
$ f77 source.f
最終的な実行ファイルは a.out のファイル名となる。このファイル名を自分で指定、例えば
prog に変更したければ、以下のように入力する。つまり、オプション -o は実行ファイル名
を指定するのに用いる。
$ f77 source.f -o prog
• コンパイルだけ行い、オブジェクトコードを作成するだけの場合。
$ f77 -c source.f
• すでにコンパイル済みのオブジェクトコードを利用して実行ファイルを作成するには以下の
ように入力する。上の場合は、ソースプログラムをコンパイルした後に、すべてのオブジェ
クトファイルを利用して実行プログラムを作成する場合の例である。
$ f77 -o prog main.f obj1.o obj2.o
$ f77 -o prog obj1.o obj2.o
最初の例は、main.f をコンパイルし、他のモジュールとリンクし、次の例はオブジェクトモ
ジュールをリンクするだけで実行ファイル prog を作る。
• ライブラリを利用する場合の例。ユーザのホームディレクトリにある lib というディレクト
リに含まれる libmylib.a というライブラリをリンクする。オプションの -L はライブラリの
あるディレクトリを指定し、-l はライブラリのファイル名 libxxxx.a の xxxx の部分を指定
する。
$ f77 -o prog main.f -L~/lib -lmylib
9.2
モジュール副プログラム
モジュールは fortran90 で新たに導入された仕様です。モジュールを利用することにより、複数
のプログラムの間で定数や変数、関数やサブルーチンを共有することが可能になる。また、外部関
数やサブルーチンの引用仕様を定義しておくことによって、その内容を読込むことにより引用の記
述が容易になります。fortran77 の COMMON 文の機能や、パラメータ文を INCLUDE 命令で取
り込む機能などは、このモジュールで実現できます。
9.2.1
モジュールの利用のしかた
モジュールを利用するプログラムとモジュール自身の記述の方法は以下の通りです。
• モジュールに含まれる内容の引用のしかた
あるプログラム単位で、モジュールの定義内容を引用するには、プログラムの先頭に利用す
るモジュール名を指定して、以下のように行を加えます。
26
ex. 1: USE sample_module
ex. 2: USE sample_module, ONLY: PI, F1
最初の例は、モジュールのすべての定義内容(変数やパラメータの値)が、そのプログラム
の中で利用可能となります。次の例は、一部の内容だけ利用する場合の指定のしかたです。
• モジュールの作り方
モジュールは外部関数や外部サブルーチンと同じものと考えたらよいでしょう。ただし、最
初と最後に MODULE 文と END MODULE 文が必要です。
MODULE sample_module ! モジュール名を指定する
IMPLICIT NONE
! -- 共通に利用する定数や変数
REAL :: PI = 3.14159, ...
PRIVATE REAL :: P1, P2, ...
INTEGER :: I, J, K
! これらはモジュールの内部変数となる
! -- 関数やサブルーチンのインターフェイスの定義
INTERFACE
FUNCTION F1 (X,Y)
IMPLICIT NONE
REAL :: F1
REAL INTENT(IN) :: X, Y
END FUNCTION F1
...
END INTERFACE
! -- 共通に利用する関数を直接定義することもできる
CONTAINS
FUNCTION FUN1 (x)
....
END FUNCTION FUN1
END MODULE sample_module
27
9.2.2
モジュールを利用する場合のコンパイルの方法
モジュールを利用する場合、プログラムの開発の手順がすこし複雑になります。コンパイルを行
うときに、モジュールに含まれる内容をチェックする必要があるためである。つまりモジュールを
コンパイルする場合に、モジュールの内容に関する情報を他のプログラム単位のコンパイルに役
立てるために出力し、モジュールを利用するプログラムをコンパイル時には、そのモジュール情報
ファイル(ファイル名の最後に .mod がつく)が必要となる。つまり、以下の2段階のステップを
踏む必要がある。
1. 最初にモジュールだけコンパイルし、モジュール情報ファイルを作成する。
2. 残りのファイルをコンパイルして必要なすべてのオブジェクトとライブラリーをリンクして
実行ファイルをつくる。
実際のコンパイラーと GNU のコンパイラーを利用してプログラムの開発する場合を例にとっ
て説明する。とくに Fujitsu のコンパイラーを用いる場合、モジュールをコンパイルしてモジュー
ル情報ファイルを生成したり、USE 文を含む、モジュールを利用するプログラムのコンパイルの際
には -Am のオプションをつける必要がある。情報処理室で利用できる GNU の gfortran(f95 と入
力してよい) を利用する場合にはこのようなオプションは必要ではないが、モジュールを引用する
ファイルをコンパイルする時には、モジュール定義ファイルがすでに作成されている必要があるこ
とはどちらについても共通です。
それぞれの場合について、モジュールのコンパイルの方法は以下のようになる。
f90 -c -Am src_of_module.f90
gfortran -c src_of_module.f90
: または,f95 -c src_of_module.f90
このとき、src_of_module.o というオブジェクトファイルと、src_of_module.mod という名前
の情報ファイルができる。どちらもテキストファイルではないことに注意してください。また、モ
ジュール定義ファイルは共通性がないので Fujitsu 製 の f90 で作成したファイルを他のコンパイ
ラーで利用することはできない。
9.3
emacs を利用した fortran のソースプログラムの作成
emacs を利用してソースプログラムを作成、修正するといろいろな便利な以下に述べるような
機能が利用可能となり便利です。
• コンパイルの実行
M-x compile と入力する。このとき、デフォルトとして次のようなコマンドが現れます。
make -k
この代わりに f77 src.f などと入力すると、入力したコマンドを実行し、その結果を別な
ウィンドウ (*compilation* という名前) を開き表示する。エラーがあった場合は、その場所
がわかります。
28
• 自動的な改行
入力行が長くなっても自動的に改行を行ってくれます。もちろん継続行の記号を自動的に挿
入してくれます。この機能を利用するには、次のように入力します。
M-x auto-fill-mode
• 略語の利用
略語が登録されているので、入力が容易になる。ただしこの機能を利用するには次のように
入力する必要がある。
M-x abbrev-mode
略語の最初の文字はセミコロンで始まる。以下は略語の例。入力後、スペースなど区切り文
字が現れると変換が行なわれる。
;im[space]
;ir
implicit
implicit real
;di
;f
;r
dimension
format
read
;w
;el
write
elseif
M-x list-abbrevs と入力すると、登録されている略語のリストが出力される。
10
グラフ表示
計算結果を表示するためにいろいろなプログラムを利用できます。ここでは、gnuplot の利用の
しかたについて簡単に説明します。gnuplot と入力すると以下のようなメッセージが出力されます。
G N U P L O T
Linux version 3.7
patchlevel 1 (+1.2.0 2001/01/11)
last modified Fri Oct 22 18:00:00 BST 1999
....................................
Terminal type set to ’x11’
gnuplot>
この gnuplot> の後に描画や各種設定のためのコマンドを入力します。
x, y 座標に対応するデータの入ったファイルを利用して2次元のプロットをしたり、簡単な関数
の様子を表示するには以下のように plot コマンドが利用できます。
29
plot "filename" using 1:3 with line
plot [1.0:4.0] x*cos(x)
上の using はファイルの何番目の列(例では、1列目に x, 2列目に y の値)にどの座標の値が
入っているかを指定します。with line は結果を線で結んで表示するために必要です。描画する
座標の範囲は [a:b] のように下限 b、上限 a の値を指定します。
うまく表示することができたら、以下のようなコマンドを入力することによりプリンターから結
果を出力できます。
set terminal postscript
set output "filename.eps"
replot
set output
set terminal x11
最初のコマンドで、出力データをモニター (x11) 用からポストスクリプト用に変更します。次が、
実際の出力先を指定した名前のファイルに変更するものです。この後の replot コマンドは、もう
一度確認後のグラフを再描画するためのものです。次の2つのコマンドは、設定を元に戻すための
ものです。後で出力したファイルをプリンターに出力できます。
より細かい利用の方法は help, または help plot などのようにヘルプが利用できます。また、
他のコマンドと同様に gnuplot についてのオンラインマニュアルについて man や info コマンド
が利用できます。
vi 入門
A
ちょっとしたファイルの修正などには vi を利用すると便利なこともある。以下は vi についての
簡単な説明。
A.1
vi の利用法
vi には2つの異なるモードがあります。
• 入力モード テキストの入力
• コマンドモード 編集作業(文字や行の変更、消去、複写、等)
vi は難しい ?
よく初心者から vi は難しいと言われます。この理由は、上のように 2 つのモードがあり、実際
に作業を行う場合にその 2 つのモードをうまく切り替えて利用する必要があることによると思わ
れます。例えば、キーボードから同じキーを入力しても、現在どのモードにあるかによって、入力
データは全く異なる意味をもつこともあります。
私は今どこにいるの ?
たくさんキーを入力しているような場合、時として今どのモードになっているかわからなくなる
ようなこともあるでしょう。このような場合には、とりあえず、[ESC] キーを入力します。そうす
れば、とにかくコマンドモードになる。
30
1. 画面制御コマンド
<Ctrl/l> 現在の画面を再表示する。
<Ctrl/y> 画面を1行上にスクロールする。
<Ctrl/e> 画面を1行下にスクロールする。
2. ページコマンド
< Ctrl/f > 次の1画面を表示する。
< Ctrl/b > 前の1画面を表示する。
< Ctrl/d > 半画面下にスクロールする。
< Ctrl/u > 半画面上にスクロールする。
3. カーソルを動かすコマンド
j カーソルを同じカラムで1行下に移動する。
k カーソルを同じカラムで1行上に移動する。
h カーソルを1カラム左に移動する。
l カーソルを1カラム右に移動する。
<Return> カーソルを次の行の先頭に移動する。
0(ゼロ)カーソルを現在行の先頭に移動する。
$ カーソルを現在行の最後に移動する。
< スペース > カーソルを1文字進める。
nG カーソルを n 行目の先頭に移動する。n が省略されると,ファイルの最後の行。
/pattern 次の pattern が現れるところにカーソルを進める。
?pattern 前の pattern が現れたところまでカーソルをもどす。n 最後に行なったパターン
検索 / または ? を繰り返す。
4. テキスト入力コマンド
a カーソルの右側にテキストを入力する。エスケープ・コードで入力を終了する。
A カーソルのある行の行末にテキストを入力する。エスケープ・コードで入力を終了する。
i カーソルの左側にテキストを入力する。エスケープ・コードで入力を終了する。
I カーソルのある行の行頭にテキストを入力する。エスケープ・コードで入力を終了する。
o カーソルのある行の下にテキストを入力する。エスケープ・コードで入力を終了する。
O カーソルのある行の上にテキストを入力する。エスケープ・コードで入力を終了する。
<Delete> テキスト入力中,最後に入力した文字を削除する。
<ESC> テキスト入力を終了する。
5. テキスト削除コマンド
31
dw カーソルのある文字からその語(ワード)の終わりまでを削除する。
x カーソルのある文字を削除する。
dd カーソルのある行を削除する。
D,d$ カーソルのある文字から行の終わりまでを削除する。
P カーソルの左側にヤンクしたテキストを挿入する。
6. テキスト変更コマンド
cw カーソルのある文字からその語(ワード)の終わりまでを,エスケープ・キーを押すま
で入力した文字列で置き換える。
C,c$ カーソルのある文字から行の終わりまでを,エスケープ・キーを押すまで入力した
文字列で置き換える。
˜ カーソルのある文字の大文字,小文字の区別を変更する。
xp カーソルのある文字と次の文字を入れ換える。
J 現在行と次の行をつなげる。
rx カーソルのある文字を x で置き換える。
7. バッファ編集コマンド
[a-z n yy] 現在行から n 行を [a-z] バッファにヤンクする。n が省略されると,現在行をヤ
ンクする。
[a-z n p]
a-z バッファにヤンクしたテキストを n 行分カーソルの後ろに挿入する。
8. vi の終了
ZZ vi を終了して,変更があればファイルを保存する。
:wq ファイルを保存して,エディタを終了する。
:q! 変更があっても保存せずに,エディタを終了する。
A.2
便利な使い方
いま利用したコマンド(コマンドモードにおいて)を繰り返し実行するには、単にピリオド( .
)を入力するだけでよいという機能がある。
これを利用すると、ある文字列を確認しながら別の文字列に変更することができる。
例ファイルの先頭にジャンプして次のように入力する。
/TeX TeX という文字列を探す
cwtex^[ この文字列を tex に置換
n 次の文字列を探す
. 置換の繰り返し
n
.
32
この繰り返し
ˆ d$ 、dw、d1G というように削除のコマンドとカーソル移動のコマンドとを組み合わせ、あ
d、
る範囲を削除することができる。y など、他のコマンドでも同じような使い方ができる。
vi を用いて以下の内容(英文)のファイルを新たに作成しなさい。ファイル名は sample1.tex と
します。ただし、英単語の間のスペースの数はこの例と全く同じにならなくてもよいし、内容が同
じであれば、一行の単語数が異なったりしてもよい。行末のカッコの数字 (1) などは、無視してよ
ろしい。
英文の文書のスペルチェック
A.3
aspell が利用できる。使い方は、ファイル名を指定して以下のように入力する。
$ aspell -l en -c sample1.tex
オプションの -l で言語を指定し (ここでは英語 en)、-c はチェックするファイル名を指定する。ミ
ススペルがあると途中で止まる。このとき、次のコマンドが入力できる。
R
Space
Replace the misspelled word completely.
Accept the word this time only
A
I
Accept the word for the rest of this file.
Accept the word, and put it in your private dictionary.
0-9
L
Q
Replace with one of the suggested words.
Look up words in system dictionary.
Write the rest of this file, ignoring misspellings, and start next file.
X
!
Exit immediately.
Shell escape.
^L
Redraw screen.
A.4
Asks for confirmation.
Leaves file unchanged.
練習問題
下記に示す文章に対し、vi を用いて次の 1 から 7 までの作業を実施せよ。
1. (1) の行の Ramport を Lamport に変更
2. (2) の行について、行 (2-1) と次の行 (2-2) を一緒にして1行にする。
3. (3) の行をすべて削除する。
4. (4) の行の次に新たに次の行を追加しなさい。
but it makes a difference to you.
5. ファイルの先頭に移動し、your がいくつ含まれているか探しなさい。
6. LateX が含まれている行を探し、この中の文字 t を T に変更しなさい。
7. TeX や logo、人名以外に明らかに英単語のスペルミスがいくつかあります。これを、aspell
を用いて探し、かつ修正しなさい。aspell については、emacs の説明を参照せよ。
33
% This is a sample LaTeX input file. (Version of 9 April 1986)
%
% A ’%’ character causes TeX to ignore all remaining text on the line,
% and is used for comments like this one.
\documentclass[a4p]{jarticle} % Specifies the document style.
\title{A Sample Document}
\author{Leslie Ramport}
\date{December 12, 1984}
%
%
%
%
The preamble begins here.
Declares the document’s title.
Declares the author’s name. (1)
Deleting this command produces today’s date.
\begin{document}
% End of preamble and begining of text.
\maketitle
% Produces the title.
This is a sample input file. Comparing it with the output it
generates can show you how
(2-1) to produce a simple document of (2-2)
your own.
\section{Ordinary Text}
% Produces section heading. Lower-level
% sections are begun with similar
% \subsection and \subsubsection commands.
The ends of words and sentences are marked
by
spaces. It doesn’t matter how many
spaces
you type; one is as good as 100. The (3)
spaces
you type; one is as good as 100. The
end of
a line counts as a space.
One
or more
blank lines denote the
of a paragraph.
end
Since any number of consecutive spaces are treated like a single
one, the formatting of the input file makes no difference to
\TeX,
% The \TeX command generates the TeX logo. (4)
When you use
\LaTeX,
% The \LateX command generates the LaTeX logo.
making your input file as easy to read as possible
will be a great help as you write your document and when you
change it. This sample file shows how you can add comments to
your own input file.
Because printing is different from typewriting, there are a
number of things that you have to do differently when preparing
an input file than if you were just typing the document directly.
Quotation marks like
‘‘this’’
have to be handled specially, as do quotes within quotes:
‘‘\,‘this’
% \, separates the double and single quote.
is what I just
wrote, not ‘that’\,’’.
Dashes come in three sizes: an
intra-word
dash, a medium dash for number ranges like
1--2,
34
and a punctuation
dash---like
this.
A sentense-ending space should be larger than the space between words
within a sentense. You sometimes have to type special commands in
conjunction with punctuation characters to get this right, as in the
following sentence.
Gnats, gnus, etc.\
% ‘\ ’ makes an inter-word space.
all begin with G\@.
% \@ marks end-of-sentence punctuation.
You should check the spaces after periods when reading your output to
make sure you haven’t forgotten any special cases.
Generating an ellipsis
\ldots\
% ‘\ ’ needed because TeX ignores spaces after
% command names like \ldots made from \ + letters.
%
% Note how a ‘%’ character causes TeX to ignore the
% end of the input line, so these blank lines do not
% start a new paragraph.
with the right spacing around the periods
requires a special command.
\TeX\ interprets some common characters as commands, so you must type
special commands to generate them. These characters include the
following:
\$ \& \% \# \{ and \}.
In printing, text is emphasized by using an
{\em italic\/} % The \/ command produces the tiny extra space that
% should be added between a slanted and a following
% unslanted letter.
type style.
\begin{em}
A long segment of text can also be emphasized in this way. Text within
such a segment given additional emphasis
with\/ {\em Roman}
type. Italic type loses its ability to emphasize and become simply
distracting when used excessively.
\end{em}
It is sometimes necessary to prevent \TeX\ from breaking a line where
it might otherwise do so. This may be at a space, as between the
‘‘Mr.’’ and ‘‘Jones’’ in
‘‘Mr.~Jones’’,
% ~ produces an unbreakable interword space.
or within a word---especially when the word is a symbol like
\mbox{\em itemnum\/}
that makes little sense when hyphenated across
lines.
Footnotes\footnote{This is an example of a footnote.}
pose no problem.
\end{document}
%
% End of document.
35