課題の記述をwordからlatexにしたら効率上がった(かもしれない)話

大学の課題を書くのにwordからlatexに変えたら、良い感じになったので備忘録がてら書いてみました。
PCはMac OS(M2)を使用しています。

# LaTeX

## MacTexのインストール

homebrewから`MacTex`のGUIアプリケーションを除いたものをインストールしました。

```
$ brew install --cask mactex-no-gui 
```

pdfTeXというものを使っているみたいですね。

```
❯ latex -v
pdfTeX 3.141592653-2.6-1.40.26 (TeX Live 2024)
...
```
## .latexmkrcの設定

どこかは忘れてしまいましたが、参考にした記事の内容をまるまるコピペして使っています。
参考元を忘れてしまったのでここは省略します...

# VSCode

拡張機能の`LaTeX Workshop`をインストールします。

![スクリーンショット 2024-05-26 23.43.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822706/7ddf603d-0cc1-6a6a-5c3f-ead63eb2986a.png)

この拡張機能の設定をすることで、保存すると自動でビルドしてくれたり、不要なファイルを削除してくれたりしています。

以下はVSCodeの設定の一部です。こちらも色々記事をみて参考にしました。

```settings.json
{

  ...

  "latex-workshop.latex.tools": [
    {
      "name": "latexmk",
      "command": "latexmk",
      "args": ["-silent", "-outdir=%OUTDIR%", "%DOC%"]
    }
  ],
  "latex-workshop.latex.recipes": [
    {
      "name": "latexmk (tex to PDF)",
      "tools": ["latexmk"]
    }
  ],
  "latex-workshop.view.pdf.viewer": "tab",
  "latex-workshop.latex.clean.subfolder.enabled": true,
  "latex-workshop.latex.autoClean.run": "onBuilt",
  "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-workshop.latex.outDir": "out"

  ...
  
}
```

# Makefile

LaTeX環境とは別にファイルの作成も手軽にしたかったので、Makefileを作成することにしました。
自分で思いついたかのように書いてますが、友人がそうしてたのを真似た感じです笑

突然ですが、以下は私の授業の課題を管理しているディレクトリです。

```
.
├── template    // LaTeXのテンプレートを置くところ
├── 1-psp-0
│   ├── Compile
│   │   ├── Compile.tex
│   │   └── out
│   │       └── Compile.pdf
│   ├── DesignStatement
│   │   ├── DesignStatement.tex
│   │   └── out
│   │       └── DesignStatement.pdf
│   ├── RequirementsStatement
│   │   ├── RequirementsStatement.tex
│   │   ├── figure1.png
│   │   ├── figure2.png
│   │   └── out
│   │       └── RequirementsStatement.pdf
│   ├── TestResults
│   │   ├── TestResults.tex
│   │   ├── figure1.png
│   │   ├── figure2.png
│   │   ├── figure3.png
│   │   ├── figure4.png
│   │   └── out
│   │       └── TestResults.pdf
│   ├── document
│   │   └── ...
│   ├── repo
│   │   └── ...
│   └── submission
│   │   └── ...
├── 2-stds
│   ├── ...
...
```

色々ありますが、こんな感じの構成になっています

```
.
└── [各課題のディレクトリ]
　　   ├── [ファイル名]
　　   │   ├── [ファイル名].tex
　　   │   └── out
　　   │       └── [ファイル名].pdf
　　   ├── document    // 課題の資料を置くところ
　　   │   └── ...
　　   ├── repo        // ソースコードを置くところ
　　   │   └── ...
　　   └── submission  // 最終的に提出するものを置くところ(複数回あるので)
　　　   　   └── ...
```

上記のうち`[ファイル名]ディレクトリ`と`[ファイル名].tex`をMakefileで生成してもらう感じです。
Makefileと、コマンドは次のようにします。

```Makefile
TEMPLATE=./template/template.tex

$(DIR)/$(NAME)/$(NAME).tex: $(TEMPLATE)
	mkdir -p $(DIR)/$(NAME)
	cp $(TEMPLATE) $@
```

```
$ make DIR=[課題のディレクトリ] NAME=[ファイル名]
```

これを実行すると、指定した課題のディレクトリ内にtexファイルを含むディレクトリが生成されます。
またこのtexファイルをVSCodeで編集して保存すると、texファイルのディレクトリ内に`/out`という名前で勝手に出力してくれるるわけです。
すっごく手軽になりました！嬉しい！

余談ですがMakefileなんて授業でしか作成したことなかったので、たった数行ですがたくさん調べました。まだまだだなあ

# GitHubで共有

元々WordからLaTeXに乗り換えた理由は、研究室のパソコン(Windows)でも作業がしたかったためです。
Wordをクラウドで共有すれば良いかと思いましたが、やっぱり毎回ダウンロードしたりアップロードしたりがめんどくさいと思ったこと && 良い機会だしLaTeX触れるようになりたいなあと思ったことがきっかけでした。

## gitignore

上記では省きましたが、各ディレクトリで`.DS_Store`が生まれること、`.dvi`や`synctex.gz`がなぜか削除されない状態なので、それらを無視するようにしています。

また、documentディレクトリは資料(wordファイル)を含むため、submissionディレクトリは提出物の管理はする必要がないという理由で、gitignoreに追加しています。

これでtexファイルの共有も簡単になりとっても嬉しいです。

# 今後の展望

現在はVSCodeの拡張機能を使って自動ビルド等をしていますが、頑張れば`.latexmkrc`でできるようになると(これまた友人から)聞いたので、やってみたいです。
最近ちまちまとterminalだったりNeoVimを整備したりしてるので、そちらでできるようになればかっこいいかな...と思ってます。
卒論までにlatexビギナーの山(?)は登りたいです。

ここまでご覧いただきありがとうございました🙌