LaTeXを使う

December 22, 2018 last updated October 7, 2024latest commit 3f70cc8

はじめに

LaTeXをつかうときには簡単なことを実現するためにも検索に時間を費やしている気がするので、セットアップの方法や自分がよく使う機能をメモとして残します。

TeXの処理系

TeXファイルを実際にPDFファイルに変換する処理を担うTeXの処理系には、いくつかの種類・派生があります。詳しくはこちらの記事がわかりやすいですが、upTeX、LuaTeXなど複数のバージョンがあります。そのなかでPDFへの書き出しができかつ将来性がありそうなLuaTeXを使います。LuaTeXの使用を前提に書きますが、多くの操作は他の種類にも共通します。

セットアップ

LaTeXを使い始めるのに二つのものが必要です。

  • TeXのソースファイル
  • それを処理する任意のTeX処理系

多くのチュートリアルでは、LaTeXの統合環境をインストールすることを勧めています。しかし統合環境を入れることは必須ではなく、自分の好きなエディタと、TeX処理系だけで十分に使えます。

Linux

Linuxでは、各ディストリビューションのパッケージマネージャ(ex. yum, apt)が提供しているLaTeXのパッケージを利用することもできますが、LaTeXの各種設定を変更できるパッケージを管理・利用する都合上、TeX Liveを使うことがおすすめです。TeX Liveを使うことによって、tlmgrでTeXのパッケージを管理することができます。

ここではArch Linuxを例に説明しますが、ほかのディストリビューションでも概ね同じ方法でインストールが可能です。

TeX関連のパッケージをpacmanの管理下から除外する

パッケージマネージャとTeX Liveが干渉してしまうため、TeX関連のパッケージについてはOSのパッケージマネージャに管理されないようにする必要があります。TeX Wikiには、dummyパッケージを導入することによってTeX関連のパッケージがpacmanに管理されないようにする方法が紹介されています。

Linux で TeX Live 公式パッケージをインストールした場合は TeX Live に依存するパッケージによって各種 Linux ディストリビューションが提供している TeX Live がインストールされないように TeX Live の dummy パッケージをインストールします。

dummyパッケージについてはあまりスマートな解決方法ではないため、議論の結果現在はAURから削除されているようです。そこで、pacman --assume-installedを使って解決しました。

texlive-dummyのソースコードを見てみると、

bash
conflicts=('texlive-bin' $(pacman -Sgq texlive-most texlive-lang))
provides=('texlive-bin' $(pacman -Sgq texlive-most texlive-lang))

この部分で調整しているようなので、texlive 関連のパッケージが常にpacmanに無視されるように以下を~/.bashrcに追加しました。

alias pacman="pacman --assume-installed texlive-bin $(\pacman -Sgq texlive-most texlive-lang)"

読み込むために一度ターミナルでsource ~/.bashrcを実行します。

インストーラの実行

インストーラをダウンロードして実行します。

bash
curl -OL http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
tar xvf install-tl-unx.tar.gz
cd install-tl-20*
sudo ./install-tl -no-gui --repository http://ftp.jaist.ac.jp/pub/CTAN/systems/texlive/tlnet/

インストーラにしたがって、オプションを選択します。MacのBasicTeXに準じているsmall schemeを選びました。他のオプションはそのままでインストールします。

インストーラの動作が終了したら以下のコマンドでパスを通し、日本語環境とghostscriptをインストールします。

bash
sudo /usr/local/texlive/????/bin/*/tlmgr path add
sudo tlmgr update --self -all
sudo tlmgr install collection-langjapanese
sudo pacman -S ghostscript

macOS

MacTeXの使う例が多いですが、Linuxと同様にTeX Liveを使ってインストールします。

インストーラの実行

インストーラをダウンロードして実行します。

bash
curl -OL http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
tar xvf install-tl-unx.tar.gz
cd install-tl-20*
sudo ./install-tl -no-gui --repository http://ftp.jaist.ac.jp/pub/CTAN/systems/texlive/tlnet/

インストーラにしたがって、オプションを選択します。MacのBasicTeXに準じているsmall schemeを選びました。他のオプションはそのままでインストールします。

インストーラ画面

インストーラの動作が終了したら以下のコマンドでパスを通し、日本語環境とghostscriptをインストールして完了です。

bash
sudo /usr/local/texlive/????/bin/*/tlmgr path add
sudo tlmgr update --self -all
sudo tlmgr install collection-langjapanese

TeX Live Managerを使う

インストールが完了すると、TeXで使うパッケージの管理ツールtlmgr使えるようになります。これによって、パッケージの追加やアップデートが実行できまうs。

パッケージはソースファイル以下のヘッダーで読み込みますが、パッケージが存在しない場合にはコンパイル時にエラーが発生します。

latex
\usepackage{enumitem}
! LaTeX Error: File `enumitem.sty' not found.

Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: sty)

tlmgr を使うと、以下のようにパッケージを追加できます。

bash
sudo tlmgr install enumitem

基本

まずは、最低限のソースファイルを作ってみます。article.tex に以下の内容を保存します。

latex
\documentclass[12pt,a4j]{ltjsarticle}
% プリアンブル
\usepackage{luatexja}
\begin{document}
はじめてのLaTeX
\end{document}

\begin{document}以前がプリアンブル、\begin{document} \end{document}で囲まれた部分に実際の内容を書きます。保存したディレクトリでlualatex article を実行すると article.pdf をはじめとしたファイルが生成されます。

コマンドの実行

今後はこのファイルに追記します。

タイトル

\begin{document}の直後に

latex
\title{タイトル}
\author{作者}
\date{2018年1月1日}
\maketitle

と入力してします。

\maketitleコマンドを書くことによって実際にタイトルが生成されます。そのため、\maketitleがない場合にはタイトルは表示されません。\date{}コマンドによって日付を記入できます。\date{\today}で今日の日付を自動的に出力することもできます。[1]

\thanks{}コマンドを使うことで、所属などを脚注として追加できます。

見出し

主に使うのは以下のコマンドです。

latex
\section{} % 節
\subsection{} % 項
\subsubsection{} % 目
\paragraph{} % 段落

それぞれの{}の中に見出しの文字列を指定します。

箇条書き

latex
\begin{enumerate} % 順序ありのリスト
\item 項目1
\item 項目2
\end{enumerate}

\begin{itemize} % 順序なしのリスト
\item 項目
\item 項目
\end{itemize}

この出力結果は次のようになります。

箇条書きの出力

箇条書きのスタイルを変更するには、プリアンブルに\usepackage{enumitem}を追加したうえで、オプションを指定します。

latex
\begin{enumerate}[label=\textbf{\arabic*}, leftmargin=*]

機能をためしてみる

このセクションで紹介した機能を一通り使ってファイルを作成してみました。

latex
\documentclass[12pt,a4j]{ltjsarticle}
% プリアンブル
\usepackage{luatexja}
\begin{document}
\title{タイトル}
\author{作者}
\date{2018年1月1日}
\maketitle

はじめてのLaTeX

\section{} % 節
\subsection{} % 項
\subsubsection{} % 目
\paragraph{段落} % 段落

\begin{enumerate} % 順序ありのリスト
\item 項目1
\item 項目2
\end{enumerate}

\begin{itemize} % 順序なしのリスト
\item 項目
\item 項目
\end{itemize}
\end{document}

PDFを生成すると、次のような結果が得られます。

基本的なコマンドを使ったファイル

ページの設定

ヘッダー・ページ番号

ヘッダーの設定を変更するには、プリアンブルで\pagestyleコマンドを、特定のページのみのヘッダー設定を変更するには\thispagestyleコマンドを用います。

共通して利用できるオプションは以下の通りです。

オプション説明
emptyページ番号含めなにも表示しない
plainページ番号のみ表示する
headings既定のヘッダー
myheadings自分でカスタマイズしたヘッダー

例えば全てのページにページ番号のみを表示する場合には、プリアンブルに

latex
\pagestyle{plain}

と記述します。\pagestyle{myheadings}を選んだ場合には、\markright{右ページのヘッダー}\markleft{左ページのヘッダー}コマンドを用いて左右いづれかのヘッダーのみを指定するか、\markboth{左ページのヘッダー}{右ページのヘッダー}コマンドで左右両方のヘッダーを指定します。

ページ余白の設定

四方25mmのマージンに設定するには以下のように記述します。

latex
% 縦
\setlength{\textheight}{\paperheight} % 本文の高さを紙面の高さにする
\setlength{\topmargin}{-0.4truemm}
% もともとLaTeXでは上からのオフセットが1インチに設定されているので、それを25mmにする。
\addtolength{\topmargin}{-\headheight}
\addtolength{\topmargin}{-\headsep} % ヘッダーの分を上のマージンから減らす。
\addtolength{\textheight}{-50truemm} % 本文の高さから50mm引く
% 横
\setlength{\textwidth}{\paperwidth} % 本文の幅を紙面の高さにする
\setlength{\oddsidemargin}{-0.4truemm} % 左からのオフセットを25mmになおす。
\setlength{\evensidemargin}{-0.4truemm} % 左からのオフセットを25mmになおす。
\addtolength{\textwidth}{-50truemm} % 本文の幅から50mm引く

書式のカスタマイズ

見出し

見出しのスタイルを変更したい時には、\renewcommandコマンドを使うことができます。試しに次の行をプリアンブルに追加してみます。

\renewcommand{\thesubsection}{\arabic{subsection}}

これによって通常1.1などと表示されるsubsectionの見出しにsectionの番号(1.1の1.の部分)を表示させないようにすることができます。

\renewcommandに続く最初の{}\theを追加した見出しの種類を記述し、どの見出しのスタイルを変更するかを指定します。続く{}で、実際の書式を設定します。\arabic以外にも、以下の選択肢があります。

コマンド形式
\arabicアラビア数字1, 2, 3, ...
\romanローマ数字ⅰ, ⅱ, ⅲ, ...
\Romanローマ数字Ⅰ, Ⅱ, Ⅲ, ...
\alphアルファベットa, b, c, ...
\AlphアルファベットA, B, C, ...

\arabicなどのコマンドに囲まれた部分にはカウンタを指定します。カウンタとはTeXで見出しの番号が入っている変数のようなものです。見出しのタイプを指定することができます。

見出しをさらにカスタマイズする

見出しの書式をより柔軟に設定するためには、titlesecパッケージを利用します。はじめにパッケージをインストールします。

bash
sudo tlmgr install titlesec

インストールできたら、プリアンブルでカスタマイズする見出しの書式を設定します。

latex
\usepackage{titlesec}
\titleformat{\section}[block]{\normalsize}{\textbf{問題\thesection}}{0.5em}{}

上の例では、sectionの見出しを変更して、問題文の表示に使っています。このパッケージを使って見出しがカスタマイズされた文書を作ってみました。

latex
\documentclass[12pt,a4j]{ltjsarticle}
\usepackage{luatexja}
\usepackage{amsmath,amssymb} % 数式表示のため
\usepackage{titlesec}

\titleformat{\section}[block]{\normalsize}{\textbf{問題\thesection}}{0.5em}{}

\begin{document}

\section{一様分布の平均と分散を求めよ. }

一様分布の確率密度関数\( f(x) \)を次のように定義する.

\[
f(x)= \left\{
    \begin{aligned}
        &\frac{1}{b-a} \: (a \leq x \leq b) \\
        & 0 \: (otherwise)
    \end{aligned}
\right.
\]

% 以下略

\section{}
\end{document}

生成されるファイルは以下のようになります。

見出しのカスタマイズ2

箇条書き

箇条書きのスタイルを変更するには、enumitem パッケージがつかまえす。見出しの行頭文字や、マージンを変更することが可能です。

プリアンブルに以下のコードを追加します。

latex
\usepackage{enumitem}

箇条書きを書いてみました。

latex
\begin{enumerate}[label=\textbf{\alph*}]
\item 項目
\item 項目
\item 項目
\end{enumerate}

出力結果は、次のようになります。

箇条書きのカスタマイズ

おわりに

最後に、大学生のときによく使っていたテンプレートを貼っておきます。

latex
\documentclass[12pt,a4j]{ltjsarticle}
\usepackage{amsmath,amssymb}
\usepackage{luatexja}
\usepackage{enumitem}
\usepackage{titlesec}

\pagestyle{plain}
\setlength{\textheight}{\paperheight}
\setlength{\topmargin}{-0.4truemm}
\addtolength{\topmargin}{-\headheight}
\addtolength{\topmargin}{-\headsep}
\addtolength{\textheight}{-50truemm}
\setlength{\textwidth}{\paperwidth}
\setlength{\oddsidemargin}{-0.4truemm}
\setlength{\evensidemargin}{-0.4truemm}
\addtolength{\textwidth}{-50truemm}

\titleformat{\section}[block]{\normalsize}{\textbf{問題\thesection}}{0.5em}{}

\begin{document}
{\bfseries\noindent\Large レポート課題}

\noindent 学籍番号\\
名前

\section{最初の問題}

最初の問題の回答。

\section{次の問題}

次の問題の回答。

\[
    y = f(x) % 適当な数式
\]

\end{document}

このファイルをコンパイルすると次のようになります。

短いレポート

このメモがなにかの役にたてば幸いです。


参考


  1. \date{}コマンドを省略した場合にも同じように今日の日付が出力されます。 ↩︎