TeXの環境構築から快適な作業環境まで

# はじめに
本記事は一大学生が同級生などにTeXを布教するために書いているものなので厳密には違う事が書かれていたり，情報が足りていない可能性があります．もしそういう所があれば教えていただけると幸いです．

また，記述不足の部分はぼちぼち埋めていくつもりです．

同じようなブログを大学のサークルでも書いたので，近々似たブログがネットの海に上がるかも知れません．
# 目次
- [TeXとは](#texとは)
- [TeXを使う利点](#texを使う利点)
- [導入方法](#導入方法)
- [よく使う関数](#よく使う関数)
- [ユーザスペニット](#ユーザスペニット)
- [Styleファイルについて](#Styleファイルについて)
- [まとめ](#まとめ)

# TeXとは
#### Texは理系の大学生にとって必須と言っても差し支えないレベルで有用なものです．
とはいえ，コードを書かなくちゃいけない？レポートならWordでいいじゃん？
など，導入時や使用する際にハードルが高いなどの理由でやるのを遠ざけている人も多いと思います．

なので，TeXを使う理由，導入方法から書き方，おすすめのパッケージなどを紹介していきたいと思います．

# TeXを使う利点
#### 数式がきれいに書ける
数式がきれいに書けます．括弧の大きさを数式の大きさに揃えてくれたり，αやβなどの特殊な記号やベンゼン環とかもかけます．ベンゼン環が書けるのは正直びっくりしました．

#### 参考文献や図表，セクションの参照番号の一括変更が可能  
世の中には，セクションの位置を間違えてしまうことや表の順番を変えたいことがありますよね？
もしかすると同じ参照番号があったり，順番が逆転したままレポートを出してしまうこともあるかもしれません．
しかし，TeXならそんな事はありません．順番を変えてもよしなに参照番号を変えてくれます．

#### 形式の一括変更が可能
スタイルファイルを変えることで，文字の大きさからn段組みへの変更まで比較的手軽に変えることが可能です．

#### TeXを知らない人から見るとかっこよく見える
~~筆者が大学に入ってからレポートをTeXで書いてるというとほとんどの人がすごいと言ってくれます．~~

###### 他にもTeXを使っていく中でいろいろなことができるのでぜひ使ってみてください．

# 導入方法
TeXを用いてレポートを書く際，大きく分けて3つのやり方に分けることができます．
- Windows版
- Mac版
- Cloud LaTeX

Cloud LaTeXは，アカリクという企業が運営しているLaTeXのオンラインコンパイルサービスである．
後述するWindows版やMac版とは違い，ローカルに環境構築をしなくともLaTeXの環境が使える．~~らしい．~~
~~筆者はCloud LaTeXを使用したことがないので適当に調べてください．~~
あと出先でもできるって点だとUSBメモリに環境を建てることもできます([参考](https://www.nagaoka-ct.ac.jp/ec/labo/visu/usb/))．

とはいっても，多くの人はWindowsやMacでローカルにTeXの環境を建てると思います．
TeXはWindowsとMacによって導入方法が異なります．
筆者は両方で環境構築をしたことがあるので両方解説をします．

## Windows版の導入方法
筆者が参考にしたのは[この記事](https://qiita.com/passive-radio/items/623c9a35e86b6666b89e)です．

TeXを使いたい際は[公式サイト](https://www.tug.org/texlive/acquire-netinstall.html)の`install-tl-windows.exe`からインストーラーをダウンロードします．
ダウンロードが終わったら実行してインストーラーを動かします．

基本的には誘導に従うか前述の記事を見ればできるようになっていると思いますが，このTeX Liveをインストールするのに鬼のように時間がかかります．筆者が初めてTeXの環境を作ろうとした時，~~ソフトバンクエアーなどという~~実家の遅い回線だったので約1日かかりました．どうあがいてもアホですアホ．
これだけならいいんですけど，なんとたまに失敗することもあり，その場合せっかく時間をかけて入れたデータをすべて消して最初からやり直しになります．

本当に回線のいいところなら1~2時間程度で終わった記憶があるのでがんばりましょうという他ありません．

## Mac版の導入方法
Windowsはインストーラーを使わざるをえませんでしたが，MacOSではhomebrewを使ってmacTeXをインストールする方法が推奨されています．
筆者が参考にしたのは確か[この記事](https://qiita.com/DaikiSuyama/items/d463c5b7afdabc5fcde5#vscode%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)だったと思います．

色々エラー吐いたりしてグダっていっぱい調べた気もしますが，その辺はエラー文を読むかそういうのが得意そうな人に助けてもらいましょう．

# よく使う関数
ここから先はVScodeでTeXのコンパイルができた前提で話を進めます．
ここでは筆者がレポートを書く際によく使う関数とその使い方を紹介していきます．
ここにないものでもTeXでは大体対応が可能なので，やりたいなと思ったことはググったりするとだいたい出てきます．直近だと量子回路図が書けるらしいと言うのを見つけました．
### 節，小節
1 背景・目的 とか，6.2 考察 とかのことです．
セクションは深さ別に三段階あり，基本的にはサブセクションまでしか使いません．
```tex:セクション名
\section{セクションタイトル}
\subsection{サブセクションタイトル}
\subsubsection{サブサブセクションタイトル}
```
また，参照番号をつけないこともでき，その場合は参照番号の数字は進みません．
```tex:節番号なしセクション名
\section*{セクションタイトル}
\subsection*{サブセクションタイトル}
\subsubsection*{サブサブセクションタイトル}
```

### 数式モード
基本的にはamsmath.styを読み込んだ上で環境を立てることで使うことができます．
いろいろな数式の環境がありますが，筆者は文中に数式を埋め込む場合(インライン数式)は\$マーク1つで数式を囲み，独立した式として表示させ引用させるとき(別行立て数式)はalign環境を使っています．他にもいろいろな数式環境があるので，少し古いですが[このサイト](https://qiita.com/t_kemmochi/items/a4c390b4967b13f3afb7)を見てその時必要だと思う数式環境を選んで使ってみてください．
基本的には筆者が使っているものと同じものでいいと思います．

### 表
表は以下の様に記述することで4×4の表を書くことができます．
&で区切り文字を，\hlineで横線を追加することができます．

```tex:表
\begin{table}[htbp]
  \centering
  \caption{キャプション}
  \label{ラベル}
  \begin{tabular}{c|rrr}
        & 列1 & 列2 & 列3 \\\hline\hline
    行1 &    &    &    \\
    行2 &    &    &    \\
    行3 &    &    &    \\\hline
  \end{tabular}
\end{table}
```
表は[このサイト](https://www.tablesgenerator.com/latex_tables)を使うとExcelやGoogleスプレッドシートのような表計算アプリなどからコピペでtabular環境内を作成できます．
ラベルについては後述します．

### 図
図はdivpdfmxを読み込んだうえで，figure環境で記述すると表示できます．
具体的には，document環境内で以下のように記述すると表示できます．
~~graphicxだけで動くかもしれないが，その辺の違いが気になる人は[この記事](https://qiita.com/zr_tex8r/items/442b75b452b11bee8049)を見てほしい．~~
```tex:ファイル上部
\documentclass[titlepage,a4paper]{jsarticle}
% 表に関するもの
\usepackage[dvipdfmx]{graphicx}
\usepackage[dvipdfmx]{color}
```
```tex:図
\begin{figure}[htbp]
  \centering
  \includegraphics[横幅や縦幅の指定]{図や写真へのパス}
  \caption{キャプション}
  \label{ラベル}
\end{figre}
```
ラベルについては後述します．
### ソースコード
ソースコードはlistingsを読み込んだうえで，lstlistings環境で記述すると表示できます．
具体的には，document環境内で以下のように記述すると表示できます．
設定等も共有します．
```tex:ファイル上部
\documentclass[titlepage,a4paper]{jsarticle}

% lstlistingを使えるようにする．
\usepackage{listings}
% lstlistingの描画設定
\lstset{
  basicstyle={\ttfamily},
  identifierstyle={\small},
  commentstyle={\smallitshape},
  keywordstyle={\small\bfseries},
  ndkeywordstyle={\small},
  stringstyle={\small\ttfamily},
  frame={tb},
  breaklines=true,
  columns=[l]{fullflexible},
  numbers=left,
  xrightmargin=0zw,
  xleftmargin=3zw,
  numberstyle={\scriptsize},
  stepnumber=1,
  numbersep=1zw,
  lineskip=-0.5ex
}
% キャプションの"Listing 1:~"みたいに描画されるところを"ソースコード 1:~"に変更
\renewcommand{\lstlistingname}{ソースコード}
```
```tex:ソースコード
\begin{lstlisting}[caption=キャプション名,label=ラベル]
// ソースコード
a = a += 1;
\end{lstlisting}
```

基本的にはこれでいいと思いますが，気に入らない所があれば自分で調べてみてください．
また，ラベルについては後述します．
### 参照
図や表，ソースコードなどを本文中で引用するときに使います．
`\label{キー}`と`\ref{キー}`がペアになっていて，`\label{キー}`は直前の`\caption{キャプション}`などに紐付いています．
以下にTeXのソースコードと出力結果を示します．
```tex:ソースコード
表\ref{tab:key}にラベルを含めて4行4列の表を示す．
\begin{table}[htbp]
  \centering
  \caption{キャプション}
  \label{tab:key}
  \begin{tabular}{c|rrr}
       & 列1 & 列2 & 列3 \\\hline\hline
    行1 &    &    &    \\
    行2 &    &    &    \\
    行3 &    &    &    \\\hline
  \end{tabular}
\end{table}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125214/22de058e-a6b2-7776-e4a7-85b3d5cde53e.png)

キーには何を入れてもいいですが，後から見返しても分かるようにある程度関係のある単語を入れましょう．例えばaとかbとかはやめましょう．

### 箇条書き
箇条書きは記号付き箇条書きを使えるitemize環境や番号付き箇条書きのenumerate環境の2つを覚えておけば充分だと思います．
```tex:itemize環境
\begin{itemize}
 \item 1つ目
 \item 2つ目
 \item 3つ目
\end{itemize}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125214/e6b0220e-a403-f59b-8b0d-ddac26852acf.png)


```tex:enumerate環境
\begin{enumerate}
 \item 1つ目
 \item 2つ目
 \item 3つ目
\end{enumerate}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125214/9b09b5d3-0426-c558-04fa-888aea747605.png)

一応入れ子にすることもできますが，レポートの可読性が悪くなるので多用するのはおすすめしないので存在だけ紹介します．

### minipage
画像や表をひとまとめにしたり横に並べたりするものです．
必ずしも必要ではないですが，レポートの可読性を高めるためには必須なので紹介します．
minipage環境をつくる

### その他
文字の大きさや太さを変えたり，様々なことができるので調べてみてください．
やりたいなと思ったことは基本できると思います．

# ユーザスペニット
VSCode内の左下の歯車マークからユーザースニペットを選択し，latexを選択するとlatex.jsonが生成されます．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125214/d8ea2b33-1f13-2109-77e3-d9a708234946.png)

latex.jsonに書くことで，短い文字列を入力するだけであらかじめ決めておいたテンプレートを呼び出すことができます．
例えば`figure`か`fig`と入力したときにfigure環境の中身をテンプレートを作りたいときは以下のように記述します．
```json:latex.json
{
	"figure": {
		"prefix": [
			"figure",
			"fig"
		],
		"body": [
			"\\begin{figure}[]",
			"\\centering",
			"\\includegraphics[width=0.8\\textwidth]{}",
			"\\caption{}",
			"\\label{}",
			"\\end{figure}",
		],
		"description": "画像表示用テンプレート",
	}
}
```

参考に筆者が使っているlatex.jsonを共有します．
```json:latex.json
{
	"report": {
		"prefix": [
			"rep",
			"repo",
			"report"
		],
		"body": [
			"\\documentclass[titlepage,a4paper]{jsarticle}",
			"\\usepackage{import}% 各種パッケージインポート",
			"\\usepackage{title}% タイトルページの変更",
			"",
			"%% タイトルページの変数",
			"% レポートタイトル",
			"\\title{レポートタイトル}",
			"% 提出日",
			"\\expdate{\\today}",
			"% 科目名",
			"\\subject{科目名}",
			"% 学部",
			"\\class{学部名}",
			"% 学年",
			"\\grade{学年}",
			"% 学籍番号",
			"\\mynumber{学籍番号}",
			"% 記述者",
			"\\author{名前}",
			"% グループ名 % もし班があるやつならtitle_team.styを入れる",
			"% \\team{10}",
			"% 共同実験者 % もし共同実験者が必要なやつならtitle_kyoudou.styを入れる",
			"\\coauthor{%",
			"\\textbf{学籍番号:} & \\textbf{氏名:} \\ \\",
			"\\textbf{学籍番号:} & \\textbf{氏名:}\\ \\",
			"\\textbf{学籍番号:} & \\textbf{氏名:}\\ \\",
			"\\textbf{学籍番号:} & \\textbf{氏名:}\\ \\",
			"}",
			"%",
			"",
			"\\begin{document}",
			"% titleページ作成",
			"\\maketitle",
			"",
			"% 参考文献",
			"\\begin{thebibliography}{99}",
			"\\bibitem{}",
			"\\end{thebibliography}",
			"",
			"\\end{document}",
		],
		"description": "授業レポート用テンプレート"
	},
	"figure": { // 画像表示，中央揃え，キャプション参照あり
		"prefix": [
			"figure",
			"fig"
		],
		"body": [
			"\\begin{figure}[]",
			"\\centering",
			"\\includegraphics[width=0.8\\textwidth]{}",
			"\\caption{}",
			"\\label{}",
			"\\end{figure}",
		],
		"description": "画像表示用テンプレート",
	},
	"table": {
		"prefix": [
			"table",
			"tab"
		],
		"body": [
			"\\begin{table}[H]",
			"\\centering",
			"\\caption{}",
			"\\label{}",
			"% tabler環境の挿入",
			"",
			"\\end{table}",
		],
		"description": "テーブル表示用テンプレート"
	},
	"list": {
		"prefix": [
			"lst",
			"list",
			"code"
		],
		"body": [
			"\\begin{lstlisting}[caption=,label=]",
			"",
			"\\end{lstlisting}"
		],
		"description": "ソースコード表示用テンプレート"
	}
}
```

# Styleファイルについて
基本的には使う必要のないものですが，自作のスタイルファイルを作成するとファイル内がスッキリします．
また，特殊なタイトルページや関数の変更などを他人に共有することもできます．これは基本的には筆者が使っているものを共有します．
また，Styleファイルが手元にある場合は，`\usepackage{}`で適用させることができます．
texファイルと同じフォルダ内にある`template.sty`を適用したいときは以下のように記述します．
```tex:上部
\documentclass[titlepage,a4paper]{jsarticle}
\usepackage{template}
```

## タイトルページ
タイトルページは公式でタイトル，日付，著者名を書く事ができるようにしてありますが，我々の目的はレポート用なので学年や学籍番号，教科名なども入力できるようにした筆者のものを共有します．
```tex:title.sty
%% title.sty
%% <2024-06-26>

%% タイトルページ作成
% maketitle 用の要素の定義
\newcommand*{\subject}[1]{\newcommand*{\@subject}{#1}}  % 教科
\newcommand*{\class}[1]{\newcommand*{\@class}{#1}}      % 分野
\newcommand*{\grade}[1]{\newcommand*{\@grade}{#1}}      % 学年 
\newcommand*{\mynumber}[1]{\newcommand*{\@mynumber}{#1}}  % 教科
% \newcommand*{\team}[1]{\newcommand*{\@team}{#1}}      % 班
\newcommand*{\expdate}[1]{\newcommand*{\@expdate}{#1}}  % 提出日
\newcommand{\coauthor}[1]{\newcommand{\@coauthor}{#1}}  % 共同実験者
% \titlepageコマンドの書き換え
\if@titlepage
\renewcommand{\maketitle}{%
  \begin{titlepage}%
    \let\footnotesize\small
    \let\footnoterule\relax
    \let\footnote\thanks
    \null\vfil
    % \vskip em % ここで調整
    \begin{flushright}
      \large\@expdate\\
      \large\@subject レポート
    \end{flushright}
    \vskip 120\jsc@mpt %60\jsc@mpt % 開け幅を規定
    \begin{center}%
      {\Huge \@title \par} % title の大きさを規定
      \vskip 6em%3em % 開け幅を規定
        {\Large % author の大きさを規定
          % \lineskip .75em
          \@class\hspace{0.5\zw}\@grade\\
          % \vspace{0.5rem}
          \begin{tabular}[t]{>{\bfseries}l@{\hspace{0.5\zw}：\hspace{0.5\zw}}l}%
            学籍番号 & \@mynumber \\
            氏名   & \@author   % author を挿入
          \end{tabular}\par}%
      \vskip 1.5em % 開け幅を規定
      % {\large \@date \par} % date の大きさ規定
    \end{center}%
    \vspace{9cm}
    \par
    \@thanks\vfil\null
  \end{titlepage}%
  \setcounter{footnote}{0}%
  \global\let\thanks\relax
  \global\let\maketitle\relax
  \global\let\@thanks\@empty
  \global\let\@author\@empty
  \global\let\@date\@empty
  \global\let\@title\@empty
  \global\let\title\relax
  \global\let\author\relax
  \global\let\date\relax
  \global\let\and\relax
  %
  \global\let\@subject\relax
  \global\let\@mynumber\relax
  \global\let\@class\relax
  \global\let\@grade\relax
  \global\let\@team\relax
  \global\let\@expdate\relax
  \global\let\@coauthor\relax
  \global\let\grade\relax
  \global\let\team\relax
  \global\let\expdate\relax
  \global\let\coauthor\relax
}%
```
また，自分で変えたい時は以下の3つの記事を見ればできると思います．
[参考記事1](http://aquarius10.cse.kyutech.ac.jp/~otabe/koho/node11.html#SECTION00034000000000000000)
[参考記事2](https://qiita.com/zr_tex8r/items/5067307890d36c0e4882)
[参考記事3](https://qiita.com/ZoneTsuyoshi/items/c87e9ea2a76b552773d2)

## パッケージ
いつも`\usepackage`しているものやマクロ定義しているものはStyleファイルにするとファイルがスッキリします．
これも筆者のものを共有します．これはいろいろなところから持ってきているキメラになっているので，必要ない事が書いてあったりするかも知れません．
```tex:import.sty
%% import.sty
%% <2024-07-04>

%% 外枠削減 %%% jarticleじゃなくて，jsarticle使うといい感じの幅になる

\RequirePackage{geometry}

% \zw と \zh の定義
\providecommand{\zw}{zw}
\providecommand{\zh}{zh}

\geometry{left=30mm,right=30mm,top=30mm,bottom=30mm}

%% 画像関連
% 画像読み込みを可能にする
\usepackage[dvipdfmx]{graphicx}
% これないと画像が表示されない
\usepackage[dvipdfmx]{color}
% TeX文書中に描画コマンドで色々書く感じのやつ．多分ベクター画像っぽい個としてる.graphicsと喧嘩してしまったので消す
% \usepackage{tikz}
% サブキャプション使うためのやつ
\usepackage[hang,small,bf]{caption}
\usepackage[subrefformat=parens]{subcaption}
\captionsetup{compatibility=false}
\captionsetup[subfigure]{labelformat=simple}
% 頭をいれるときのフォーマットをいじる
\renewcommand{\thesubfigure}{(\alph{subfigure})} % 図のサブキャプション引用時に括弧

%% 表
% セル結合
\usepackage{multirow}
% 横罫線をかくやつ
\usepackage{booktabs}
% サブキャプション使うためのやつ
\captionsetup[subtable]{labelformat=simple}
% 表をいれるときのフォーマットをいじる
\renewcommand{\thesubtable}{(\alph{subtable})} % 表のサブキャプション引用時に括弧

%% url関連
\usepackage[hyphens]{url} % 先にurlパッケージ読込
% ハイパーリンク化
\usepackage[hidelinks,dvipdfmx]{hyperref}

%% 数式  %%%後で精査
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{amssymb}
\usepackage{bm}
\usepackage{siunitx}
\usepackage{array}
\DeclareSIUnit[number-unit-product=]\percent{\char`\%}


%% 挿入ソースコードの設定
% lstlistingを使えるようにする．
\usepackage{listings}
% lstlistingの描画設定
\lstset{
  basicstyle={\ttfamily},
  identifierstyle={\small},
  commentstyle={\smallitshape},
  keywordstyle={\small\bfseries},
  ndkeywordstyle={\small},
  stringstyle={\small\ttfamily},
  frame={tb},
  breaklines=true,
  columns=[l]{fullflexible},
  numbers=left,
  xrightmargin=0zw,
  xleftmargin=3zw,
  numberstyle={\scriptsize},
  stepnumber=1,
  numbersep=1zw,
  lineskip=-0.5ex
}
% キャプションの"Listing 1:~"みたいに描画されるところを"ソースコード 1:~"に変更
\renewcommand{\lstlistingname}{ソースコード}

%% 便利系
% 位置決定コマンド"H"を使えるようにする
\usepackage{here}
% PDFを読み込めるようにする %%maketitleせずにこれで表紙読み込めば良き
\usepackage{pdfpages}

%% 参考ページ %%%後から見返してわかるようにこれも精査しておきたい
%% https://qiita.com/ZoneTsuyoshi/items/c87e9ea2a76b552773d2    %% 良さげな事が書いてあるやつ
%% https://texwiki.texjp.org/TikZ                               %% tikzについて
%% https://konoyonohana.blog.fc2.com/blog-entry-339.html        %% booktabsについて
%% https://mathlandscape.com/latex-hyperref/                    %% hyperrefについて
%% https://abenori.blogspot.com/2015/07/pdfpages.html           %% pdfpagesについて
%% https://atatat.hatenablog.com/entry/cloud_latex18_subcaption %% subcaptionについて
```

# まとめ
できる限りこのページを見るだけでTeXで簡単なレポートを書けるようにしましたが，説明の足りないところが多々あると思います．
もし物足りないなぁと思ったら最新の情報を調べてみてください．

それでは，良きTeXライフを！