TeX環境作成

# MacにTeX環境作ってみる

## texのinstallまわり

brewをsearchすると

```
If you meant "tex" specifically:
Installing TeX from source is weird and gross, requires a lot of patches,
and only builds 32-bit (and thus can't use Homebrew dependencies)

We recommend using a MacTeX distribution: https://www.tug.org/mactex/

You can install it with Homebrew-Cask:
  brew cask install mactex
```

と出るのでその通りMacTeXを使ってみる。

以下を参考にして
* http://www.clas.kitasato-u.ac.jp/~fujiwara/MacTeX/
* http://doratex.hatenablog.jp/entry/20180501/1525144736#13

TeXShopの環境設定で、プロファイルとして`upTeX (ptex2pdf)`を選択して保存・再起動する。

インストール先などは```/Library/TeX```らしい。

VSCodeの場合は LaTeX workshop という拡張がある。

## markdownとの連携

コード断片など、アンダースコアなどが入る文書はいちいち手でエスケープするのが面倒なので、markdownでマークアップしてpandocで変換してTeXソースにするのが良さそう。

しかし変換してみると、コード領域などが

```tex
\begin{Shaded}
\begin{Highlighting}[]
\FunctionTok{\{}
  \DataTypeTok{"premiumId"}\FunctionTok{:} \StringTok{"13"}\FunctionTok{,}
  \DataTypeTok{"text"}\FunctionTok{:} \StringTok{""}\FunctionTok{,}
  \DataTypeTok{"context"}\FunctionTok{:} \FunctionTok{\{\}}
\FunctionTok{\}}
\end{Highlighting}
\end{Shaded}
```

などといった未知の環境で生成されている。

セクション周りも

```tex
\hypertarget{chat_trans}{%
\subsubsection{\texorpdfstring{\texttt{/chat\_trans}}{/chat\_trans}}\label{chat_trans}}
```

と非標準コマンドであった。

これらについては、

```sh
pandoc -s ドキュメント作業メモ.md -o DocMemo1.tex
```

としてスタンドアローンモードで出力させると、その辺のコマンドも含んだプリアンブルを出力しているので、それを切り出してpandoc_pre.texなどとしてインクルードファイルにして使いまわせば良さそう。
ただし一件だけ、

```tex
\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
```

がエラーを出していたのでコメントアウトする。

### 作業手順

本文はmarkdownで書いて、pandocで変換する。pandoc変換後の.texのsubsectionをchapterに、subsubsectionをsectionに（適宜）直してゆく。
この辺、手修正が毎回入りそうなので、

```
A.md ->(pandoc)-> A_1.tex ->(copy/edit)-> A.tex
```

と3つファイルが存在するようにしておいて、A.mdを修正->A_1.texを生成->`diff -u A_1.tex A.tex`を見ながらA.texを修正。A.texはmain.tex的なものからインクルードする。

上で作ったpandoc_pre.texで

```tex
\IfFileExists{parskip.sty}{%
\usepackage{parskip}
}{% else
\setlength{\parindent}{0pt}
\setlength{\parskip}{6pt plus 2pt minus 1pt}
}
```

となっていてインデントが殺されているので、まるっと不許可にしておく。

またコメントどおりに

```tex
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\},fontsize=\small}
```

と修正。

フォントは

```tex
\usepackage{newtxtext,newtxmath}
```

を使う（pandoc_preのincludeより前で指定）。


markdownで画像を含めておいてpandoc変換すると

```tex
\begin{figure}
\centering
\includegraphics{figure_1.png}
\caption{構成図1}
\end{figure}
```

となるがこれは texコンパイル時にbounding boxがないのでエラーになる。
コマンドラインで

```sh
/Library/TeX/texbin/extractbb figure_1.png
```

して生成された`figure_1.xbb`を確認すると

```
%%Title: figure_1.png
%%Creator: extractbb 20180217
%%BoundingBox: 0 0 641 394
%%HiResBoundingBox: 0.000000 0.000000 641.000000 394.000000
%%CreationDate: Wed Sep 12 16:50:32 2018
```

となっていて、このHiResBoundingBox の値を

```tex
\includegraphics[bb=0.000000 0.000000 641.000000 394.000000]{figure_1.png}
```

のようにtexソース内に移植する。

## その他 tex の動作を理解

TeXShopからタイプセットボタンでコンパイルできているので何が動いているのかよくわからないが

1. ```/Library/TeX/texbin/``` にもろもろコマンドがあり、
2. どうも```platex```, ```uplatex``` でコンパイル可能で（つまりマクロ pLaTeX を利用している）
3.  ``` env PATH=/Library/TeX/texbin/:${PATH} ptex2pdf -l report1809.tex``` でもコンパイルできる

TeXShop 設定ではタイプセット設定で、デフォルトのスクリプトとして TeX + DVI を選んであり（多分設定プロファイルの (upTeX pTeX2pdf)）、内部設定で TeX+dvipdfmx 云々で LaTeX 用に ptex2pdf -l 云々となっている。LaTeX が選ばれるのはタイプセットのデフォルトコマンドが LaTeX だから？

### VScode 連携

VScode latex-workshopの設定

以下を参考にした。
http://haruka0000.hatenablog.com/entry/2018/07/20/190853

「レシピ」でptex2pdf と言う名前で ptex2pdf というツールを登録する。
「ツール」でこのptex2pdfという名前で、コマンドが ptex2pdf 、引数が云々と登録する。

```json
  "latex-workshop.latex.recipes": [
    {
      "name": "latexmk",
      "tools": [
        "latexmk"
      ]
    },
    {
      "name": "ptex2pdf",
      "tools": [
        "ptex2pdf"
      ]
    },
    {
      "name": "pdflatex -> bibtex -> pdflatex*2",
      "tools": [
        "pdflatex",
        "bibtex",
        "pdflatex",
        "pdflatex"
      ]
    }
  ],
  "latex-workshop.latex.tools": [
    {
      "name": "latexmk",
      "command": "latexmk",
      "args": [
        "-synctex=1",
        "-interaction=nonstopmode",
        "-file-line-error",
        "-pdf",
        "%DOC%"
      ]
    },
    {
      "name": "pdflatex",
      "command": "pdflatex",
      "args": [
        "-synctex=1",
        "-interaction=nonstopmode",
        "-file-line-error",
        "%DOC%"
      ]
    },
    {
      "name": "bibtex",
      "command": "bibtex",
      "args": [
        "%DOCFILE%"
      ]
    },
    {
      "name": "ptex2pdf",
      "command": "ptex2pdf",
      "args": [
        "-l",
        "-ot",
        "-kanji=utf8 -synctex=1",
        "%DOC%"
      ]
    }
  ]
```

設定から
`Latex-workshop › Latex: Recipes`と`Latex-workshop › Latex: Tools`に
`Edit insettings.json`で登録する。

`COMMANDS`の`Build LaTeX projexct`のメニューに`Recipe: ptex2pdf`として登場する。



ただしこの設定で、以下のようにptex2pdf は実行されて .dvi は作成されているっぽいが、 dvipdfmx に失敗している。

```

LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right.

 )
(see the transcript file for additional information)
Output written on report1809.dvi (27 pages, 115240 bytes).
SyncTeX written on report1809.synctex.gz.
Transcript written on report1809.log.
work.dvi -> work.pdf

dvipdfmx:fatal: Could not open specified DVI (or XDV) file: work.dvi

Output file removed.
ptex2pdf processing of /Users/ssuzuki/work.2018/08_adam1/docs/report1809 failed.

```

以下のような shell script を作ってptex2pdfの代わりに実行することで無理やり解決した。

```sh

#!/bin/sh -x

#pwd
#ls
#N=$#
DOC=`basename ${!#}`
ptex2pdf -l -ot -kanji=utf8 -synctex=1 $DOC
```

終了。

### 付記

TeX に upLaTeX を使う場合、 `ptex2pdf` のオプションに `-u` も追加する。

### 付記2

latex-workshop.latex.recipes で latexmk が先だからか、 .texファイル保存時に autobuild が走る時に latexmk を使おうとしてエラーになる（編集画面の波線もこれを利用している？）っぽい。
ptex2pdf を先にしたらエラーにならなくなった。