UP | HOME

第4回 アカデミックスキルI レポートの作成技術(2)

Table of Contents

1 このページの更新履歴

2 Emacs でファイルを作って保存してみよう

2.1 Emacs を起動する

  • 左下のメニューから ユーティリティ→エディタ→Emacs を選択

2.2 新しいバッファを開く

  • Emacs 上で C-x C-f とすると,新しいバッファを開き,そこにファイルの内容を表示させられる
  • ミニバッファに Find file: ~ と表示されるので,これを Find file: ~/brank.tex となるように修正して RET
  • 入力されたファイル名(brank.txt)が存在する場合はそのファイルの内容が開かれる
  • 当該ファイルが無い場合は,新しいバッファが開かれる

2.3 バッファを編集して保存する

  • 開いたバッファのモードラインにファイル名(brank.tex)と表示されているのを確認し,適当な文字列を入力
  • モードラインの記号が ** となっているのを確認(--: 変更なし **: 変更あり).
  • C-x C-s とすると,当該ファイル名でバッファを保存
  • 保存が完了するとモードラインの記号が -- となるので,確認

3 LaTeX ファイルを作成し,コンパイルしてみよう

3.1 tex_sample.tex というバッファを作成する

  • 上述の方法で tex_sample.tex というファイル名でバッファを作成する
  • tex_sample.tex に以下の内容をコピー&ペースト(C-y)する
  • 保存(C-x C-s)する

3.2 tex_sample.tex をコンパイルして tex_sample.dvi を作成する

  • Emacs 上で M-! (ALT と Shift を押しながら1)とする
  • ミニバッファに Shell Command: と表示されるので,その後に
    platex tex_sample.tex
    

    と入力して RET する.

  • フレームが上下に分割され,下側のウィンドウにコンパイル結果が表示される. ここで C-x o とすればウィンドウを切り替えられる. C-M-vC-M-S-v とすると別のウィンドウをスクロールさせられる.
  • 出力結果の最後に以下が表示されていれば,コンパイルが完了している.
    Output written on tex_sample.dvi (1 page, 1608 bytes).
    Transcript written on tex_sample.log.
    
  • 出力結果の最後に以下が表示されている場合は,コンパイルが失敗している.
    No pages of output.
    Transcript written on texput.log.
    

3.3 tex_sample.dvitex_sample.pdf に変換する

  • tex_sample.dvi が生成されていることを確認する. C-x C-ftex_sample まで入力して TAB キーを押すと, tex_sample で始まるファイル名が表示される.この中に tex_sample.dvi が無ければ,何らかの理由でコンパイルに失敗しているので,もう一度 tex_sample.tex の生成からやり直す.

    情報基盤センターの環境では機能しない
  • tex_sample.dvi が存在するなら, M-! として Shell command: の後に
    dvipdfmx tex_sample.dvi
    

    と入力して RET するとミニバッファに変換結果が表示される.

  • 変換結果に
    tex_sample.dvi -> tex_sample.pdf
    [1]
    32789 bytes written
    

    と表示されれば正常に完了.

  • 変換結果に
    tex_sample.dvi -> tex_sample.pdf
    
    ** ERROR ** Could not open specified DVI file: tex_sample.dvi
    
    Output file removed.
    

    などと表示された場合は,何らかの問題が生じていて変換できていない.

3.4 変換された tex_sample.pdf を開く

  • Cent OS の左下のメニュー→ホームを選択すると ~/ に対応するフォルダが表示される.

    menu-home.png

  • 生成された PDF ファイル(tex_sample.pdf) を見つけてダブルクリックすると PDF が開かれる.

4 LaTeX ファイルから PDF ファイルを作る前のチェック

4.1 ファイルは保存されているか?

  • モードラインの記号が ** となっている場合は,ファイルが保存されていない. C-x C-s として保存しよう.
  • 保存が完了するとモードラインの記号が -- になる.

4.2 ファイルは存在するか?

  • platex を使ったコンパイルに失敗すると,dvi ファイルが生成されない.存在しないファイルに対して dvipdfmx を行なっても,当然,何も処理されない.
  • platex を行なう前に, tex_sample.tex が存在しているか確認しよう.
  • dvipdfmx を行なう前に, tex_sample.dvi が存在しているか確認しよう.
  • ファイルが存在するかどうか確認する方法:
    C-x C-d (list-directory)
    List directory (brief): ~/
    

    フォルダ名(デフォルトでは現在のフォルダ)を入力して RET すると,当該フォルダ内のファイル一覧が表示される.

    M-x find-name-dired
    Find-name (directory): ~/
    

    フォルダ名(デフォルトでは現在のフォルダ)を入力して RET すると,

    Find-name (filename wildcard):
    

    と表示されるので,ファイル名を入力して RET すると,指定したフォルダ下の該当する全てのファイルを表示してくれる.

    wildcard というのは七並べのジョーカーや UNO のワイルドカードのような「どんな文字にもなれる特殊な文字」で,以下の2種類がある.

    *	任意の長さの文字
    ?	任意の1文字
    

    例えば,ファイル名を

    tex_sample*
    

    とすれば, tex_sample で始まる全てのファイル名を表示してくれるし,

    *.pdf
    

    とすれば, pdf で終わる全てのファイル名を表示してくれる.

4.3 ファイル名は正しいか?

  • TeXファイル(.tex)と platex の引数に与えているファイル名は同じものだろうか?
  • TAB 補完(ファイル名を途中まで入力して TAB を押す)ができる場合は積極的に使おう
  • よくある間違い
    • 大文字/小文字を間違える(e.g. TEX_sample.tex)
    • _ (アンダーバー)と - (ハイフン), 1l, 0o など
    • 拡張子(.tex)を忘れる(うまく動くこともある)

4.4 LaTeX のコマンドを間違えていないか?

  • LaTeX のコマンドは, \ (バックスラッシュ,109キーボードでは右上の¥マーク)で始まる.
  • コマンドの後には,時折 {...} (波括弧)で引数が, [...] (角括弧)でオプションが与えられる. 開き/閉じ括弧は対応しているだろうか?, 一方が () などの 丸括弧になっていないだろうか?
  • LaTeX のコマンドは,よほど特殊な設定をしない限り, 半角 のみで構成される. 全角にしていないだろうか?
  • 例年,散見されるコマンド間違いの例(\author{氏名} の部分):
    \author{川内 情太郎 % 閉じ波括弧 } を忘れている
    \author{川内 情太郎) % 丸括弧 ) で閉じている
    \author(川内 情太郎) % 波括弧 {...} でなく丸括弧 (...) を使っている
    \author{川内 情太郎}} % 閉じ波括弧が余分
    \author{川内 情太郎} % バックスラッシュ \ が全角になっている
    \author{川内 情太郎} % 閉じ波括弧が全角になっている(難易度高!)
    

4.5 \begin{} \end{} の対応はとれているか?

  • \begin{document}, \begin{itemize}, \begin{enumerate} など, \begin{環境名} で始まる LaTeX コマンド(環境; environment と呼ばれる)は, 常に, end{document}, \end{itemize}, \end{enumerate} など,対応する \end{環境名} で終わらなければならない.
  • サンプルファイルをコピー&ペーストする際に \begin{...}\end{...} のどちらかを 忘れていないだろうか?
  • \begin{...}\end{...} のどちらかで,上述したような コマンド間違い(特に括弧)をしていないだろうか?

5 LaTeX コンパイルのエラー対策

5.1 エラー・メッセージからエラーの内容と場所を特定する

TeX ファイルをコンパイルして dvi を作成するとき,出力結果ウィンドウの最後に

No pages of output.
Transcript written on texput.log.

と表示されている場合, 何らかの問題 があってコンパイルに失敗している.どんな問題で失敗したのかを調べるには エラーメッセージを読む必要 がある. エラーメッセージは(残念ながら) 英語でしか表示されない が,少しトレーニングすれば簡単に読めるようになる.

コンパイルに失敗した場合,出力結果には,大抵,以下のような ! で始まるエラーメッセージが表示されている.

! Undefined control sequence.
l.7 これは \LaTEX
                  のサンプルです.
  • 最初の ! の直後の英語(Undefined control sequence.)は, エラーの内容 を表している.この場合は「未定義のコマンド(control sequence)です」と訴えている.
  • その次の l.7エラーが置きた場所(行番号) を表している.ここでは,更に \LaTEX の後で改行されており, \LaTEX というコマンドが定義されていないことが明示されている.

以上のことから,直ちに, 7行目の \LaTeX というコマンドを \LaTEX と誤って入力したのだ,ということが判る.

5.2 エラーメッセージに表示された行に問題がある場合

LaTeX に限らず,大半は エラーメッセージに表示された行に問題がある ので,その部分を表示させて修正すればよい.

Emacs で指定した行番号にカーソルを移動させるには, M-x goto-line とした後,

Goto line:

の後に行番号を入力して RET とする.

修正したら C-x C-s で保存するのを忘れないように.

5.3 エラーメッセージに表示される行とは別の部分に問題がある場合

厄介なのは,エラーメッセージに表示された行とは別の部分に問題がある場合. 例えば,4行目の \begin{document} の最後の波括弧を間違えて丸括弧で閉じて \begin{document) とした場合, 以下のようなエラーメッセージが表示される.

Runaway argument?
{document) \maketitle これは \LaTEX のサンプルです.こうすると{\bf 太\ETC.
! Paragraph ended before \begin was complete.
<to be read again> 
                   \par 
l.11

エラーメッセージは11行目を指しているが,11行目はただの空行なので修正のしようが無い.

こういう時は,エラーの内容を 丁寧に読むしか無い. この

Paragraph ended before \begin was complete.

は「 \begin というコマンド(の引数)が完結する前に段落が終わってる」という意味.

さらに,その上を見ると,

Runaway argument?
{document) \maketitle これは \LaTeX のサンプルです.こうすると{\bf 太\ETC.

と表示されている.これは「引数(argument)が暴走(runaway)しているのでは?」という意味で, \begin というコマンドの引数 {...} の中身が やたら長い (TeXのコンパイラは {document) \maketitle これは \La... という引数が与えられたと解釈している)ことを示唆しているのだ.

このことから, {document) \maketitle のあたりで LaTeX コマンドの 波括弧が正しく閉じられていないのだな ということが判る.

5.4 TeX のエラー対策に関する参考資料

6 エラー対策をしてみよう

以下のソースファイルには 6ヶ所 7ヶ所 間違いが含まれている.全て修正し,適切な PDF を作成せよ.

ソースファイルのコピー&ペーストに失敗すると 何してるのか判らなくなる ので注意.

Author: Takeshi Nagae

Created: 2014-06-06 Fri 15:56

Emacs 24.3.1 (Org mode 8.2.5h)

Validate