平成 25 年度 情報リテラシー 担当 : 一色正晴 (4 号館 405) isshiki@cs.ehime-u.ac.jp http://ipr20.cs.ehime-u.ac.jp/~isshiki/literacy/
準備 リテラシ用のディレクトリ内に, 新たなディレクトリ tex を作成 HP からファイル tex.tar.gz をダウンロードして, 作成したディレクトリに保存 解凍 展開 sample.tex : 練習用ファイル tips.tex, layout_jarticle.eps, layout_jsarticle.eps: 補足資料 symbol.pdf : 数学記号集 lenna.eps : 画像のサンプル sinusoid.dat :gnuplot 用データ 2
今日の内容 TeX を用いた文書作成 TeXとは 処理 ( コンパイル プレビュー 印刷 ) の仕方 文法の簡単な説明 表や図の挿入 3
TeX とは 正式にはと E を下げて書く. それができないときは, TeX と書く 呼び方は テフ, テック D.E. Knuth が開発した組版ソフト きれいな数式等を表示 ワープロとの違いは? ワープロ仕上がりイメージを見て作成編集結果が直ちに反映編集にも専用ソフトが必要 TeX 一定の文法にそって作成処理 ( コンパイル ) が必要編集はエディタで可能 4
TeX の仲間たち ( 狭義の )TeX 空白の取り方の設定, 文字の種類の変更などの基本的な機能で構成 目次の作成などのより高度な機能は, 基本的な機能に追加登録することで作成 LaTeX 様式 判型ごとのレイアウトの標準化 章 節 図表 数式などの番号の自動生成 ptex,platex 日本語に対応正式にはと書く. それができないときは, LaTeX と書く. 呼び方は ラテフ, ラテック 5
TeX の仲間たち ( 狭義の )TeX 空白の取り方の設定, 文字の種類の変更などの基本的な機能で構成 目次の作成などのより高度な機能は, 基本的な機能に追加登録することで作成 LaTeX 様式 判型ごとのレイアウトの標準化 章 節 図表 数式などの番号の自動生成 ptex,platex 日本語に対応古いバージョン : LaTeX 2.09 新しいバージョン : LaTeX2e 見分け方は後ほど 6
今日の内容 TeX を用いた文書作成 TeXとは 処理 ( コンパイル プレビュー 印刷 ) の仕方 文法の簡単な説明 表や図の挿入 7
TeX での処理の流れ TeX 文書ファイル ( ソースファイル ) の作成 エディタを使って TeX の文法に沿ったテキストを作成 コンパイル 仕上がりの確認 ; プレビュー 印刷可能なファイル (PSファイル,PDFファイル) 8
TeX 文書ファイルの作成 最低限のルール 拡張子は.tex TeX 文書は documentclass[option ]{class } で開始 本体は begin{document} と end{document} で囲む % 以下行末までコメント Windows ( 円マーク ) UNIX ( バックスラッシュ ) 漢字コードにも注意 (TeX とは直接関係ないけど ) Windows Shift-JIS UNIX EUC LaTeX 2.09 では documentstyle[option]{class} で開始 9
TeX 文書ファイルの作成 % TeX サンプルファイル -- sample.tex % この行のように,% から行末まではコメントとして無視される. documentclass[]{jsarticle} % この部分をプリアンブルと呼び, % 余白などの指定やパッケージの読み込みを行う. begin{document} { TeX} の文書ファイルでは, ここに本文が入ります. 本文は... end{document} 10
コンパイル sample.tex は単なるテキストファイル 専用ソフト (TeX) で変換 ( コンパイル ) % platex sample.tex This is ptex, % ls sample.aux sample.dvi sample.log sample.tex sample.aux sample.dvi sample.log 補助ファイルで相互参照に利用 印刷に関する情報 メッセージを格納するログファイル 相互参照とは, 章 節 図表 数式などの番号を本分中で参照すること 11
コンパイル 文法の間違いがあると? TeX Wiki の エラーメッセージ が参考になる % platex sample.tex This is ptex,! Undefined control sequence. l. 8 Tex の文書? x を入力して終了し, エディタで修正 l. 8 はソースファイルの行数. 実際のエラーとエラーメッセージが対応しているとは限らないが, エラーメッセージが表示された行より前にエラーの原因がある. 12
仕上がりの確認 ( プレビュー ) と印刷 思い通りの文書ができた? % pxdvi sample.dvi & 印刷をするには? 印刷可能なファイルに変換 (PSファイルの場合) % pdvips sample.dvi % ls sample.aux sample.dvi sample.log sample.ps sample.tex % gv sample.ps & 最終確認 % lpr sample.ps 印刷 ( 今は, 印刷しないように!) 13
仕上がりの確認 ( プレビュー ) と印刷 印刷をするには? 印刷可能なファイルに変換 (PDFファイルの場合) % dvipdfmx sample.dvi % ls sample.aux sample.dvi sample.log sample.pdf sample.tex % acroread sample.pdf & 最終確認 14
今日の内容 TeX を用いた文書作成 TeXとは 処理 ( コンパイル プレビュー 印刷 ) の仕方 文法の簡単な説明 表や図の挿入 15
ドキュメントクラスとオプション % TeX サンプルファイル -- sample.tex documentclass[12pt, twocolumn]{jsarticle} % この部分をプリアンブルと呼び, % 余白などの指定やパッケージの読み込みを行う. オプション ドキュメントクラス 用紙サイズ, フォントサイズ様式 ( レポート 本など ) begin{document} などの指定の指定 { TeX} の文書ファイルでは, ここに本文が入ります... % この行はコメント end{document} 16
ドキュメントクラスとオプション ドキュメントクラス 新しいドキュメントクラス jsarticle, jsbook が使えるなら, そちらがお勧め! jarticle jreport jbook オプション 11pt, 12pt twocolumn leqno fleqn 雑誌に掲載される論文 レポート長めの報告書本 卒論など ( j を除くと見出し等が英語 ) 標準で用いるフォント (10pt) を11pt, 12ptに変更 2 段組数式番号を左に変更数式を左寄せに変更 17
プリアンブル 特別なパッケージの読み込み ページのレイアウトの変更 設定 documentclass から begin{document} までを プリアンブル と呼ぶ documentclass[]{jsarticle} usepackage[dvips]{graphicx} usepackage{verbatim} usepackage{amsmath, amssymb} setlength{ textwidth}{35zw} begin{document} % 図 (EPS) の貼付け % ファイルの内容表示 % 複雑な数式表示 % テキストの表示の幅 %1zw は和文フォント幅 18
文章構造 文章は部 (part), 章 (chapter), 節 (section) などで階層構造として構成 番号, 見出しのレイアウト ( フォントサイズや書体 ) は既にクラスファイル (jsarticle.cls, jsbook.cls など ) に設定 部 part 章 chapter 節 section 小節 subsection 少々節 subsubsection 段落 paragraph 小段落 subparagraph 19
文章構造 文章は部 (part), 章 (chapter), 節 (section) などで階層構造として構成 番号, 見出しのレイアウト ( フォントサイズや書体 ) は既にクラスファイル (jsarticle.cls, jsbook.cls など ) に設定 book または jsbook クラスでのみ使用可 部 part 章 chapter 節 section 小節 subsection 少々節 subsubsection 段落 paragraph 小段落 subparagraph 20
文章構造 % TeX サンプルファイル -- sample.tex documentclass[]{jsarticle} begin{document} section{ 文章を書く } { TeX} の文書ファイルではここに本文が入る. subsection{ 文章構造 } { TeX} では, 文章の論理的な構造と視覚的なレイアウトを分けて考えます. end{document} 21
文章構造 番号付き箇条書き や べた書き で, 番号を付けてはいけない! 22
文章構造 節 の始まりを示す命令( マーク ) で, 節のタイトルは 文章を書く です, という意味 フォントの種類や大きさ, 余白の取り方は, % TeXサンプルファイル -- sample.tex クラスファイルに記述されるので, 文章全体で documentclass[]{jsarticle} 統一される 節番号は, 自動的に付けてくれる begin{document} section{ 文章を書く } { TeX} の文書ファイルではここに本文が入る. 小節 の始まりを示す命令( マーク ) で, そのタイトルは 文章構造 です, という意味 subsection{ 文章構造 } フォントの種類や大きさ, 余白の取り方, 番号 { TeX} では, 文章の論理的な構造と視覚的なレイアウトを分けて考えますの自動生成などは上と同じ. end{document} 23
文章構造 % TeX サンプルファイル -- sample.tex documentclass[]{jsbook} begin{document} chpter{ 文章を書く } { TeX} の文書ファイルではここに本文が入る. section{ 文章構造 } { TeX} では, 文章の論理的な構造と視覚的なレイアウトを分けて考えます. end{document} 24
文章構造 25
基本的な書式 ( 改行 ) ソースファイル中の改行は無視 改行するには? TeX で改行するにはどうすればよいでしょう. このように空行を入れると改行してくれます. さらに嬉しいことに, 改行後自動的に字下げをしてくれます. 強制改行は 字下げは行わない ソースの可読性の低下 通常の改行に強制改行は使用しない! 26
基本的な書式 ( フォント ) フォントの書体を変更するには? 語句の強調には textgt{ ゴシック体 } などを使う. フォントの大きさを変更するには? 大きさを { small 小さく } したり,{ large 大きく } したりできる.{ LARGE さらに大きく } もできる. 特殊な文字を表示するには? 基本的には % や { のように, 表示したい文字の前に をつける. 27
基本的な書式 ( 空白の扱いと命令 ) 空白の扱い 半角空白は, 何個並べても1 個分の空白 行頭 行末の半角空白は, 何個あっても無視 地の文と命令 半角空白は, 地の文と命令の区切りでもある この文章は TeX で書きました. 命令の後ろに空白を入れて, 文章と命令の区別が必要! この文章は { TeX} で書きました. 命令を中括弧で囲んでも OK! 28
基本的な書式 ( 箇条書き ) 記号付き (itemize) 項目付き (description) begin{itemize} item 第 1 番目の項目 item 第 2 番目の項目 item 第 3 番目の項目 end{itemize} begin{description} item[ 第 1 項目 ] 第 1 番目の項目 item[ 第 2 項目 ] 第 2 番目の項目 item[ 第 3 項目 ] 第 3 番目の項目 end{description} 番号付きの箇条書きは, itemize を enumerate に変更 begin{ } で始まり, end{ } で終わる領域を, 環境 と呼ぶ 29
基本的な書式 ( 引用 ) 本文の一部を引用するときには? begin{quote} quote 環境では, 左右に空白が挿入され, 引用であることを 明確に表示させることができる. 改行は, 空行を挿入することで行われる. ただし,quote 環 境では行間が少し大きくなるが, 字下げは行われない. 字下げを行うには quotation 環境を使用すればよい. end{quote} 30
基本的な書式 ( 入力通りに表示 ) C 言語のソースコードを添付するには? # { } が TeX の命令と解釈される 無効化が必要 verbatim 環境の使用 begin{verbatim} #include <stdio.h> int main() { printf( Hello world n ); return 0; } end{verbatim} Tab は空白 1 文字と同じなので, インデントがずれる可能性あり ( 要注意 ) 31
基本的な書式 ( 入力通りに表示 ) C 言語のソースコードを添付するには? 読み易くするには? quote 環境の併用 begin{quote} setlength{ baselineskip}{12pt} begin{verbatim} #include <stdio.h> baselineskip で行の間隔を調整 int main() { printf( Hello world n ); return 0; } end{verbatim} end{quote} 32
基本的な書式 ( 入力通りに表示 ) 文中に埋め込みたい verb の後に + または などで, 埋め込みたい記号を挟む 埋め込みたい所で verb+%_{}+ と書く. 表示したい記号列に含まれない記号で囲む コンパイル可能 verb@%_{}@ や verb-%_{}- コンパイル不可 verb%%_{}% や verb_%_{}_ 大きなファイルを埋め込みたい プリアンブルに usepackage{verbatim} を挿入し, 表示させたいところで verbatiminput{./hello.c} パスに注意してファイル名を指定 33
基本的な書式 ( 右寄せ 左寄せ 中央揃え ) 案内状など, タイトルの位置を中央に揃えたい 日付を右寄せしたい begin{flushright} 平成 17 年 10 月 6 日 end{flushright} % 右寄せ begin{flushleft} % 左寄せ情報リテラシ受講者各位 end{flushleft} begin{center} % 中央揃え { LARGE 補講通知 } end{center} 34
今日の内容 TeX を用いた文書作成 TeXとは 処理 ( コンパイル プレビュー 印刷 ) の仕方 文法の簡単な説明 表や図の挿入 35
表の作成 tabular 環境を使用 begin{tabular}{ l l c c } hline 実験テーマ & 実験日 & 実験場所 & 担当者 hline hline ガイダンス & 10/5 & 4 号館 19 番講義室 & 全教員 画像処理 & 10/19 & 本館 706 号室 & 佐藤 hline end{tabular} 36
表の作成 tabular 環境を使用 begin{tabular}{ l l c c } hline 実験テーマ & 実験日 & 実験場所 & 担当者 縦罫線は hline で, 横罫線は hline hline で設定 ガイダンス & 10/5 & 4 号館 19 番講義室 & 全教員 画像処理 & 10/19 & 本館 706 号室 & 佐藤 hline end{tabular} 各項目の位置 r 右寄せ c 中央 l 左寄せ 表の項目は & で区切る 行の変更は で ( 環境によってはバックスラッシュ 2 つ ) 37
図の挿入 作図ツール (gnuplot や Tgif) で作成した図を, EPS 形式で保存 EPS 形式の図をはめ込むには? プリアンブルに usepackage[dvips]{graphicx} を挿入し, 図をはめ込みたい所で と記述 includegraphics[width=8cm, clip]{./lena.eps} [ ]; オプションで, 図の大きさや向きを指定 { }; はめ込みたいファイル (eps ファイル ) を指定 絶対パスもしくは相対パスで指定 38
図や表にキャプションを付ける 表や図には, 番号とキャプション ( 簡単な説明文 ) を付けることが必要 表の場合 表の上部に 図の場合 図の下部に 力技で番号やキャプションを付けると? 図や表を新たに挿入すると, 番号の付け直しが必要 改ページで, 図や表とキャプションが分離する可能性あり TeX では, 便利な環境が用意 表の場合 tabule 環境 図の場合 figure 環境 表のキャプション 39
図や表にキャプションを付ける table 環境 begin{table}[htbp] centering % 中央寄せ caption{ 平成 17 年度実験計画 } % キャプションを指定 begin{tabular}{ l l c c } hline 実験テーマ & 実験日 & 実験場所 & 担当者 hline hline ガイダンス & 10/5 & 4 号館 19 番講義室 & 全教員 画像処理 & 10/19 & 本館 706 号室 & 佐藤 hline end{tabular} end{table} 40
図や表にキャプションを付ける figure 環境 begin{figure}[htbp] centering includegraphics[width=8cm, clip]{lenna.eps} caption{ サンプル画像 } % キャプションを指定 end{figure} 41
図や表にキャプションを付ける figure 環境 begin{figure}[htbp] centering includegraphics[width=8cm, clip]{lenna.eps} caption{ サンプル画像 } % キャプションを指定 end{figure} [htbp] は, 図や表の出力可能位置を指定 h その位置 (here) に出力 t ページ上端 (top) に出力 b ページ下端 (bottom) に出力 p 単独ページ (page) に出力 42
まとめ TeX を用いた文書作成 TeXの成り立ちとその仲間 処理 ( コンパイル プレビュー 印刷 ) の方法 基本的な文法 表や図の挿入 プログラミング言語と同じで, 実際に使うことが大切 43
演習問題 第 11 回 : コンパイラ 以下の文書を完成させよ コンピュータ (CPU) は, 命令やレジスタなどをビット列で記述した (1) 機械語を理解し, 実行する. しかし, 人間は, (1) 機械語を理解することが困難である. そこで, 以前は, 命令やレジスタなどに名前を付けて読みやすくした (2) アセンブリ言語でコーディングしていた. この (2) アセンブリ言語を (1) 機械語に変換するプログラムが (3) アセンブラである. GCC で (2) アセンブリ言語を得るには % gcc (4)-S hoge.c とすればよく, この例の場合では (5)hoge.s というファイル名で生成される. (2) アセンブリ言語は単純な命令の組合せであるため, これを用いて複雑かつ大規模なプログラムをコーディングすることは難しい. そこで, Pascal や C 言語など, 人間がより理解し易い (6) 高級言語が開発された. 前処理された (6) 高級言語を (2) アセンブリ言語に変換するプログラムを,(7) コンパイラと呼ぶ. 44
演習問題 第 11 回 : コンパイラ 以下の文書を完成させよ ( 続き ) なお,(2) アセンブリ言語および (6) 高級言語は,(8) テキスト形式で記述されるので, エディタで容易に編集できる. 一方,(1) 機械語は (9) バイナリ形式で記述される. 実際には, 変換された (1) 機械語はまだ実行できる状態でなく, 入出力関数など汎用的な関数を集めた (10) ライブラリを結合することで, 実行可能ファイルを得る. この結合過程を (11) リンクと呼ぶ.GCC では, 一部の (10) ライブラリを (11) リンクするには, 明示的に指示を与える必要がある. 例えば, 数学関数を利用するには, % gcc hoge.c (12)-lm とする必要がある. 以上の過程を次のスライドに図示する. 45
演習問題 第 11 回 : コンパイラ 以下の文書を完成させよ ( 続き ) #include <stdio.h> #include <math.h> int main() (16) コンパイル (17) アセンブル 01000101 (18) リンク 01000101 { root = sqrt(2); 01 sqrt printf 0001001 } (13) ソースファイル (14) オブジェクトファイル (15) 実行可能ファイル /usr/lib/libc.a /usr/lib/libm.a (19) 共有ライブラリ 46
演習問題 第 11 回 : コンパイラ (1) 機械語 (2) アセンブリ言語 (3) アセンブラ (4) -S (5) hoge.s (6) 高級 (7) コンパイラ (8) テキスト (9) バイナリ (10) ライブラリ (11) リンク (12) -lm (13) ソースファイル (14) オブジェクトファイル (15) 実行可能ファイル (16) コンパイル (17) アセンブル (18) リンク (19) 共有ライブラリ 47
演習問題 第 11 回 : コンパイラ プログラム average.c のデバッグ 警告オプションなしでも, コンパイルできることを確認 警告オプションを付けてコンパイルし, メッセージに従ってプログラムを修正 メッセージの意味と, いかに修正すべきかを説明すること 48
解答 % gcc -Wall average.c average.c: 関数 `main' 内 : average.c:19: 警告 : フォーマットは int ですが 引数は double です ( 引数 2) 19 行目の scanf の書式指定が %lf であるべきだが %d である average.c: 関数 `get_average' 内 : average.c:34: 警告 : control reaches end of non-void function 関数 get_average が値を返す return 文が抜けている printf("average = %lf n", ave); double get_average(double data[], int n) { ave /= n; return ave; } 49
演習問題 第 11 回 : コンパイラ Makefile の作成 以下の依存関係にあるプログラムをコンパイルするための Makefile を作成せよ 発展課題 上で作成した Makefile を可能な限り簡略化せよ 簡略化の方針を, 詳しく説明すること error.o: error.c error.h io_image.o: io_image.c io_image.h image_type.h error.h utile.h utile.o: main.o: imgapply: utile.c image_type.h error.h utile.h main.c image_type.h io_image.h utile.h main.o error.o io_image.o utile.o 50
Makefile の作成 imgapply: main.o error.o io_image.o utile.o gcc -o imgapply main.o error.o io_image.o utile.o io_image.o: io_image.c io_image.h image_type.h error.h utile.h gcc -c io_image.c utile.o: utile.c image_type.h error.h utile.h gcc -c utile.c error.o: error.c error.h gcc -c error.c main.o: main.c image_type.h io_image.h utile.h gcc -c main.c 51
Makefile の作成 ( 簡略版 ) OBJS = main.o error.o io_image.o utile.o imgapply: $(OBJS) gcc -o imgapply $(OBJS) io_image.o: io_image.c io_image.h image_type.h error.h utile.h utile.o: utile.c image_type.h error.h utile.h error.o: error.c error.h main.o: main.c image_type.h io_image.h utile.h 52
演習問題 第 12 回 :TeX1 日目 Sample.tex を改変し, 以下の環境を使用した PDF 文書を作成せよ ( 各環境の内容は本日の資料の例と同じで良い ) 記号付き箇条書き (itemize) 引用 (quote) ソースコードの表示 (verbatim) 表 (tabular) 図の挿入 (includegraphics)