情報系大学院生のWebメモ

ソフトウェアや Web サービス、Windows や Mac に関する情報系大学院生の備忘録ブログ

卒論/修論/博論のためのモダンな LaTeX の書き方

このエントリーをはてなブックマークに追加

f:id:sherlock_kjs:20151120042805p:plain

古い環境や、非推奨のコマンド・パッケージ・書式で LaTeX を書いていませんか?モダンLaTeX で美しい卒業論文/修士論文/博士論文を書く方法を紹介します。

古いコマンド・パッケージ・書式を新しいものに書き換えるのはもちろん、ドキュメントクラスや処理系をよりモダンなものにすると、LaTeX ファイルの構造的な(セマンティックな、コードとしての)美しさや PDF ファイルの見た目の美しさを磨くことができます。

注意事項

  • まだ LaTeX をインストールしていない人、LaTeX をインストールして1年以上経った人は、最新の LaTeX をインストールしましょう

  • 本記事は、上記のサイトでも紹介しているような W32TeX による TeX の環境で、卒業論文修士論文などの和文論文を書く人を対象としています。
  • LaTeX ファイルの基本的な書き方は、LaTeX の教科書である「LaTeX2e 美文書作成入門」(とそのサポートページ)を読みましょう。2015年現在、2013年に出版された改訂第6版が最新版です。3、4年ごとに改訂版が出版されているので、当書を購入される場合は最新版が出版されていないか確認しましょう。
  • 書式(エンコーディングやドキュメントクラスなど)が指定されている大学/大学院や学会もあります。本記事で推奨している書式と異なる場合は、指定されている書式に素直に従いましょう。

ダンLaTeX 環境の構築

ダンLaTeX 環境を構築するために、エンコーディングUTF-8 に、ドキュメントクラスを jsclasses に、処理系を e-upTeX にします。

エンコーディングUTF-8

LaTeX ファイルを書き始める前に、任意のテキストエディタでファイルのエンコーディングUTF-8 にしましょう。日本では、エンコーディングShift_JIS にしている人が多いです。しかし、よりモダンLaTeX ファイルを書くために、エンコーディングUTF-8 にしましょう。

TeXworks の既定のエンコーディングUTF-8 なので、何もする必要はありません。念のため、メニューの「編集」→「設定」をクリックして「TeXworksの設定」ダイアログを開き、「エディタ」タブの「エンコーディング」が「UTF-8」になっていることを確認してください。

f:id:sherlock_kjs:20151120033451p:plain

メモ帳、サクラエディタなどの(特に日本製の)テキストエディタでは、既定のエンコーディングShift_JIS になっています。これらのテキストエディタでは、エンコーディングUTF-8 に変更する必要があります。

ドキュメントクラス:jsclasses

LaTeX ファイルは、ファイルの冒頭にドキュメントクラスが指定されます。以下の例では、jarticle というドキュメントクラスを指定しています。

\documentclass{jarticle}

日本では、ドキュメントクラスとして jarticle や jreport が広く用いられています。しかし、より美しい PDF ファイルを生成するために、ドキュメントクラスには jsclasses を指定しましょう。

jsclasses とは、冒頭で紹介した「LaTeX2e 美文書作成入門」の著者の1人である奥村氏が作成された新ドキュメントクラスです。jsclasses には jsarticle/jsreport/jsbook という3つのドキュメントクラスが含まれています1。これらは、LaTeX 標準のドキュメントクラスである jarticle/jreport/jbook に数多くの改良がなされたものです。

jsclasses 用途・論理構造
jsarticle 記事、論文用のドキュメントクラスです。
部、節、小節、小々節、段落、小段落からなります。
jsreport レポート、報告書用のドキュメントクラスです。
部、章、節、小節、小々節、段落、小段落からなります。
jsbook 書籍用のドキュメントクラスです。
部、章、節、小節、小々節、段落、小段落からなります。

jsclasses の内 jsbook は書籍用のドキュメントクラスであり、論文を書くためには jsarticle か jsreport のどちらかを使用します。上記の表のように、jsarticle と jsreport の論理構造における違いは章(\chapter{} コマンド)が含まれているか否かという点です。そこで、章を用いずとも(短めの)論文を書ける場合は jsarticle を、章を用いて(長めの)論文を書く場合は jsreport を指定します。卒業論文修士論文などは文章量が多いので、jsreport を指定することになると思います。

ドキュメントクラスに jsarticle を指定する場合は、LaTeX ファイルの冒頭に以下のように記述します。

\documentclass{jsarticle}

ドキュメントクラスに jsreport を指定する場合は、LaTeX ファイルの冒頭に以下のように記述します2

\documentclass[report]{jsbook}

処理系:e-upTeX

LaTeX ファイルをコマンドプロンプトなどでタイプセット(コンパイル)するとき、以下のように platex コマンドを入力している人も多いかと思います。

$ platex sample.tex

この platex は、e-pTeX という処理系を用いて LaTeX ファイルをタイプセット(コンパイル)するというコマンドです。試しにコマンドプロンプトなどで以下のように入力すると、処理系として e-pTeX を用いていることが分かります。

$ platex -version
e-pTeX 3.14159265-p3.7-150805-2.6 (sjis) (TeX Live 2015/W32TeX)
kpathsea version 6.2.1
ptexenc version 1.3.3
Copyright 2015 D.E. Knuth.
There is NO warranty.  Redistribution of this software is
covered by the terms of both the e-pTeX copyright and
the Lesser GNU General Public License.
For more information about these matters, see the file
named COPYING and the e-pTeX source.
Primary author of e-pTeX: Peter Breitenlohner.

日本では、処理系に e-pTeX が広く用いられています。しかし、よりモダンLaTeX ファイルを書くために、処理系に e-upTeX を指定しましょう。

e-upTeX とは、e-pTeX などの従来の処理系の上位互換に当たるものです。e-upTeX のメリットの例として、以下のようなものがあります。

TeX の処理系については、以下のサイトが参考になります。

このサイトでも、

pTeX系の中ではUnicode対応などで e-upTeX がオススメ感があります。 jsclasses など日本語組版に必要なパッケージも e-upTeX に対応しているので、e-upTeXがいいのではないでしょうか。

と述べられています。

処理系に e-upTeX を用いるためには、LaTeX ファイルのドキュメントクラスを指定する箇所に uplatex オプションを付けなければなりません。ドキュメントクラスに jsarticle を、処理系に e-upTeX を指定する場合は、以下のように記述します。

\documentclass[uplatex]{jsarticle}

ドキュメントクラスに jsreport を、処理系に e-upTeX を指定する場合は、以下のように記述します。

\documentclass[uplatex, report]{jsbook}

LaTeX ファイルをタイプセット(コンパイル)する

ここまでで、モダンLaTeX 環境を整えたので、試しに LaTeX ファイルをタイプセット(コンパイル)してみましょう。まず、任意のテキストエディタで以下のような UTF-8sample.tex を作成してください。

% sample.tex
\documentclass[uplatex,report]{jsbook}
\begin{document}
% 表紙
\title{平成27年度 卒業論文\\
ポラーノの広場}
\author{宮沢賢治}
\date{2016年 3月}
\maketitle
% 本文
\chapter{序論}
\section{はじめに}
あのイーハトーヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモリーオ市、郊外のぎらぎらひかる草の波。
\section{目的}
あのイーハトーヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモリーオ市、郊外のぎらぎらひかる草の波。
\section{章構成}
あのイーハトーヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモリーオ市、郊外のぎらぎらひかる草の波。
\end{document}

この sample.tex を TeXworks でタイプセットする場合と、コマンドプロンプトでタイプセットする場合の2通りを紹介します。

TeXworks でタイプセットする

TeXworks でタイプセットするためには、準備が必要です。

  1. メニューの「編集」→「設定」をクリックして、「TeXworksの設定」ダイアログを開きます。
  2. 「タイプセット」タブをクリックして、「タイプセットの方法」の右下にある + ボタンをクリックします。

    f:id:sherlock_kjs:20151120033448p:plain

  3. 「タイプセットの方法を設定する」ダイアログが開かれるので、以下のように設定して「OK」をクリックします。
    • 名前:upLaTeX(ptex2pdf)
    • プログラム:ptex2pdf
    • 引数:右下の + ボタンをクリックして、表示された「新しい引数」に以下の引数をそれぞれ追加します。
      • -l
      • -u
      • -ot
      • $synctexoption
      • $fullname
    • 「実行後、PDFを表示する」のチェックは入れたままにします。

    f:id:sherlock_kjs:20151120033449p:plain

  4. 「TeXworks の設定」ダイアログに戻ったら、「OK」をクリックします。

以上で、準備は完了です。あとは、TeXworks の左上にあるプルダウンメニューから「upLaTeX(ptex2pdf)」を選択し、緑色のタイプセットボタンをクリックすればタイプセットすることができます。

f:id:sherlock_kjs:20151120033450p:plain

f:id:sherlock_kjs:20151120033447p:plain

コマンドプロンプトでタイプセットする

コマンドプロンプトでタイプセットするためには、uplatex コマンドを用います。cd コマンドなどを用いて sample.tex があるフォルダに移動し、以下のように入力します。

$ uplatex sample.tex
This is e-upTeX, Version 3.14159265-p3.7-u1.20-150805-2.6 (utf8.uptex) (TeX Live 2015/W32TeX) (preloaded
format=uplatex)
 restricted \write18 enabled.
entering extended mode
(./sample.tex(guessed encoding: UTF-8 = utf8)
pLaTeX2e <2011/05/07u00>+0 (based on LaTeX2e <2015/10/01> patch level 2)
Babel <3.9m> and hyphenation patterns for 79 languages loaded.
(c:/w32tex/share/texmf-dist/tex/uplatex/jsclasses-utf8/jsbook.cls(guessed encoding: UTF-8 = utf8)
Document Class: jsbook 2014/02/07 okumura
)
No file sample.aux.
・・・1・・・
[1] (./sample.aux(guessed encoding: UTF-8 = utf8)) )
Output written on sample.dvi (1 page, 1272 bytes).
Transcript written on sample.log.

以上のようにタイプセットが成功すると、sample.tex と同じフォルダに sample.auxsample.dvisample.log の3つのファイルが生成されます.続いて、以下のように dvipdfmx コマンドを入力すると、sample.tex と同じフォルダに sample.pdf が生成されます。

$ dvipdfmx sample.dvi
sample -> sample.pdf
[1]
22353 bytes written

非推奨のコマンド・パッケージ・書式

LaTeX ファイルを書くためのモダンな環境が整ったので、あとは適切な書式で LaTeX ファイルを書いていくだけです。しかし、現在では非推奨とされているコマンド・パッケージ・書式を用いないように気をつけなければなりません。過去問やテンプレート、インターネットで得られた情報の中には、今となってはバッドノウハウとなっている情報もあるかもしれません。以下のサイトなどを参考にして、正しいコマンド・パッケージ・書式を用いるようにしましょう。

以上のサイトでも紹介されているバッドノウハウの中から、代表的な(よく使われがちな)ものを4つだけ紹介します。ここで紹介するバッドノウハウがなぜ Bad なのか、などの詳細は以上のサイトを熟読しましょう。

太字や斜字など

# Bad
`{\bf ...}` や `{\it ...}` など
# Good
`\textbf{...}` や `\textit{...}` など

数式

# Bad
$$ ... $$
# Good
`\[ ... \]` や `\begin{align} … \end{align}` など

中央揃え

# Bad
\begin{figure}
  \begin{center}
    \includegraphics{...}
  \end{center}
\end{figure}
# Good
\begin{figure}
  \centering
  \includegraphics{...}
\end{figure}

EPS 画像

# Bad
EPS 画像
# Good
PDF, PNG or JPG etc.

余談

多くの人が古いコマンドをいまだに使っている理由の1つとして、「latex コマンド」などの検索キーワードで検索すると上位に表示されるLaTeXコマンド集というサイトの影響が考えられます。このサイトには、このページで紹介した Bad なコマンドがいまだに掲載されています。

検索結果の上位に掲載されているからといって、正しい(新しい)情報とは限らないということが改めて分かりますね。

参考サイト


  1. 正確に述べると、jsclasses に jsreport というドキュメントクラスはなく、jsclasses は jsarticle と jsbook の2つのドキュメントクラスからなります。

  2. なぜ \documentclass{jsreport} と書かないのかというと、jsreport 用のスタイルファイル jsreport.sty が用意されていないためです。jsarticle と jsbook には、それぞれ jsarticle.sty と jsbook.sty というスタイルファイルが用意されています。jsbook.sty に report オプションを指定することで、jsreport 相当のドキュメントクラスを指定することができます。