$\LaTeX mas\ Eve ~聖なる夜に君は美文書に浸る~ 基本編【アドカレ2020\ 24日目】$

大学生活 アドカレ2020

はじめに

こんにちは。情報工学科3年、AL18036の片岡凪です。デジクリでは、15期部長をやっていたり色んな創作を広く浅くやったりしています。

この記事は、デジクリ アドベントカレンダー 2020 24日目の記事です。先日は(ここに本来なら記事紹介文が入る)。6日目にも記事を書いているのでよかったら読んでね。
→『大学生活、買ってよかったものランキング~~!!!!(ドンドンパフパフ!!!!!!【アドカレ2020 6日目】

さて、皆さんは大学などのレポートを作成するとき、どんなツールを使っていますか。MS Office Wordですか? それともWPS Office Word? なんと愚かな(失礼)、LaTeXを授けよう。

今日の記事では、Cloud LaTeX(ラテフと読みます(諸説あり))というツールを取り上げ、美しい文書を作成するTipsを皆さんに共有しようと思います。少しだけプログラミングのような要素がありますが、プログラミングをしたことがない方でも(頑張れば)わかるように書いたので、安心して読み進めてください。

この記事では、以下の3枚の文書を作ること達成目標とします。ただし、長くなってしまうので、3ページ目の応用編はまた別の機会にご紹介しようと思います。
Imgur Imgur Imgur

なお、今回用いたソースコードと出力したPDFは、私のGithubに公開しています。これらを参照しながら読み進めていくと良いかもしれません。Githubの見方がわからない方はこちらを参照してください。

共有したリンク先のファイルのうち、tex-tutorial.tex,tex-tutorial.pdfというファイルが今回用いたものです。この他、私が練習用に記述したコードや、私が普段使っているテンプレートも同リンク先に置いてありますので、興味があれば是非見てみてください。Githubのファイルは、これからも更新していく予定です。

目次

  1. LaTeXとは
    1.1 文書を作成するプログラミング言語
    1.2 LaTeXのメリット
    1.3 LaTeXのツール
  2. Cloud LaTeXの導入
    2.1 アカウント作成
    2.2 プロジェクト作成
    2.3 あとは書くだけ
    2.4 その他便利機能
  3. LaTeXの基本
    3.1 機能の呼び出し方
    3.2 ソースファイルの大まかな構造
    3.3 改行の仕方
    3.4 数式の出力
    3.5 特殊文字の出力
  1. おわりに

1 LaTeXとは

1.1 文書を作成するプログラミング言語

プログラミングと聞いてウッとなる方もいるかもしれません。しかし、LaTeXはよく書かれるプログラミング言語とは毛色が違っていて、文書に反映させたい順番に上から欲しい機能を記述していくだけで簡単に書けてしまいます(情報系の人間に向けて言うと、チューリング完全な関数型プログラミング言語なんだそうです(ソース薄いです))。臆することなく挑んでみましょう。

ただし、やはりプログラミング言語なので、正しく記述できないとエラーを吐き、一時的に何も出力できなくなります。そんなときは、エラー文やコードをよく見て何が間違っているのか確認してみましょう。このトライ&エラーは、プログラミングならではの面白さですね。私はLaTeXを書きたいために、やりたくないレポートもやる気が出やすくなったりします笑 もし考えてもエラーの原因がわからなければ、私なり、LaTeXのわかる友人なりに相談してみましょう。

ちなみに、上で紹介した文書の2ページ目のソースコードは、次のように記述されています。
Imgur

1.2 LaTeXのメリット

LaTeXには、以下のようなメリットがあると考えています。
- 記事や論文で広く使われるような、標準化された美文書が書ける
- 決まったコードを書けば、細かい調節なしに美文書が出来上がる
- やろうと思えばかなり細かい調節が可能(ググれば大抵出てくる)
- 式番号や引用番号などが、違うページでも自動で対応付けされ、再編集してもズレない
- マウスをほとんど使わないため、高速に記述できる(ボタンUIの操作が少ない)
- 美しく、自由度の高い数式が素早く書ける
- 文書のテンプレートや数式のコピーが容易
- 数式のコードがMicrosoft Wordでも使用できる
- 美文書が書けるから異性にモテる(なんでクリスマスにこんな記事書いてるんだろ......)

LaTeXの便利さ・美しさに慣れてしまうと、docx形式でレポート提出を求められた際に、しかめっ面をしてしまいます。美しく書けるので、レポート採点も気持ち甘くなったりしているような、していないような?

1.3 LaTeXのツール

プログラミング言語であるLaTeXは、主に .texという拡張子のファイルに記述されます。そして、このファイルの記述や文書の書き出しを担うツールがいくつか存在します。この記事では、おそらく最も導入が簡単なCloud LaTeXというツールについてご紹介します。

Cloud LaTeXはブラウザ上で動作するWebサービスで、面倒な初期設定がいらず、直感的なUIで操作が可能です。プログラミングをしない方でも、ものの数分あれば文書を書き始めることができるでしょう。似たWebサービスにOverleafというものがありますが、多少機能がややこしいです。下の記事に2サービスの違いがよくまとまっているので、ご自身でお好きなものを選んでください。使い方は大方変わらないかと思います。
「cloudlatexとoverleafの比較」(2017年の記事なので少し情報が古いかも)

昨日、なんとタイムリーなことか、みんな大好きVSCodeというコードエディタとCloud LaTeXを連携できる拡張機能が発表されたりしています。VSCodeを使っている方は必見ですね。



LaTeXは、うまく弄るとWebサイト上でも記述できたり、Beamerというクラス(≒機能)を用いて美しいプレゼン資料が作成できたりもします。Mathpix Snipというツールを使えば、手書きや教科書の写真、記事のスクショなどから数式を読み込み、LaTeX形式に変換させることもできます。

この他、TeX Live や TeX Works などを用いて自分のローカル端末で自由度高く編集する方法もありますが、設定がややこしいのでここでは割愛します。LaTeXとひと口に言っても、pLaTeX やら upLaTeXやら色々ありますので、気になる方は調べてみてください。

2 Cloud LaTeXの導入

2.1 アカウント作成

Cloud LaTeXのトップページにアクセスし、中央の 「新規登録」 ボタンからアカウントを作成してください。ベリーイージーです。

2.2 プロジェクト作成

アカウントが作成できたら、ログインページからログインし、以下の画像のようなマイページに遷移できることを確認してください。サイト左下のプラス印、「新規プロジェクト」 からプロジェクトを作成しましょう。テンプレートの使用有無、プロジェクト名、説明欄は適当なものでよいです。

ちなみに、既に自分なりのテンプレートプロジェクトが存在している場合、そのプロジェクトの右側の三点ボタンからプロジェクトの複製も可能です。下の画像でいう一番右下のボタンです。
Imgur

2.3 あとは書くだけ

1.1でお見せした画像を再度引っ張ってきました。左の大きい窓に画像を追加していき、中央の窓にLaTeXのコードを記述していき、書いたコードが右の窓にプレビューとして表示されていきます。コードの記述が間違っている場合、右の窓に大きくエラー文が表示されます。落ち着いてコードの何行目でエラーが発生しているかを確認し、修正しましょう。プレビューの文書は、右上の 「↓PDF」というボタンからダウンロードすることができます。
Imgur

左の窓にはデフォルトでmain.texというファイルが置かれていると思います。最初にプロジェクトを開いたときは、このファイルをクリックしないと中央と右の窓に何も表示されないことがあります。ご注意ください。

とりあえず中央の窓に以下の最低限のコードを打ち込み、その内容が反映されることを確認してみるといいでしょう。

 \documentclass{jsarticle}
 \begin{document}
 こんにちは、世界!
 \end{document}

2.4 その他便利機能

直近の上の画像で、右上の横三本線のボタンから、プロジェクトの設定を行うことができます。コンパイルというプレビューを表示する際の書き出しを自動で行うかを設定したり、Dropboxと連携して自動でバックアップを取るかを設定したりすることができます。Dropbox連携をすると同期エラーが起こることがあるので、文書を一通り書き上げた後にONにするとよいでしょう。

3 LaTeXの基本

3.1 機能の呼び出し方

それでは実際に、LaTeXのコードを書いていきましょう。LaTeXの便利機能を呼び出す際は、基本的に機能名の前に\を記述します。 PC環境によっては半角ので表示されることもありますね。例えば、文章を書いている途中で\newpageと記述すると、それより下の記述は新しいページから始まるようになります。目次の直下から文章が始まらないようにしたいときや、節or小節タイトルがページ下部に微妙に残ってしまうのを防ぎたいときなどに使用します。

大抵のワープロソフトだと、エンターを押しまくって微調整することになるでしょうが、上側を少し編集しただけで必要な改行数がズレてしまい、その都度の再調整が面倒ですね。
Imgur

実際には、
- \機能名1{機能名1.1}
- \機能名2{機能名2.1}{機能名2.1.1}
- \機能名3[機能名3.1]{機能名3.1.1}

のように、{}[]を用いてより細かい機能を指定することが多いです。括弧内の機能名は、,を用いて複数設定することもあります。例えば、コードの1行目に\documentclass[12pt, b5paper]{jarticle}と記述すると、12ポイントの文字で、B5の日本論文形式の文書を出力してくれるようになります。

また、機能によっては、この{}の中に\機能名4を適用したい文章がくることもあります。 例えば、直近の上の画像では、\thanks{芝浦工業大学 工学部 情報工学科 3年}と記述することによって下に著者の情報を載せています。

おそらく最もよく使う機能として、\begin{機能名5} 文章など \end{機能名5} というものも存在します。先ほど打ち込んだ

 \begin{document}
 こんにちは、世界!
 \end{document}

は、文章を出力するための機能で、beginからendまでの範囲が最も広くなることが多いです。

このbegin~endの中に更にbegin~endなどを追加して、

 \documentclass{jsarticle}
 \begin{document}
   こんにちは、世界!

   君の世界の物体の運動は、次式
   \begin{equation}
     \vec{F} = m \frac{d^2 \vec{x}}{d t^2}
   \end{equation}
   だけで成り立っているのかい?
 \end{document}

と記述すれば、
Imgur
と表示されます。行ごとの文字の開始位置が異なっているのは、コードを見やすくするための空白が挿入されているだけで、文書の出力に違いは出ません。このように、機能の範囲の中にまた別の機能が入ることもあり、この状態を「入れ子になっている」と表現したりします。

稀に\verb|文章|のように{}[]以外で範囲を指定することもありますが、大方、以上の機能呼び出しを覚えておけば困ることはないかと思います。

3.2 ソースファイルの大まかな構造

はじめに共有した3枚の文書を作成するコードが、大まかにどんな構造になっているかをご紹介します。この節は特に、先に述べたGithubのtex-tutorial.texを参照していただきながら読んでいただきたいパートになります。

まず、一番大きな2つの構造「初期設定」と「本文」 があります。先のコードで扱った、

 \begin{document}

 \end{document}

の上か中かの違いになります。3枚の文書を出力する実際のコードでは、

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 1 初期設定
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

の下か

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 2 本文
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

の下かで区別されます。ごちゃごちゃ記述していますが、結局はこの2つの構造から成り立っているということを忘れないでください。

次に、それぞれの構造を細分化していきます。まずは初期設定から。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 1.1 文書の設定
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

よりも下に記述されている \documentclas[機能名]{機能名} では、文字サイズや紙サイズといった文書全体の形式の設定を行います。前にやりましたね。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 1.2 LaTeXの追加機能の設定
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

よりも下に記述されている \usepackage{機能名A1} では、自分や他人が作った機能A1を有効化することができます。つまり、{機能名A1}に応じた機能\機能名A2が使えるようになったりします。本来であれば、他人が作った機能A1に関する.styファイルを用意した上で\usepackage{機能名A1}を記述する必要がありますが、代表的な機能であれば.styファイルは不要です(Cloud LaTeX以外でどうであるかはわかりません)

欲しい機能をググったときに 「〇〇環境」と呼ばれていたら、\usepackage{〇〇} と記述しておけば大抵使えるようになります。逆に新しく調べた機能を記述してエラーが発生したら、「〇〇環境」という言葉が記事に書いていないか探してみましょう。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 1.3 自作の設定
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

より下では、.styファイルよりも簡易的な、即席の設定を記述します。\lstset{機能名}\def\機能名 といった書き方をします。他人が作った自作関数がこの形式であった場合、この位置にコピペするとよいでしょう。 ( \defはあまり推奨されていないようです 参考:「LaTeX文書作成時に注意すべきこと」)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 1.4 タイトルの設定
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

より下では、目次より上側に位置するタイトルの設定を行います。出力はまだ行いません。\title{タイトル名}や、\auther{著者名}\date{著者名}などを記述します。\date{(何も書かない)}とだけ書けば日付は出力されず、この文自体を消すと自動でその日の日付が出力されます。\title{}内に \vspace{〇〇cm}と記述すると、タイトルの上下の位置を調節することができます

次に、本文について細分化していきましょう。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 2.1 本文の開始地点を設定
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

の下では、何度かご説明した \begin{document} を記述します。\end{document}はここからずっと下の、最後の最後に記述します。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 2.2 タイトルを出力
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

の下では、\maketitle とだけ記述しています。上で設定したタイトルが実際に出力されます。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 2.3 目次の出力
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

の下では、

\setcounter{tocdepth}{2}
\tableofcontents
\newpage

と記述しています。1行目で深さ2の小節タイトル(1.1,1.2 など)が表示されるようにし、2行目で実際に出力し、3行目で新しいページに移るようにしています。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 2.4 概要
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

より下では、

\begin{abstract}
文章
\end{abstract}

と記述しています。これにより、論文でよく見るあの概要が出力されます。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 2.5 章ごとの中身を記述
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

より下では、

\section{LaTeXの基本}
文章
\subsection{機能の呼び出し方}
文章
\subsection{ソースファイルの大まかな構造}
文章
(以下略)

と記述しています。これにより、番号がふられた節タイトルや小節タイトルが表示され、これらが自動で目次に反映されます。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 2.6 参考文献
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

より下では、

\begin{thebibliography}{99}
\bibitem{文献ラベル名}
文献の詳細
\bibitem{文献ラベル名}
文献の詳細

と記述しています。99は文献数の最大値を表しており、特に理由がなければこれにしておけばよいです。「文献ラベル名」は応用編で紹介する、引用を示す際に使用するユニークな名前を記述します。「文献の詳細」は、実際に出力される文字列に対応します。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 2.7 参考文献,2コラム構成,本文の終了地点を設定
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

の下では、上で\begin{機能名}だけをしていた様々な\end{機能名} を記述します。以上でソースファイルの構造の説明はおしまいです。お疲れさまでした。

3.3 改行の仕方

LaTeXでは、普通に改行しても改行されません。空行(2回改行してできる行)や\\を入力することによって改行することができます

ソースコードを美しく、わかりやすく保持するためには、この改行方式はとても重宝します。例えば、先の運動方程式は

\begin{equation}
  \vec{F} = m \frac{d^2 \vec{x}}{d t^2}
\end{equation}

ではなく、

\begin{equation}
  \vec{F}
  =
  m \frac{d^2 \vec{x}}{d t^2}
\end{equation}

と書くことができます。式が複雑になっていくほど、この改行方式はありがたみを増します。

空行は何個連続しても1回しか改行されないので、コードの整理に役立ちます。何度も改行したい場合は、連続して\\を入力しましょう。

半角の空白文字もこれと似ていて、何度空白を入れても1つしか反映されなかったりします。~\(空白)を連続して打てば、何度も空白を入力できます。

改行したあとの最初の行は、自動的に全角空白が入力されます。 これが嫌なときは \noindent と入力すると全角空白が入力されずに済みます。

稀に、ある機能の直後にそのまま\\と記述すると、エラーを吐いてしまうことがあります。そのときは、{}\\などと書くとよいです。この{}は何もしない機能の何もない範囲指定を表し、直前の機能と\\との関係を断ち切ってくれます。

3.4 数式の出力

LaTeXの数式に関する機能は、あるいくつかの記号で囲った場合でしか使用できません。 この囲われた範囲がプログラムに読まれている状態を、数式モードと呼びます。

文章の途中で数式を使いたい場合、文章 $数式$ 文章文章 \(数式\) 文章 とする方法があります。

一方、行いっぱいに数式を表示したい場合、

文章
$$
  数式
$$
文章

文章
\[
  数式
\]
文章

とする方法があります。数式モードの始点と終点がわかりやすいので、どちらも後者で書いた方が良い、という流派が存在したりします。

また、複数行に渡って行いっぱいに数式を表示したい場合、方法は沢山あるのですが、align(整理する の意)を使用して、

別行立てで
\begin{align}
  e^{i \theta}
  &= \cdots
  &
  \notag
  \\
  &= 
  cos{\theta} + i sin{\theta}
  &
  (答)
  \label{euler}
\end{align}

と記述するのがオススメです。次のように表示されます。
Imgur

alignでは、各数式を行列の要素ように配置することができ&で行数の境目が、\\で列数の境目が仕切られます。説明のために、次のようにコードを整形するとわかりやすいかもしれません。

  e^{i\theta} & =\cdots                   & (何もない)
  \notag \\
  (何もない)    & =cos{\theta}+isin{\theta} & (答)
  \label{euler}

また、式右側に位置する(1)のように、式番号が自動的に付与されます。 式番号を付与したくないときは、その行の最後に\notagと記述します。全ての式番号を消したい場合は、align*とすればよいです。式番号が付く行には\label{式ラベル名}を記述しておくと、応用編で紹介する引用を行う際に便利です。

alignamsmath環境に用意されているので、コードの上の方に\usepackage{amsmath}を記述しておきましょう。

3.5 特殊文字の出力

&%といった記号を文書に出力したい場合、そのまま書くとエラーを吐いてしまうケースが多いです。このエラーは、こういった記号を記述したときに、LaTeXソフトが「おっ なんか機能が来るんか?」と勘違いしてしまうために起こります。数式モードの外であれば、\&\% とすると、文書に「&」「%」が出力されます。数式モードの中の場合は、amsmath環境の\text{文章}を使い、一旦数式モードを外してから\&\%と書くとよいでしょう。

ギリシャ文字や特殊な数学記号は、数式モードのみで発動する固有の\機能名を持っていたりします。 上の直近の画像の式では、θを\thetaと書いたりしています。直感で書いてうまくいくことも割とありますし、わからなければすぐググりましょう。すぐヒットするかと思います。 参考:「LaTeXの特殊文字・特別記号

4 おわりに

お疲れさまでした。ここまでの基本構文を押さえておけば、あとは「tex 欲しい機能の挙動名」でググれば大抵何でもできるかと思います。 結構長くなっちゃいましたね。

これらの機能は書かないと覚えられないですし、覚えたらかなり楽になります。沢山書きましょう。 個人差があるかと思いますが、私の場合、どんどん覚えて手が速くなっていくのが楽しくてたまりません。覚える必要もなく毎回書くような機能や構造は、テンプレートとして残しておけばよいです。

LaTeXには、基本編、応用編に書ききれなかった便利機能や、私も知らない機能がまだまだ沢山存在します。この記事にない書き方や便利機能をご存知でしたら、是非Slack等で議論しましょう! 

また、かなり駆け足な紹介になってしまったため、わかりにくかった箇所も沢山あるかと思います。気軽に質問してくださいね。

次回の応用編もお楽しみに!

参考文献

奥村晴彦, 黒木裕介『LATEX2ε美文書作成入門』(技術評論社, 2017)など

執筆者連絡先

al18036[at]shibaura-it.ac.jp