ト部蛸焼のブログ

日頃知ったことをアウトプットするためのブログ

計数工学科 卒論・修論 LaTeXテンプレートについて

この記事では計数工学科*1卒業論文修士論文を書く際に標準となっている LaTeXテンプレートの使い方を勝手に解説します。Overleaf で作業する場合を想定した使い方も併記します。なお,細かい説明は註に書き込むため,詳細を気にする方はそちらも併せてご覧ください。

LaTeX テンプレートをダウンロード

まずは標準クラスファイルをダウンロードします。

数理 ➡︎URL: https://www.keisu.t.u-tokyo.ac.jp/research/latex/

  • 「suribt」は論文(卒論・修論)用のクラスファイル
  • 「suribtabst」は要約用のクラスファイル

システム ➡︎URL: https://www.keisu.t.u-tokyo.ac.jp/research/latex-system

  • 「systemB」は卒論用のクラスファイル
  • 「systemM」は修論用のクラスファイル

文字コードを修正

上記ページで配布されるファイルには,UTF-8 ではない文字コードで書かれたものもあります*2。これを修正します*3

nkf(Network Kanji Filter)というソフトウェア*4を使用するとファイルの文字コードを変更することができます。UTF-8 に変更するなら

nkf -w --overwrite [ファイル名]

をターミナルで実行すれば OK です*5


upLaTeX を使う—ファイル篇

普段,upLaTeX を使っている方*6は以下の内容を cls ファイルから見つけ出して*7,例えば「11pt」の後ろに uplatex オプションを追記します*8*9

\LoadClass[a4paper,onecolumn,titlepage,11pt,uplatex
  % 6行中略 %
]{jsbook}

なお,2021年11月7日現在配布されている suribt.cls では既に「uplatex」が追記されています。upLaTeX を使いたくない場合は,これを消してください*10


Overleaf で (u)pLaTeX を使用する

コンパイラLaTeX に設定しただけではうまく (u)pLaTeXコンパイルしてくれないため*11Overleafの案内にあるように「latexmkrc」というファイルを作ります*12。ちなみに以下は私個人が使っている設定です。

upLaTeX の場合の latexmkrc はこれ⬇︎

$latex = 'uplatex %O -kanji=utf8 -no-guess-input-enc -synctex=1 -interaction=nonstopmode %S';
$bibtex = 'upbibtex %O %B';
$dvipdf = 'dvipdfmx %O -o %D %S';
$makeindex = 'mendex %O -o %D %S';
$pdf_mode = '3';

pLaTeX の場合の latexmkrc はこれ⬇︎

$latex = 'platex %O -kanji=utf8 -no-guess-input-enc -synctex=1 -interaction=nonstopmode %S';
$bibtex = 'pbibtex %O %B';
$dvipdf = 'dvipdfmx %O -o %D %S';
$makeindex = 'mendex %O -o %D %S';
$pdf_mode = '3';

いざコンパイル

ここまで来れば正しくコンパイルできると思います。
思う存分,あなたの研究結果をまとめてください。


参考文献

計数 卒論・修論テンプレートについて(近年更新があるもの)
1. 計数工学科 LaTeX テンプレートについて - Qiita
2. 計数工学科卒論LaTeXテンプレートをOverleafでコンパイルする - Qiita
3. 東京大学工学部計数工学科 | LaTeXテンプレート 【数理側】
4. 東京大学工学部計数工学科 | LaTeXテンプレート(システム情報工学コース/システム情報学専攻) 【システム側】

nkf について
5. nkf Network Kanji Filter Project Top Page - OSDN 【公式】
6. 【 nkf 】コマンド――文字コードと改行コードを変換する:Linux基本コマンドTips(51) - @IT

latexmk について
7. Latexmk 【公式】
8. Latexmk - TeX Wiki

Overleaf × 日本語について
9. Japanese - Overleaf, オンラインLaTeXエディター 【公式】
10. Overleaf v2 で日本語を使用する方法 - TeX Alchemist Online


おまけ

upLaTeX vs pLaTeX
upTeX,upLaTeX - TeX Wikiに upTeX や upLaTeX に関する説明がありますが,upLaTeX は pLaTeX の上位互換といえます。個人的にはこの2つなら upLaTeX を使うほうが良いと考えます。


BibTeX
BibTeX とは参考文献リストの成形を行うツールです。一定の書式で参考文献を出力するためには必須のツールと言えます。

BibTeX では以下のような書式で文献情報を登録した項目を書き連ねた bib ファイルを作成します*13。この書式はBibTeX - Wikipediaにも載っていますし,Springer や IEEE などのページでは BibTeX 形式の文献情報を出力する機能がついていますから,わざわざ覚える必要はありません。

@inproceedings{KEY,
  author = {Author, First and Author, Second},
  booktitle = {Book Title},
  title = {{Literature Whose Title Has Some Capitalized Word in It}},
  year = {9999},
  pages = {1--14},
}

……で,おまけとしてお伝えしたかったのは次の2つ:

  • title のエントリはさらに波括弧で括ることで大文字小文字を忠実に出力してくれます。
  • pages のように,数の範囲には hyphen (-) ではなく en dash (–)
    を使います*14

文献タイトルは「title =」の後を二重波括弧で記したものを[1]と[3],一重波括弧で記したものを[2]と[4]に出力しています。[2]と[4]では文献タイトルの1単語目しかキャピタライズされません。

f:id:tobetakoyaki:20211110011308p:plain:w300
BibTeX を利用した参考文献リストの出力例


和暦
「\和暦」➡︎「\today」で年号に和暦を使えます*15。しかし,2021年11月9日現在,suribt.cls 以外では「令和」対応がされていないようです*16。これには「\today」の定義を,jsbook.cls や jsarticle.cls にある「\today」と置き換えることで対応できますが,論文提出月は固定されているため,ほとんどの方は \today を使わずに月を直接入力するでしょうから特に問題はありません。#それはそう

*1:正確には,東京大学工学部計数工学科および同大学院情報理工学系研究科数理情報学専攻および同研究科システム情報学専攻です。

*2:nkf の guess によれば,「suribt-20191220.zip」は tex,cls が UTF-8,dtx が ISO-2022-JP,ins が ASCII で書かれており,「suribtabst-20141120.zip」は texShift_JIS,cls は ISO-2022-JP で書かれており,「systemB-20181225.zip」は texShift_JIS,cls は ISO-2022-JP で書かれており,「systemM-20181225.zip」は texShift_JIS,cls は ISO-2022-JP で書かれているようです。

*3:修正しないとコメントアウトに何が書いてあるのか分からないだけでなく,定義内容が正確に処理されない可能性があります。修正しましょう。

*4:URL: https://osdn.net/projects/nkf/

*5:nkf の使い方に関しては参考文献6: https://atmarkit.itmedia.co.jp/ait/articles/1609/29/news016.htmlで詳しく解説されています。

*6:例えば tex ファイルの冒頭に「\documentclass[uplatex, dvipdfmx]{jsarticle}」などと書いている人はこれに該当します。

*7:「LoadClass」または「jsbook」で検索するとすぐ見つかります。

*8:補足 「\LoadClass」というコマンドは cls ファイルの中で別の cls ファイルを読み込むコマンドです。使い方は通常のドキュメントファイルの冒頭で使う「\documentclass」と同じです。今回は upLaTeX を使いたいため,通常の文書で行うのと同じように,jsbook クラスに uplatex オプションを付けて読み込むようにしています。なお,dvipdfmx の指定もここに書き加えて良いと思いますが,tex ファイルの冒頭で「\documentclass[..., dvipdfmx, ...]{suribt}」のように記述しても構いません。

*9:ちなみにクラスファイルを本気で書き換えようと思う場合は,例えば「\newif\ifuplatex」「\uplatexfalse」「\DeclareOption{uplatex}{\uplatextrue}」を「\ProcessOptions」の前に挿入した上で,「\ifuplatex ,uplatex\fi」を jsbook の呼び出しをしているどこかに挿入することで実現できます。これらのコマンド群の内容を説明します。まず初めの「\newif」の行では新しい if コマンドを定義しています。次の行ではこのコマンドを false にしています。そして,クラスファイルの読み込み時に uplatex オプションが指定されたときに \ifuplatex が true になるように変更します。これを使うと,uplatex オプションが指定されたときだけ「\ifuplatex = true」となるので,「\ifuplatex ,uplatex\fi」によって uplatex オプションが jsbook に渡されたことになります。

*10:dtx ファイルにはこの追記がなされていないため,新たに ins ファイルから生成しなおしても問題ありません。

*11:ログを見るとコンパイラLaTeX にしても pdfLaTeX にしたときと挙動があまり変わらないように見えました。どうして……

*12:補足 1行目は upLaTeX でファイルをコンパイルするときの設定です。同様に2–4行目はそれぞれ,BibTeX を upBibTeX で,dvipdf を dvipdfmx で,makeindex を mendex で行うと設定しています。5行目は pdf の生成方法を指定しています。数字が0なら PDF を生成しない,1なら pdfLaTeX で生成する,2なら ps ファイルから生成する,3なら dvi ファイルから「$dvipdf」に指定した方法で pdf ファイルを生成する,4なら LuaLaTeX で生成する,5なら XeLaTeX で生成するというように対応が決まっています。

*13:どのタイミングで作成するかについてですが,論文を書き始めたときでも良いですし,日頃から論文を読み漁っているそのときからでも構いません。……というような話が『美文書入門』にあったと記憶しています。BibTeX では本文中で引用されていない文献は参考文献一覧に通常出力されませんから,bib ファイルを平時からの文献リストとして使用しても執筆に支障はないと思います。ちなみに「\cite{*}」をファイルのどこかで記述すると,bib ファイルに記入したすべての文献を参考文献リストに出力することができます。でも決してこの機能を使って参考文献一覧を嵩増ししてはいけない。

*14:hyphen は「-」,en dash は「--」,em dash は「---」を打つことで出力できます。

*15:ちなみに「\number\year」で年だけを「\number\month」で月だけを「\number\day」で日だけを取得できます。

*16:補足 標準テンプレートでは jsbook などとは異なり日付を月までしか出力しません。この違いのために標準テンプレートの中で「\today」を再定義しているため,ここが古いままだと令和に対応できないということになります。