第3回 - LaTeX (Overleaf) の基本、Zipファイル

  1. 前回までのあらすじ
  2. matplotlib つづき
  3. Zipファイルとは?
  4. LaTeXとは?
  5. LaTeX の書き方
  6. 本日のまとめ・課題2つ
注意: 今週は、提出課題が 2つ (小課題3 + 中課題1) あります。

雑談

ニューヨーク時代の思い出… 新山は東工大の大学院 (修士課程) を卒業後、 米ニューヨーク大学 の計算機科学科に 6年間 (博士課程5年 + 研究員1年) 通っていた。

0. 前回までのあらすじ

1. matplotlib つづき

今回は、論文の図3 を描くことを考える:

このようなグラフは「散布図」と呼ばれている。matplotlib を使って このグラフを描くには、前回のつづき (kadai-plot-data フォルダの データが使える状態) で、以下のように入力する:

import numpy as np
import matplotlib.pyplot as plt

a = np.genfromtxt("./drive/My Drive/kadai-plot-data/cnm/ratio-join.txt")
plt.scatter(a[:,0], a[:,1], s=0.1, color="black")

plt.xlabel("#Joins")
plt.ylabel("Consolidation Ratio (#edges)")
plt.savefig("fig3.pdf")
plt.show()
すると、(すごい時間がかかった後) 以下のような図が表れる。

ここには 2つの問題がある:

画像ファイルが巨大なのは、 これがPDF形式 (fig3.pdf) であることによるものである。 このため、描画も非常に時間がかかってしまう。

演習 3-1. 散布図を描く
  1. 上のコードを実行し、fig3.pdf を実際に ダウンロードして拡大せよ。
  2. 上のコードを変更して、保存するファイル名を fig3.pdf から fig3.png に変更せよ。 できたファイルをダウンロードし、違いを確認せよ。
  3. コード中の適当な位置に以下の1行を挿入し、 縦軸を対数グラフにせよ:
    plt.yscale("log")

これまでに学習したことを使えば、 論文の図をすべて描くことができる:

演習 3-2. 論文の図をすべて描く (= 中課題 1)

論文のグラフ 図2 〜 図7 の画像ファイル、 およびそれを生成する matplotlib のプログラムすべてを 1個の Zipファイル にまとめよ:

図2図3図5図6図7

以下、描き方に関する説明:

図2 だけは特別で、これは以下のプログラムを使って 棒グラフ (bar) を 5回表示させればよい:

import numpy as np
import matplotlib.pyplot as plt

a = np.genfromtxt("./drive/My Drive/kadai-plot-data/cnm/time-join-500K.txt")
plt.bar(a[:,0], a[:,1], 10000, edgecolor="black", color="???", label="#Nodes = 500K")

a = np.genfromtxt("./drive/My Drive/kadai-plot-data/cnm/time-join-400K.txt")
plt.bar(a[:,0], a[:,1], 10000, edgecolor="black", color="???", hatch="???", label="#Nodes = 400K")

a = np.genfromtxt("./drive/My Drive/kadai-plot-data/cnm/time-join-300K.txt")
plt.bar(a[:,0], a[:,1], 10000, edgecolor="black", color="???", hatch="???", label="#Nodes = 300K")

a = np.genfromtxt("./drive/My Drive/kadai-plot-data/cnm/time-join-200K.txt")
plt.bar(a[:,0], a[:,1], 10000, edgecolor="black", color="???", hatch="???", label="#Nodes = 200K")

a = np.genfromtxt("./drive/My Drive/kadai-plot-data/cnm/time-join-100K.txt")
plt.bar(a[:,0], a[:,1], 10000, edgecolor="black", color="???", label="#Nodes = 100K")

plt.xlabel("#Joins")
plt.ylabel("Time [sec]")
plt.legend()
plt.show()

ここで、color="???" の ??? 部分には、 white あるいは black のどちらかを入れる。 hatch="???" の ??? 部分には、 //xx あるいは xxxx のどれかを入れると、 論文にあるのと同じ模様でグラフが描画できる。

生成する画像ファイルはすべて png形式とする。 これに加えて matplotlib の各プログラムを txt形式のファイルで保存し、 これらをひとつのフォルダの中に入れる:

できあがった kadai1.zip を T2SCHOLA で提出すればよい。

2. Zipファイルとは?

演習 3-3. Zipファイルを調べる
  1. 以前にダウンロードした kadai-plot-data.zip ファイルは何バイトあるか?
  2. この Zip ファイルを展開したフォルダの容量は合計何バイトあるか?
  3. Zip ファイルの圧縮率 (圧縮後サイズ ÷ 圧縮前のサイズ) は何パーセントか?

雑談

3. LaTeXとは?

LaTeXによる数式の例

  1. x^2 + y^2
    
  2. \sqrt{x^2 + y^2}
    
  3. \frac{x}{y}
    
  4. x = \frac{-b \pm \sqrt{b^2-4ac}}{2a}
    
  5. f(a) = \frac{1}{2\pi i} \oint\frac{f(z)}{z-a}dz
    

Word と LaTeX の違い

3.1. Overleaf を使う

今回は、Overleaf というクラウド上で使える LaTeX を使って文書を作成する。

クラウド上でなく、LaTeX を自分の PC にインストールして使いたい場合は、 以下を参照のこと:

演習 3-4. 最初の Overleaf プロジェクト
  1. まず Overleaf登録する ボタンを押し、メールアドレスとパスワードをつけて アカウントを作成する。
  2. 画面左上にある 新規プロジェクト ボタンを押し、 さらに 空のプロジェクト を選ぶ。 プロジェクト名として、hello と入力する。
  3. 画面が変わるので、左上の 新規ファイル ボタンを押す。 ファイル名として latexmkrc と入力する。 (注意: latexmkrc.tex はダメ、.tex の部分を消すこと)
  4. latexmkrc をクリックし、編集画面で以下の文字をペーストする: (赤線が表示されても気にしない)
    $latex = 'platex';
    $bibtex = 'pbibtex';
    $dvipdf = 'dvipdfmx %O -o %D %S';
    
  5. 左上隅にある メニュー ボタンをクリックし、設定の 「コンパイラ」の部分で LaTeX を選ぶ。
  6. main.tex をクリックし、編集画面で以下の文字をペーストする:
    \documentclass{jarticle}
    \begin{document}
    こんにちわ。
    \[ \sqrt{a + b} \]
    \end{document}
    
  7. 右上にある リコンパイル ボタンをクリックすると、 右半分に完成した文書が表示される。 (エラーがある場合は赤い文字が表示される)
  8. さらに右の ダウンロード ボタンをクリックすると、 完成した PDFファイルがダウンロードされる。

4. LaTeX の書き方

4.1. お約束

演習 3-5. LaTeX の練習
  1. 以下のファイルをダウンロードせよ: sample.tex
  2. Overleaf で、新しいプロジェクトを作成せよ (前回の hello プロジェクトを開いてもよい)。 前回と同じように latexmkrc を作成すること:
    $latex = 'platex';
    $bibtex = 'pbibtex';
    $dvipdf = 'dvipdfmx %O -o %D %S';
    
    (自分のPCにLaTeXをインストールした場合は、新しいフォルダを作成する。)
  3. 画面左上にある アップロード ボタンをクリックし、 ダウンロードした sample.tex を Overleaf 上にアップロードせよ。
  4. sample.tex ファイルをクリックして リコンパイル し、 正しく文書が表示されることを確認せよ。
  5. \author の中身を自分の名前に書き換えよ。
  6. 見よう見真似で \section コマンドを使って、 文書の最後に「おわりに」という節を追加せよ。

なお、この演習で使ったプロジェクトは次回の授業でも使うので、 消さずに残しておいたほうがよい。

4.2. LaTeX コマンドいろいろ

参考資料

技術1. 段落を変える

技術2. 数式の埋め込み

3.3. エラーが出る場合のチェックリスト

  1. latexmkrc は正しく作ったか? (latexmkrc.tex ではダメ)
  2. 「コンパイラ」を pdfLaTeX から LaTeX に変更したか?
  3. 文書の先頭に \documentclass が正しく書かれているか?
  4. 文章が正しく \begin{document}\end{document} で囲まれているか?
  5. コマンドやファイル名が正しく (全角ではなく) 半角文字で入力されているか?

5. 本日のまとめ・課題2つ

中課題1. 論文の図をすべて描く (7月5日締切)

演習 3-2. を完成させよ。 論文のグラフ 図2 〜 図7 の画像ファイル、 およびそれを生成する matplotlib のプログラムすべてを 1個の Zipファイル にまとめ、提出すること。 ファイル名は kadai1.zip であること。 Zip の中には計10個のファイル (fig2.png, fig2.txt, ..., fig7.png, fig7.txt) が含まれていなければならず、 採点基準は 1つのファイルにつき 2点 (全部で20点) である。

(授業中は間違って図7 を「図4」と説明していたので、 名前は fig4 でも fig7 でもよい。)

小課題3. LaTeX で作った PDF を提出する (7月5日締切)

演習 3-4. で作った LaTeX 文書の PDF ファイルを提出せよ。内容は、LaTeX を使ってあれば何でもよいので、 べつに好きな数式なり文章なりを入れてもかまわない。 (Overleaf のかわりに、自分の PC にインストールした LaTeX を使ってもよい。) ファイル名はなんでもよいが、拡張子は .pdf であること。


Yusuke Shinyama