エラーしながら学ぶVSCodeにLatexを導入2

こちらは、前回の続きとなっています。遅くなって申し訳ありません。

:::note alert
これは Windowsユーザー向け のVSCodeに少し変わったLaTeX導入方法です。
:::

VSCodeで、latexの環境構築をする方法はたくさんあってネットで調べた限りでは、latexmk+LaTeXWorkshop, latexmkなし+LaTeXWorkshop, Makefileのようないろいろな方法がありました。
今回は、latexmk+LaTeXWorkshopの方法でやります。

前回を見ていない人はこちらへどうぞ。

https://qiita.com/hikozaru1202/items/4189bfc52a99b7c32968

前回は$\TeX$が動くようになったので、今回は$\TeX$の日本語パッケージやコマンドの使い方などを教えたいと思います。


# 日本語パッケージの導入

前回の$\TeX$環境ままだと英語の論文は書けますが、私たちの母語は日本語なので日本語パッケージを入れなければなりません。

今回使うコマンドは、tlmgrというTeXLive のパッケージ管理をするツールです。
Pythonを使ったことがある人ならわかると思いますが、pipと同じようなものです。

では、早速入れてみましょう。

1\. **管理者権限**でターミナルを開く

![img.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961507/f868be93-016f-62e8-02e0-da848c7d4723.png)

2\. 次のコマンドを打ち込む

```
tlmgr install collection-langjapanese collection-mathscience collection-pictures here float texdoc
```

3\. ダウンロードでき終わるまで長いので待つ

これで日本語パッケージが入っているはずです。
これでも入らなかったら、前回に戻って環境変数のPATHをもう一度見直してみてください。

![seikou.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961507/a1dac514-dcd1-0f18-2c29-eace9d79ac34.png)



# コマンドでTeXを出力

コマンドの使い方を知っている人なら何でこんなことやるの？って思う人がいるかと思うけど、<a href = https://okumuralab.org/tex/course/view.php?id=2 >TeXの質問をするサイト </a> で環境構築のことについて質問している人で、いきなりVSCodeで出力させてエラーが出てきてわからないという方が多く見受けられたからです。

:::note info
VSCodeによる自動コンパイルが使えなかったら一旦コマンドで打つようにしましょう
:::

少し面倒かと思うけど頑張ってみてください。
では、まず最初にLua$\LaTeX$からやってみましょう。

## LuaLaTeXをコマンドで出力

1\. わかりやすいところに新規ファイルを作り、ファイル内で右クリックをしてターミナルを開く
![fail.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961507/ba50c2ad-54b9-dc1b-62e6-ddb4a1242758.png)

2\. 前回入れたVSCodeがあるはずなので、以下のコマンドで実行する

```
code . luasample.tex
```
![luasample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961507/be184244-466e-7f6f-83fe-448ade144e74.png)

3\. こちらをコピーし、開かれたVSCodeに張り付ける
```tex:luasample.tex
\documentclass[a4paper,11pt]{ltjsarticle}

% フォント
\usepackage{amsmath,amsfonts}

\begin{document}

\title{\LaTeX の使い方}
\author{\TeX Taro}
\date{\today}
\maketitle

\section{序論}
Lua\LaTeX の使い方を軽く学ぼう。

\subsection{数式を書いてみよう}
運動方程式を書いてみる
\begin{eqnarray}
  ma = F
\end{eqnarray}

\end{document}
```

4\. 赤い丸をしたところにluasample.texがあることを確認して、VSCodeのターミナルに以下のものを実行する。

```
lualatex luasample
```
![vscode.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961507/ba1c1091-4325-e937-cbe8-83be18869f4a.png)


5\. エラーが出ないはずなので、そこのファイルにpdfができているので確認する
![latex.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961507/8d049022-0869-703f-8e3c-82ee2a56fd36.png)


これで基本的にLua$\LaTeX$は使えます。次に、up$\LaTeX$を使ってみましょう。

前回、Lua$\LaTeX$の利点として、中間ファイルであるdviファイルがでないため工程が少なくなる。ということを言いました。
つまり、up$\LaTeX$は中間ファイルを挟むので少し面倒だということでやってみましょう。

## upLaTeXをコマンドで出力

1\. VSCodeからupsample.texを新規作成する
![uplatex.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961507/f899fe4a-e1db-f6db-a37f-81ff082f10e8.png)

2\. 以下のコードをupsample.texに張り付ける

```tex:upsample.tex
\documentclass[a4paper,11pt,uplatex]{jsarticle}

% 数式
\usepackage{amsmath,amsfonts}

\begin{document}

\title{\LaTeX の使い方}
\author{\TeX Taro}
\date{\today}
\maketitle


\section{序論}
up\LaTeX の使い方を軽く学ぼう。

\subsection{数式を書いてみよう}
ラマヌジャンが見つけた等式
\begin{eqnarray}
  \frac{1}{\pi} = \frac{2\sqrt{2}}{99^2} \sum_{n=0}^\infty \frac{(4n)!}{(n!)^4} \frac{26390n+1103}{396^{4n}}
\end{eqnarray}

\end{document}
```

3\. VSCodeのターミナルに以下のものを実行する
```
uplatex upsample
```

4\. pdfではなくdviファイルができていることを確認する。
![dvipdfmk.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961507/905e7d66-9a09-c855-53a1-ae8279100b54.png)

5\. dviをpdfに変える次のコマンドを実行する
```
dvipdfmx upsample
```

6\. pdfができていることを確認する。

## コマンドで出力のまとめ

何度でも言いますが、

:::note info
VSCodeによる自動コンパイル使えなかったら一旦コマンドで打つようにしましょう
:::

論文とかを見てみると、最後のほうに参考文献とかがいっぱい載っているのを見たことがあると思います。
それは、**BibTeX**というものを使っていて、これのコマンドで入力する場合(up$\LaTeX$)
```
uplatex hoge # auxファイルを作る
pbibtex hoge # bblファイルを作る
uplatex hoge # bblファイルを取り込む
uplatex hoge # dviを作成する
dvipdfmx hoge # dviをpdfにする
```
のようになってとても大変である。

そのようなことを避けるために**Latexmk**というコマンドがあるのでそれを使って、自動でコンパイルできるようにしましょう。


# VSCodeの拡張機能を入れる

LaTeXWorkshopとは、VSCodeでpdfが見れるようになったり、ボタン一つでコンパイルできるようになったりとてもすごいやつ。

1\. LaTeXWorkshopを入れる (ついでにVSCodeの日本語パッケージが入っていなかったら入れておきましょう)
![latexworkshop.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961507/2959cd49-8f78-fb60-b76c-b10bfc8ce08c.png)

2\. setting.jsonを開く
![setiingjson.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961507/ed535a67-fbeb-53e9-41b7-7e413150bd3e.png)

3\. setting.jsonに以下のコードを書く(そこに何か書かれていたら特徴を観察してみて追加してみてください。エラーがなくなるまで頑張ってください。)

```json:setting.json
{
  // ----------   LaTex  ----------
  "[tex]": {
    // スニペット補完中にも補完を使えるようにする
    "editor.suggest.snippetsPreventQuickSuggestions": true,
    // インデント幅を2にする
    "editor.tabSize": 2,
    // editor.wordSeparators: 単語単位での移動を行う場合の区切り文字を指定
    // 日本語文書で単語移動を使うため、助詞や読点、括弧を区切り文字として指定する
    "editor.wordSeparators": "./\\()\"'-:,.;<>~!@#$%^&*|+=[]{}`~?　、。「」【】『』（）！？てにをはがのともへでや",
  },
  "[latex]": {
    "editor.suggest.snippetsPreventQuickSuggestions": true,
    "editor.tabSize": 2,
    "editor.wordSeparators": "./\\()\"'-:,.;<>~!@#$%^&*|+=[]{}`~?　、。「」【】『』（）！？てにをはがのともへでや",
  },
  "[bibtex]": {
    "editor.tabSize": 2,
  },

  // 使用パッケージのコマンドや環境の補完を有効にする
  "latex-workshop.intellisense.package.enabled": true,  
  // 生成ファイルを "out" ディレクトリに吐き出す
  "latex-workshop.latex.outDir": "out",

  // latex-workshop.latex.tools: Tool の定義
  "latex-workshop.latex.tools": [
      // latexmk を利用した lualatex によるビルドコマンド
      {
        "name": "Latexmk (LuaLaTeX)",
        "command": "latexmk",
        "args": [
          "-gg", "-pv", "-synctex=1", "-lualatex", "-file-line-error","-outdir=%OUTDIR%", "%DOC%"
        ]
      },
      // latexmk を利用した uplatex によるビルドコマンド
      {
        "name": "Latexmk (upLaTeX)",
        "command": "latexmk",
        "args": [
          "-gg", "-pv", "-synctex=1", "-file-line-error", "-outdir=%OUTDIR%", "%DOC%"
        ]
      },
      // latexmk を利用した platex によるビルドコマンド
      // 古い LaTeX のテンプレートを使いまわしている (ドキュメントクラスが jreport や jsreport ) 場合のため
      {
        "name": "Latexmk (pLaTeX)",
        "command": "latexmk",
        "args": [
          "-gg", "-pv", "-latex='platex'", "-latexoption='-kanji=utf8 -no-guess-input-env'", "-synctex=1", "-file-line-error","-outdir=%OUTDIR%", "%DOC%"
        ]
      },
      // latexmk を利用した xelatex によるビルドコマンド
      {
        "name": "Latexmk (XeLaTeX)",
        "command": "latexmk",
        "args": [
          "-gg", "-pv", "-xelatex", "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "-outdir=%OUTDIR%", "%DOC%"
        ]
      },
      // 透過された数式作成のためのコマンド
      {
        "name": "latexmkout",
        "command": "latexmk",
        "args": [
          "-gg", "-silent", "%DOC%",
        ],
      },
      // 透過された画像用のpdfのトリミング
      {
        "name": "pdftrimming",
        "command": "pdfcrop",
        "args": [
          "%DOC%.pdf", "%DOC%.pdf",
        ]
      },
      // pdfを透過された画像に変換
      { 
        "name": "pdf2png",
        "command": "pdftocairo",
        "args": [
          "-png", "-r", "300", "-transp", "%DOC%.pdf"
        ]
      },
  ],

  // latex-workshop.latex.recipes: Recipe の定義
  "latex-workshop.latex.recipes": [
      // LuaLaTeX で書かれた文書のビルドレシピ
      {
        "name": "LuaLaTeX",
        "tools": [
          "Latexmk (LuaLaTeX)"
        ]
      },
      // LaTeX(upLaTeX) で書かれた文書のビルドレシピ
      {
        "name": "upLaTeX",
        "tools": [
          "Latexmk (upLaTeX)"
        ]
      },
      // XeLaTeX で書かれた文書のビルドレシピ
      {
        "name": "XeLaTeX",
        "tools": [
          "Latexmk (XeLaTeX)"
        ]
      },
      // LaTeX(pLaTeX) で書かれた文書のビルドレシピ
      {
        "name": "pLaTeX",
        "tools": [
          "Latexmk (pLaTeX)"
        ]
      },
      // パワポ用に透過された数式の画像の出力
      {
        "name": "tex2png",
        "tools": [
          "latexmkout",
          "pdftrimming",
          "pdf2png",
        ]
      },
  ],

  // latex-workshop.latex.magic.args: マジックコメント付きの LaTeX ドキュメントをビルドする設定
  // '%!TEX' で始まる行はマジックコメントと呼ばれ、LaTeX のビルド時にビルドプログラムに解釈され、
  // プログラムの挙動を制御する事ができる。
  "latex-workshop.latex.magic.args": [
    "-f", "-gg", "-pv", "-interaction=nonstopmode", "-file-line-error", "%DOC%"
  ],
  // latex-workshop.latex.clean.fileTypes: クリーンアップ時に削除されるファイルの拡張子
  // LaTeX 文書はビルド時に一時ファイルとしていくつかのファイルを生成するが、最終的に必要となるのは
  // PDF ファイルのみである場合などが多い。また、LaTeX のビルド時に失敗した場合、失敗時に生成された
  // 一時ファイルの影響で、修正後のビルドに失敗してしまう事がよくある。そのため、一時的なファイルを
  // 削除する機能 (クリーンアップ) が LaTeX Workshop には備わっている。
  "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", "*.synctex.gz",
      // for Beamer files
      "_minted*", "*.nav", "*.snm", "*.vrb",
  ],

  // latex-workshop.latex.autoBuild.run: .tex ファイルの保存時に自動的にビルドを行うかどうか
  "latex-workshop.latex.autoBuild.run": "onSave",

  // ----------   LaTex END  ----------  
}
```
参考先

https://qiita.com/popunbom/items/7d02fc75ad23b735d28c


![ase.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961507/5f9d7c6a-071a-d52a-03d3-44fa7d0ce1da.png)

## 軽くsetting.jsonが何をやっているかの説明

### latex-workshop.latex.tools
まず、latex-workshop.latex.toolsから説明する。
```json
"latex-workshop.latex.tools": [
      // latexmk を利用した lualatex によるビルドコマンド
      {
        "name": "Latexmk (LuaLaTeX)",
        "command": "latexmk",
        "args": [
          "-gg", "-pv", "-synctex=1", "-lualatex", "-file-line-error","-outdir=%OUTDIR%", "%DOC%"
        ]
      },
```

これは、次のコマンドにいろいろなオプションをつけまくっている感じで、。
```
latexmk hoge
```

ここの中で、好き嫌いが出るオプションは"-synctex=1"で、これはSumatraPDFのような一部のPDFreaderがコマンド実行時に自動で開くオプションです。
「VSCodeで、PDFを見るわ」っていう人は消してもらって構わないです。

### latex-workshop.latex.recipes

次のサンプルが一番わかりやすい

```json
"latex-workshop.latex.recipes": [
      // パワポ用に透過された数式の画像の出力
      {
        "name": "tex2png",
        "tools": [
          "latexmkout",
          "pdftrimming",
          "pdf2png",
        ]
      },
```

latex-workshop.latex.toolsで定義されたコマンドである"latexmkout"、"pdftrimming"、"pdf2png"をこの順番で実行している。

tex2pngは、<a href=https://texclip.marutank.net/>TeXclip</a>のような透過された数式の画像ができるものである。
いらなかったら"latexmkout"、"pdftrimming"、"pdf2png"、"tex2png"を消してください。

# 続きのリンク

環境構築ってとても大変ですね。

https://qiita.com/hikozaru1202/items/ce4c916f8d763b4006a9#latexmkrc%E3%81%AE%E4%BD%9C%E6%88%90