TeX と VS Code で遊んでみよう

## 背景
[Railsチュートリアル](https://railstutorial.jp/)の本文は TeX で書かれていて、[softcover](https://github.com/softcover/softcover) という組版ツールを使って TeX ファイルから EPUB/PDF/HTML ファイルをそれぞれ生成しています。[^1]

[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1857/e580c61e-6c85-1558-19ea-2a22a4b93e5b.png)](https://speakerdeck.com/yasulab/continuous-integration-for-ebook?slide=39)

TeX とは何か？ どういうことができるのか、まず手元の環境で試してみたかったのでやってみました 🎶

## 環境を整える
### 前提条件
- Mac を使用
- VS Code はインストール済み
- brew インストール済み

参考サイト: [TEX Wiki - Visual Studio Code / LaTeX](https://texwiki.texjp.org/?Visual%20Studio%20Code%2FLaTeX#n2442e05)

### 1. LaTeX をインストールする

⚠️ とても時間がかかります...

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

ターミナル上で次のコマンドが使えることを確認

```:console
$ latex
$ uplatex
$ xelatex
$ latexmk
```

### 2. ビルドの設定用ファイルを作成
ホームディレクトリに `.latexmkrc` ファイルを作成し、以下を書きます。

``` :.latexmkrc
if ($^O eq 'darwin') {
    $pvc_view_file_via_temporary = 0;
    $pdf_previewer               = 'open -ga /Applications/Skim.app';
 } else {
    $pdf_previewer               = 'xdg-open';
 }
```

一時ファイルの作成を抑止し、PDF ビュアーを Skim.app (macOS で推奨) に設定、なければ xdg-open (Linux 用)で開く設定。

### 3. VS Code に LaTeX Workshop をインストール
拡張機能検索 (⌘ shift  x) から「LaTeX Workshop」をインストールします。

[![Image from Gyazo](https://i.gyazo.com/3c81d45135ddfa1caa05d0662d68f9fb.png)](https://gyazo.com/3c81d45135ddfa1caa05d0662d68f9fb)

### 4. 日本語文書用に settings.json を設定
コマンドパレット (⌘ shift p) から、`Settings (JSON)`を開く。

[![Image from Gyazo](https://i.gyazo.com/7a243a9eb3f62e4f366cf41b6d517b49.png)](https://gyazo.com/7a243a9eb3f62e4f366cf41b6d517b49)

( Default の方は読み込み専門で変更できないので選択しない。)

以下を追加します。

```:settings.json

"latex-workshop.latex.tools": [
  // Latexmk-upLaTeX を使用する場合
  {
	  "name": "latexmk",
	  "command": "latexmk",
	  "args": [
	   "-e",
	   "$latex=q/uplatex %O -synctex=1 -interaction=nonstopmode -file-line-error %S/",
	   "-e",
	   "$bibtex=q/upbibtex %O %B/",
	   "-e",
	   "$biber=q/biber %O --bblencoding=utf8 -u -U --output_safechars %B/",
	   "-e",
	   "$makeindex=q/upmendex %O -o %D %S/",
	   "-e",
	   "$dvipdf=q/dvipdfmx %O -o %D %S/",
	   "-norc",
	   "-pdfdvi",
	   "%DOC%"
	  ]
    }
  // Latexmk-LuaLaTeX を使用する場合
  {
	  "name": "latexmk",
  	  "command": "latexmk",
	  "args": [
	   "-e",
	   "$lualatex=q/lualatex %O -synctex=1 -interaction=nonstopmode -file-line-error %S/",
  	 "-e",
	   "$bibtex=q/upbibtex %O %B/",
	   "-e",
	   "$biber=q/biber %O --bblencoding=utf8 -u -U --output_safechars %B/",
	   "-e",
	   "$makeindex=q/upmendex %O -o %D %S/",
	   "-norc",
	   "-pdflua",
	   "%DOC%"
       ]
   }
],

// 今開いているエディタを左右に分割し、右側に生成されたPDFを表示
"latex-workshop.view.pdf.viewer": "tab",

// .tex ファイルの保存と同時に自動的にビルドを実行しない
"latex-workshop.latex.autoBuild.run": "never",
```

## TeX ファイルを作成・表示する
参考: [LaTeX入門 / レポート](https://texwiki.texjp.org/?LaTeX%E5%85%A5%E9%96%80%2F%E3%83%AC%E3%83%9D%E3%83%BC%E3%83%88)

以下のサンプルファイルを変更しながらタグの意味を理解していきました。

```sample.tex
\documentclass{jsarticle}
\begin{document}

\title{タイトル}
\author{作者}
\maketitle

\section{はじめに}

この文書は，ごく基本的なレポートや論文の例を示すものです。
実際にこのソースを入力してタイプセット（コンパイル）し，
タイトル，著者名，本文，見出し，箇条書きがどのように表示されるかを
確認してみましょう。

\section{見出し}

この文書の先頭にはタイトル，著者名，日付が出力されています。
特定の日付を指定することもできます。

そして，セクションの見出しが出力されています。
セクションの番号は自動的に付きます。

\section{箇条書き}

以下は箇条書きの例です。これは番号を振らない箇条書きです。

\begin{itemize}
  \item ちゃお
  \item りぼん
  \item なかよし
\end{itemize}

これは番号を振る箇条書きです。

\begin{enumerate}
  \item 富士
  \item 鷹
  \item なすび
\end{enumerate}

\section{おわりに}

これは一段組の例ですが，二段組に変更することもできます。

解説文を読んで，このソースをいろいろと変更してみましょう。

\end{document}
```

ファイルを作成したら、サイドバーの「TEX」からビルドします。

[![Image from Gyazo](https://i.gyazo.com/d1cd778a4745ebfbb7158c1d363af1d9.png)](https://gyazo.com/d1cd778a4745ebfbb7158c1d363af1d9)

[![Image from Gyazo](https://i.gyazo.com/d176d1ab54bec2ded8a86336ab20e4e4.png)](https://gyazo.com/d176d1ab54bec2ded8a86336ab20e4e4)

このとき`! Class jsarticle Error: You are running upLaTeX.` というエラーが出たので、[こちら] (https://texwiki.texjp.org/?%E3%82%88%E3%81%8F%E3%81%82%E3%82%8B%E8%B3%AA%E5%95%8F#p2c0bcc3)を参考に一番最初の行を`\documentclass[uplatex]{jsarticle}`としたら、直りました。

ビルドが出来たら、ファイル右上の虫眼鏡マークで PDF 表示することができます😊

[![Image from Gyazo](https://i.gyazo.com/de7873f10f998c39b6ada013fd82ee69.png)](https://gyazo.com/de7873f10f998c39b6ada013fd82ee69)

[![Image from Gyazo](https://i.gyazo.com/6292222f15416df2144aa2e0703ac4d2.png)](https://gyazo.com/6292222f15416df2144aa2e0703ac4d2)


[LaTeX - コマンド一覧](http://www1.kiy.jp/~yoka/LaTeX/latex.html) などを見て、色々試して遊んでみてください 🎶

HTML 上で CSS を付ける場合は、[TeXコマンドとHTMLタグの比較](http://www.ne.jp/asahi/hishidama/home/tech/tex/texhtml.html) も参考になります。

### 応用
- TeX に直接 CSS を当てることができる
[longfbox package](http://mirrors.ibiblio.org/CTAN/macros/latex/contrib/longfbox/longfbox.pdf)
- TeX に Font Awesome アイコンを入れられる [fontawesome package](http://mirror.neu.edu.cn/CTAN/fonts/fontawesome/doc/fontawesome.pdf)

[^1]: ちなみに[Railsガイド](https://railsguides.jp/)の電子書籍化では、[技術書典](https://techbookfest.org/)などでも広く使われている [Re:VIEW](https://github.com/kmuto/review) が使われています。Railsチュートリアルは英語版が [softcover + Tex](http://manual.softcover.io/) で書かれているため、なるべく原著の組版環境に合わせています。