【弊校向け】Latex+vscordでレポートを書く方法

# wordでレポート書くのムズない？

3年生になり、プログラミング系の授業や回路系の授業のレポートでword等を用いてもよくなりましたね。
2年生まで手書きだったのもあり、多くの方がwordを使ってレポートを書いているでしょう。
しかし、皆さん一度は思ったことがあるはずです。
「wordでレポート書くのムズない？」と。
今回はそんなwordに変わるレポートを書くツール**Latex**を紹介します。

# Latexとは？

ではまず、latexについて簡単に説明します。
知っている方は、飛ばしてもらってかまいません。

以下[Tex Wiki](https://texwiki.texjp.org/?LaTeX%E5%85%A5%E9%96%80)より参照
> LaTeX は TeX の上に構築されたフリーの文書処理システムです。 Leslie Lamport によって開発されました。 TeX は「組版のために開発された言語」でもあり，そのままでは使いにくい点もあるので，LaTeX によって一般的な文書作成に便利な機能拡張がなされています。

特に数式や論文、技術文書など、複雑なレイアウトや厳密な組版が求められる文書において、非常に高品質な出力を生成できます。  
美しい数式表示はLaTeXの大きな特徴の一つです。

# 環境構築

## Linux(Ubuntu)

まず、Ubuntuリポジトリを更新します。
```bash
sudo apt update && sudo apt upgrade -y
```

次に`texlive`をインストールします。
サイズが非常に大きいため、時間が結構かかります。
```bash
sudo apt install texlive-full -y
```

インストールが終わったら確認してみましょう。
```bash
latex --version
```

次にPDF をビルドして作成された PDF の表示を自動で行ってくれる latexmk の設定ファイルを作成します。

```bash
touch ~/.latexmkrc
```

任意のエディタで次のように編集してください。

```text:~/.latexmkrc
# PDF を生成する
$pdf_mode = 1;

# エンジンを lualatex に設定（変更可能）
$latex = 'lualatex -synctex=1 -interaction=nonstopmode';

# 自動的にファイルを監視して再コンパイル
$continuous_mode = 1;
```

次にvscodeの設定に移っていきます。
vscodeで`Latex Workshop`という拡張機能をインストールしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/0ae14f69-42cc-46d7-bb88-dbe8a604e4f2.png)

一度vscodeを再起動しましょう。

再起動が終わったら、もうlatexが使えます。
しかし、毎回コマンドを打ってコードをビルドする必要があります。
めんどくさいのでvscodeの`settings.json`を編集して、`ctrl+s`で保存した時に自動ビルドするように設定しましょう。

vscode上で`ctrl+shift+P`と入力し、上部の入力ボックスにsettings.jsonと入力し、エンターを押しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/2236874b-4c15-4d76-93ad-020969170e3e.png)

settings.jsonに以下を追加しましょう。
```json:settings.json
"latex-workshop.latex.tools": [
        {
            "name": "lualatexmk",
            "command": "latexmk",
            "args": [
            "-lualatex",
            "-f",
            "-interaction=nonstopmode",
            "-synctex=1",
            "%DOC%"
            ]
        },
    ],
    "latex-workshop.latex.recipes": [
        {
            "name": "LuaLaTeXmk",
            "tools": ["lualatexmk"]
        }
    ],
    "latex-workshop.latex.autoBuild.run": "onSave",
    "latex-workshop.latex.recipe.default": "LuaLaTeXmk",
```

最終的にこのようになっていればよいです。
```json:settings.json
{
    (他の関係ない設定)

    "latex-workshop.latex.tools": [
        {
            "name": "lualatexmk",
            "command": "latexmk",
            "args": [
            "-lualatex",
            "-f",
            "-interaction=nonstopmode",
            "-synctex=1",
            "%DOC%"
            ]
        },
    ],
    "latex-workshop.latex.recipes": [
        {
            "name": "LuaLaTeXmk",
            "tools": ["lualatexmk"]
        }
    ],
    "latex-workshop.latex.autoBuild.run": "onSave",
    "latex-workshop.latex.recipe.default": "LuaLaTeXmk"
}
```

保存して一応再起動しましょう。
環境構築終了です。

# MacOS

Macは分からないので、以下の記事等を参照してやってみてください。

https://qiita.com/tofu/items/6f590abb11a344b1fe7a

# 文法

以下に[サンプル](https://qiita.com/passive-radio/items/623c9a35e86b6666b89e#3-vscode-%E3%81%AB-latex-%E7%92%B0%E5%A2%83%E3%82%92%E6%95%B4%E5%82%99)を示します。

```latex
\documentclass{ltjsarticle}
\begin{document}

\title{はじめての\TeX }
\author{Taro J. Armstrong}
\maketitle
\section{はじめての\TeX がLua\TeX なんて粋だね}
%\section{はじめての\TeXがLua\TeXなんて粋だね}

%こうやって文字を打ちます。
\subsection{小見出し！}
あたり前過ぎて気に止めることもないですが、きとんと改行命令を出していなくても自動で改行します。
\\あ、ギリ改行されなかったか。
\end{document}
```

基本的な書き方等は以下の記事が参考になると思うので参照してみてください。

https://qiita.com/jabelic/items/7c8c10d241449d834878

# スニペット機能

とはいえwordからlatexに乗り換えた人が最初に思うのは、「latexって最初に書くこと多くね？」だと思います。

`\documentclass{}`とか`\usepackege`とかいちいち覚えてられるか！と。

スニペット機能を使えばこの問題を解決できます。

vscodeの左下の歯車マーク->スニペットをクリックしましょう。
おそらく上部に入力できるブロックが出現すると思います。
そこに`latex`と入力しましょう。
`latex.json`が生成されるはずです。
この中にテンプレートを書いておけば任意の文字列で呼び出せます。
以下の例は`report`でテンプレートを呼び出すものです。
```json:latex.json
{
	"report": {
		"prefix": "report",
		"body": [
			"\\documentclass[titlepage, 12pt]{ltjsarticle} % 日本語用のクラスファイル",
			"\\usepackage{luatexja}  % 日本語を使うためのパッケージ",
			"\\usepackage{tikz}      % 図形などを描きたい場合",
			"\\usepackage{geometry}  % 余白設定",
			"\\usepackage{listings}  % ソースコードを表示するためのパッケージ",
			"\\usepackage{graphicx}  %画像とかを埋め込む",
			"\\usepackage{xcolor}  % 文字色指定",
			"\\usepackage{hyperref}   % リンク作成",
			"\\usepackage{float} % preambleに追加",
			"\\usepackage{amsmath}   % 数式を使う場合",
			"\\geometry{top=2cm, bottom=2cm, left=2cm, right=2cm}",
			"\\lstset{",
			"  language=C,",
			"  basicstyle=\\ttfamily\\footnotesize,",
			"  keywordstyle=\\color{blue},",
			"  commentstyle=\\color{gray},",
			"  stringstyle=\\color{red},",
			"  numbers=left,",
			"  numberstyle=\\tiny,",
			"  stepnumber=1,",
			"  numbersep=5pt,",
			"  frame=single,",
			"  breaklines=true,",
			"  showstringspaces=false,",
			"  tabsize=2,",
			"}",
			"",
			"\\title{$1}",
			"\\author{Saku0512}",
			"\\date{}",
			"",
			"\\begin{document}",
			"\\maketitle",
			"",
			"",
			"\\end{document}"
		],
		"description": "授業レポート用テンプレート"
	},
}
```

`$1`で最初に入力する部分を指定できます。

# 一時ファイル削除

latexをやり始めて出てくるもう一つの問題が、一時ファイルが多く出て気持ち悪いというのがあると思います。

これも`settings.json`を編集することで解決できます。
以下を追加しましょう。
```json:settings.json
"latex-workshop.latex.autoClean.run": "onSucceeded", // コンパイル成功時に実行
"latex-workshop.latex.clean.fileTypes": [
    "*.aux",
    "*.bbl",
    "*.blg",
    "*.idx",
    "*.ind",
    "*.lof",
    "*.lot",
    "*.out",
    "*.toc",
    "*.acn",
    "*.acr",
    "*.alg",
    "*.glg",
    "*.glo",
    "*.gls",
    "*.ist",
    "*.fls",
    "*.log",
    "*.fdb_latexmk",
    "*.snm",
    "*.nav",
    "*.dvi",
    "*..synctex.gz"
],
```
これで保存時に一時ファイルが削除できます。
良いLatex人生を！