LaTeX

イショティハドゥスにキレられないための LaTeX 論文執筆メソッド

もしかして: アカデミックヤクザにキレられないためのLaTeX論文執筆メソッド

注意: イショティハドゥスとはフィクションであり、今お前がみているそれは幻想だ。

はじめに

研究室に入ってくる新人のみなさんはたいてい LaTeX を触ったことがなくて、若干見劣りするような資料を作ってしまうことが多い。
なので、見てくれのいい資料を作れるようになりましょう、というコンセプトで、常識的なところから細かいところまで書いていく。

こうすると便利だよ〜っていう内容と、こうしないとブチ切れるからなみたいな内容がいりまじっている。

Disclaimer

LaTeX ヤクザではないので細かいことは知りません。
僕がたくさん資料を作ってきた経験から書くので、こっちのほうがいいと思うなどありましたらコメントからどうぞ。

対象読者

  • LaTeX が多少触れるようになった(コンパイルも通せるし、画像も一応貼れるようになった)ひと
  • なんとなく LaTeX を使っているひと

なぜ体裁とソースコードにこだわるのか

伝わるためには美しくなければならない。
細かいことに気になると内容が頭に入ってこない。

とくに工学屋って、発表・発信することが重要だと思うので、読もうかなと思わせるような文章を作れることは大事だと思う。

あとはソースコードを綺麗にしておくと、移植性が高くて後から見たときになにをしているかわかりやすいのでオススメ。
それが工学系でしょ?

他に読むべき参考資料

LaTeX の世界はニューラルネットワークレベルで時代が速く流れるので、昔の資料は参考にならなかったり間違ってたりする。
注意して読むべし。

次に挙げるものはいいと思う。

その他アドバンストな部分も含む資料。

IEEE trans の LaTeX クラスを使うときは下も読もう。

本文のまえに

パッケージの使い方がわからないときは Texdoc を使おう

基本的に最も信頼できるドキュメントは texdoc(そうではない場合もありそうだけど……)。

コンソール上で texdoc パッケージ名 と叩くと PDF のリーダーが直接開いてドキュメントが読める。

ググって出てくる情報を鵜呑みにするのは若干危ない世界なので、なんか変だなと思ったら積極的に使おう。

ビルドの方法

個人的には TeX Live + upLaTeX + dvipdfmx がオススメ。
LuaLaTeX とか XeLaTeX とかもあるけど、upLaTeX のほうが pLaTeX のノウハウが通用しやすいのでググりやすい印象がある。
今も pLaTeX を使っているよっていう人でもわりと移行しやすいと思う(差分はコンパイルするときのエンジン名、ドキュメントクラス、otf パッケージのオプションくらいかな?)。

pLaTeX じゃダメなのかって、ダメです。いろいろと。

LuaLaTeX とか XeLaTeX がバリバリ使える人はそれを使ってください。僕のようなヨワヨワマンからは何も言うことはありません。

ドキュメントクラス

日本語に関しては jsarticle に dvipdfmx オプションと uplatex オプションをつけるのがいいと思う。
僕は下のような感じにしている。

\documentclass[10pt,a4j,fleqn,dvipdfmx,twocolumn,uplatex]{jsarticle}
  • 10pt: 文字サイズ
  • a4j: 紙のサイズ
  • fleqn: ディスプレイ表式が中央揃えじゃなくて左揃えになるやつ
    • 個人の好み。僕は好き。
  • twocolumn: 二段になるやつ

レイアウト

geometry パッケージを使いましょう。
もともと余白がかなりゆるゆるな印象はあるので、僕は下のようにしている。
なんか Word のプリセットに合わせてた気がする。

\usepackage[left=19.05mm, right=19.05mm, top=25.40mm, bottom=25.40mm]{geometry}

欧文フォント(オプショナル)

気にしないのならそのままでいいと思う。
変えたいなら The LaTeX Font Catalogue を見ながら設定するのがオススメ。
僕は下のようにしている。

\usepackage{newtxtext,newtxmath}
\usepackage[scaled]{helvet}
\usepackage[T1]{fontenc}
\renewcommand{\ttdefault}{fvm}

日本語フォント(オプショナル)

otf パッケージは和文と欧文のファミリ問題とかを自然に解決してくれるのでぜひ使いましょう。
uplatex オプションは忘れずに。

フォントを明示的に変えるときは pxchfon を使うのがいいと思う。
プリセットから選べるし、細かくフォントを指定することもできる。
環境の問題があるのでどうしろとは一概に言えないが、フォントを埋め込むことは必ずやったほうがいい

ちなみに僕は下みたいになっている。
任意フォントを埋め込むのはコツがいるので若干アレ。

\usepackage[expert,deluxe,uplatex]{otf}
\usepackage[noalphabet]{pxchfon}
\setmediumminchofont{A-OTF-ReimPr6N-Regular.otf}
\setboldminchofont{A-OTF-ReimPr6N-Bold.otf}
\setmediumgothicfont{A-OTF-ShinGoPr6N-Regular.otf}
\setboldgothicfont{A-OTF-ShinGoPr6N-Bold.otf}

数式など

amsmath と amssymb と bm は読み込んでおく。
この順番で読み込むのがベター。

\usepackage{amsmath,amssymb}
\usepackage{bm}

グラフィック系

graphicx パッケージを読み込むときは dvipdfmx のオプションを絶対に忘れるな。
これを忘れると不幸が訪れると思え。

色は xcolor パッケージが個人的にはいいと思います。
下の例がいつも使ってるやつ(オプション要らないの入ってんな)。

\usepackage[dvipdfmx]{graphicx}
\usepackage[dvipsnames,svgnames,x11names,dvipdfmx,table,xcdraw]{xcolor}

(おまけ)枠

itembox みたいな文章を枠で囲むやつ。
必要に応じてやることはあるけど、個人的には tcolorbox パッケージをオススメする。
ググるとたくさん資料は出てくるので、ぜひ使ってみよう。

見出しのデザイン(オプショナル)

見出しのデザインが気に食わないので変えたい人だけ。
titlesec パッケージを使うと便利。

下のは僕がいつも使っているやつ。
\gtfamily のために otf パッケージが必要。

\usepackage[explicit]{titlesec}
\titleformat{\section}[hang]{\normalfont\large\gtfamily\sffamily}{\thesection.}{1em}{#1}[\titlerule\vspace{.3ex}]
\titleformat{\subsection}[hang]{\normalfont\gtfamily\sffamily}{{\color{Gray}\vrule width 2pt \hspace{.7em}}\thesubsection}{1em}{#1}
\titleformat{\subsubsection}[hang]{\normalfont\gtfamily\sffamily}{\thesubsubsection}{1em}{#1}
\titlespacing{\section}{0pt}{3.5ex}{2ex}
\titlespacing{\subsection}{0pt}{2.8ex}{1.4ex}
\titlespacing{\subsubsection}{0pt}{2.7ex}{1.4ex}

そのほか

  • url
    • PDF にリンクを貼ってくれるので神
  • cite
    • nobreak オプションを付けるのがベター
    • 参考
  • siunitx
    • 5 m とか 37.2 ms みたいな SI 単位の表記には規則があります
    • 参考
  • pxrubrica
    • 解説記事
    • ルビ(ふりがな)を使いたいときに使うパッケージ
    • 機能がかなり多いのと、ルビには結構厳しいきまりごとがあるので、pxrubrica を使うのがよいと思う

オススメのマクロ

登録しておくと便利なマクロ。

演算子

arg max とか arg min とかは 1 つの演算子。
たまに \arg\min_x とかやる人いるんですけどお前それ本気で言ってんの?

tr(トレース)とか Re(実部)とかのマイナーな演算子も登録しておくとラク。

\DeclareMathOperator*{\argmax}{arg~max}
\DeclareMathOperator*{\argmin}{arg~min}
\DeclareMathOperator{\tr}{tr}

既に存在しているものを上書きするときは若干テクニカルなことをする。

\let\Re\relax
\DeclareMathOperator{\Re}{Re}

ちなみに演算子を定義するときは newcommand / renewcommand を使わないほうがいいらしい(コメント参照)。

カッコ(オプショナル)

これは僕以外やってる人を見たことないけど、括弧の \left \right を毎回書くのが面倒なのでつくった。

\newcommand{\paren}[1]{\left(#1\right)}
\newcommand{\sbra}[1]{\left\lbrack#1\right\rbrack}
\newcommand{\abs}[1]{\left|#1\right|}
\newcommand{\norm}[1]{\left\|#1\right\|}

こうすると次みたいに書けるので便利。

% 下の 2 つは一緒
\left(a+\frac{c}{b}\right)
\paren{a+\frac{c}{b}}

あとにも書くが、僕は left right の括弧使わない人嫌いです。宗教。

(おまけ)括弧の周りのアキ

コメントからの素晴らしい指摘。

left right を使うと括弧の両脇にアキが入る。
これがあまり美しくないと思う場合は、mleftright に入っている \mleft \mright を使うといいらしい。

上が left right の例。下が mleft mright の例。

文脈によってもアキを作るか作らないかは変わると思うし好みも含まれるので、「私はこうしたい!」と思うのであれば使い分けてください。
考えたくないならどっちか統一して使えばよいと思います。

relmiddle

確率分布の縦棒を書くときにつかう。参考

\newcommand{\relmiddle}[1]{\mathrel{}\middle#1\mathrel{}}
\newcommand{\agivenbp}[2]{\left(#1\relmiddle|#2\right)}

こうしておくと、縦棒が美しく書ける。

\agivenbp{z_t}{\lambda^{(z)}}
P\left(z_t\mathrel{}\middle|\mathrel{}\lambda^{(z)}\right)

これを何も気にしないで書いちゃう人は下みたいになる。ゴミ。

p(z_t|\lambda^{(z)})
p(z_t|\lambda^{(z)})

太字

otf パッケージを入れると textbf で明朝体/セリフの状態で太字になってしまう。
ときどきゴシック体/サンセリフにしたいときがあるので、ぱぱっとできるよう次のように定義しておくと便利。

\newcommand{\enhance}[1]{{\gtfamily\sffamily#1}}

こうすると enhance コマンドでゴシック体の太字が使える。

本文の前にやりがちなやってはいけないこと

行間をいじるな

マジで。ほんと。読みにくいから。最終の最終の最終手段なので。

ちなみにほんとにいじりたいときは setspace パッケージを使うと部分的に行間が狭くできるので便利。
参考文献だけ狭くしたいみたいなニーズに応えられる。

軽い気持ちでコマンドを上書きするな

section とかを再定義する人結構見るけど、それはどうかと思う。
特にコピペしてやるというのは非常によろしくないと思う。
わかっててやる分にはとてもいいと思うけど、わからずにドキュメントクラスで定義されているようなコマンドを再定義するのは移植性が低くてよろしくない。

LaTeX のプロが作ってくれたありがたいパッケージを極力使うのが僕はいいと思う。
車輪の再発明はダメ。

jarticle を使うな

サイズ感が結構違っていて、jsarticle より読みにくいので、相当厳しい事情がない限りは使わないほうがベターだと思う。

他にもアレな部分があるので jarticle はダメ。

用紙のサイズや余白を直接いじるな

geometry パッケージを使え。死ぬぞ。

def は気をつけて使う

newcommand / renewcommand を使えという意見はあるけど、面倒なので使ってもいいと思う。
自己責任で。

本文

基本的な話

改段落のために改行コマンドを使うな

そもそも LaTeX に限った話ではない。

変なスペースを入れない

インライン数式のまわりとかに空白をいれない。自動で入るので。
(この Qiita は空白を入れています。)

ちなみに英文を書くときのピリオドの後ろは空白 1 つです。

ダブルクオーテーション

``'' を使おう。

インライン数式にするのを忘れない

$k$-means とか $N$-gram とか、そういう細かいところにね、人間性って出るんですよ。
「$N$ 個の中から $k$ 個を選び〜」みたいなときもちゃんとインライン数式にしようね。

全角半角問題

数字や欧文は半角を使え

全角数字と全角アルファベットは滅びろ。

ピリカン(ピリオド・カンマ)を句読点の代わりに使う場合は全角にしろ

日本語文章では句読点は絶対全角にするべき(仮想ボディの問題)。

ただし次の条件ではピリオド・カンマは半角にする。

  • $1, 2, \ldots, N$ などの数式中において列挙する場合
  • 略称の説明をするとき元の名称にカンマが含まれる場合(United Nations Educational, Scientific and Cultural Organization; UNESCO)
  • 参考文献を表記するときに文献が日本語でない場合
  • その他英文中の場合など

微妙なのが「$\gamma, \zeta$ の 2 変数に対して」みたいなときで、これは「$\gamma$,$\zeta$ の 2 変数に対して」みたいな書き方でもいいと思う。

正しい句読点

日本の国語教育において、横書きの印刷された文章では「カンマと句点」が本来は正しいとされている。
ただ一般的にこの組み合わせを見るとびっくりしちゃうので、統一できていればなんでもよいです。

括弧は全角を使え

日本語の文章の場合、括弧はすべて全角にする。
例外は数式中の括弧のみ。
ただし次のような場合は括弧が全角になるべきだと思う(数式ではなくて補足的な意味の括弧なので)。

基底 $a_n$($n = 1,2,\ldots,N$)を用意する。

そのほか

脚注

これは非常に宗教感の問題だけど、個人的には脚注はあまり使わないべきだと思っている。
本題に関係のないようなどうでもいい情報で、かつ載せたいなぁと思うようなものは脚注でもいいんじゃないかな。
とくに内部資料とかで外部発表するものでなければいろいろ脚注に書くのもよろしいと思う。
論文とかに書くのはあまり好きではない。

使ったデータセットやツールキットの URL とかも脚注にする派と参考文献に入れる派がいるけど、まあ僕はどちらでもよいとは思う。ちなみに私は脚注派。

脚注のデザイン(オプショナル)

個人的には初期のデザインあんまり好きじゃないんですけどどうですか。

もちろんそのままで全然かまわないのだが、僕は下のようにして少しだけ薄くしている。
tikz パッケージが必要。

\let\oldthefootnote\thefootnote
\def\thefootnote{{\color{Gray}\oldthefootnote}}
\renewcommand{\footnoterule}{\noindent\tikz\draw[dotted,gray] (0,0)--(5,0);\vspace{5pt}}

行からはみ出したり行が短すぎたりするときの対処

長いインライン数式が入って文字間隔が変になっちゃったり、ディスプレイ表式が長すぎて横幅をぶち抜いちゃったり、長い URL を書いて変なところで改行されちゃったりするときなど。

基本的には仕方のないことなので諦めるのが先決だが、個人的にはなるべく解消する努力はしようねというお気持ち。
どうしようもないところがあるので努力目標だけど。

略称の書き方

英語だと次のとおり。日本語論文でも流儀は同じ。

  • Uniform Resource Locator(URL) ← OK
  • URL(Uniform Resource Locator) ← よく見るけどダメ

日本語だと次のとおり。

  • 三井住友銀行(SMBC: Sumitomo Mitsui Banking Corporation) ← 見るけど微妙
  • 三井住友銀行(SMBC; Sumitomo Mitsui Banking Corporation) ← 見たことないけど NG
  • 三井住友銀行(SMBC, Sumitomo Mitsui Banking Corporation) ← 稀に見るけど微妙
  • 三井住友銀行(Sumitomo Mitsui Banking Corporation: SMBC) ← これはダメ
  • 三井住友銀行(Sumitomo Mitsui Banking Corporation; SMBC) ← これにしましょう
  • 三井住友銀行(Sumitomo Mitsui Banking Corporation, SMBC) ← 稀に見る

コロンには後ろを説明する要素があるので、4 番目の例は明らかにダメ。教科書でも見るけどたぶんダメ。
僕は 1 番目派だったのですが、いろいろ考えると 5 番目が最もよいのではということになった。

数式

行列は pmatrix とか bmatrix を使おう

こっちのほうが書きやすいよ♡

場合分けは cases を使おう

こっちのほうが書きやすいよ♡

若干行間が狭いと思ったら、改行時の行送りを調整するしかない(\\[5pt] みたいな)。

括弧は原則 left right で使う

中にアルファベット 1 文字が単体で入るパターンとか、括弧の中で改行しなきゃいけなくなったパターン以外では、原則として left right で使おう。
そのほうがきれい。$(\frac{a}{\frac{c}{b}})$ とか嫌でしょ。

いちいち left right を書くのが面倒なので、先に述べた paren コマンドとかを使うとラク。

行列やベクトルには mathbf ではなく bm を使おう

個人的な見解です。

行列・テンソルは大文字、ベクトルは小文字というのがだいたいの雰囲気な気がする。
個人的には全部ボールドイタリックであってほしいなぁと思うので、どれについても bm を使うのが好き。

これは宗教というよりも分野の流儀なので、それに従ってください。
高校の数学の資料を作るときに太字にすることはないでしょう。

あと、なんにせよ統一はしましょう。
こっちは太字でベクトルなのに、あっちは普通のイタリックでベクトルみたいなのは混乱を招く。

数式はちゃんとチェックしよう

その数式、あってますか。変な変数、残ってないですか。
シグマ、忘れてないですか。分母と分子で変数の意味、変わってないですか。

figure 環境

基本的にはこれを見れば十分。

図のキャプションには文章を書こう

上のリンクにも説明されているとおり。
なるべく図単体でなんの図かわかるようにするとよい。

位置に h を指定するな/原則位置指定オプションを使うな

文系の論文だと h にすることも多いが、基本的に理系の文章は上に図がまとまっていたほうがわかりやすい。
図があっちゃこっちゃいくと読みにくいんじゃ。

空気が許せば下に図をまとめてもよろしい(個人的にはこっちのほうが好き)。
そのときはプリアンブルに以下のような感じで書いておくと下に寄せられる。

\setcounter{topnumber}{0}
\setcounter{bottomnumber}{4}
\setcounter{totalnumber}{4}
\renewcommand{\topfraction}{0}
\renewcommand{\bottomfraction}{1}
\renewcommand{\textfraction}{0}
\renewcommand{\floatpagefraction}{1}

図の位置は分野の流儀があるところもあると思うので、あれば従ってください。
あとは上にでっかい見出しがあるようなページに関しては、上に図を持っていくのは変なので下に行くべきでしょう。

図はちゃんと処理しろ

とくにスキャンした図を載せるときは、背景がちゃんと白になるように、文字がちゃんと濃くなるように、GIMP でもなんでもいいからグレースケールにしたあとトーンカーブで調整して貼ろう。
トーンカーブは使えるようになってください。マジほんと。

実際には自分で同じ書くほうがベター。無駄に時間使うからアレだけど。

center 環境を使わない

\centering コマンドを使おう。table 環境でも同じ。
ただし通常の文章中で中央揃えをするときは center 環境を使おう(そんなときあるか?)。

図のフォーマット

pdf、jpg、png あたりがいいと思う。
eps 派はさすがに滅ぼしたはずだが……

図の大きさの指定

個人的には幅基準で書くのがいいのかなと思っている。
長さの単位は \linewidth を使うと便利かなと思う。

図の引用を書け

マジで!!!! 図を引用したら!!!! 図の引用元を書け!!!!! \cite しろ!!!!
そこの輪講資料作ってるおまえ!!! お前だよおまえ!!!!

たとえ本文中で引用していても、キャプションでもう 1 回引用するべき。
なお、勉強会など「この文献についてまとめました」みたいな形式であれば、引用元はほぼ自明なのでなくてもいいと思う。

いらすとやを使うときには十分に吟味しろ

いらすとやを使うなら、全体的にいらすとやテイストで揃えるのがいいと思う。
っていうかきみは本当に IEEE trans にいらすとやの画像を載せるのか?

table 環境

まず表は table 環境の中に書こう。文章中に書くな。

基本的にはこれを見れば十分(またか)。

キャプションは上

図は下、表は上。なぜか。JIS 規格で決まっている。

表の引用を書け

マジで!!!! 表を引用したら!!!! 表の引用元を書け!!!!! \cite しろ!!!!
その結果は!!!! その資料は!!! お前が作ったんか????!!!!

参考文献と引用

基本的にはこれを見れば十分(しつこい)。

bibtex を使うのが面倒なときもあるので必ず使えとは言わない。
自分で全部書くときは、ちゃんと一貫したフォーマットで書こう。
ただしそのときは絶対に thebibliography 環境を使え。\section{参考文献} とかやめろ。
参考文献リストのスタイルにもちゃんと原則があるのだ。

arXiv の引用

私は未だにこれについての答えを持っていないので、誰かおすすめの方法を教えてください。

付録

ページ数稼ぎの付録はダメだよ。

その他

大学・所属機関のロゴを安易に使うな

これは資料だけでなくスライドとかポスターとかでもそうです。

大学などの機関のロゴは使用規約がある。
少なくとも東大はかなり厳しい(適当な理由では許可がおりない)ので、許可をとった場合以外にはロゴを使うな
学位論文に関しても同様

変な使い方をしなければ怒られることはないとは思うけど、品性とか常識とかをわりと疑う。
スペースが余ったからってググってとってきた画像を貼っちゃうんでしょ。やばいよ。

おわりに

ソースも pdf も美しい素敵な資料を作ろうな。