はじめに:
本資料作成に当たり多くの資料を参考にしました。それらは各章に参考として列挙し、読者の理解を助けるために必要と思うものについては文中でリンクを貼る形式で紹介しました。資料を書かれた皆様方に敬意を称し、心より感謝いたします。
おねがい:
チェックを重ねて投稿しておりますが、さまざまな箇所に誤りや不適切な表現があるかと思います。気づかれた場合や疑問に感じた場合にはご指摘いただけますとありがたい限りです。
対象読者:
TeXをつかうモチベはふつうにあって、インストールは普通にできていて、VSCodeをつかった設定で若干不安がある人
環境:
Windows10 64bit, TeXLive2019, Visual Studio Code(version 1.37.1)
”TeX”と”LaTeX”の ちがい と いみ
参考:https://blog.wtsnjp.com/2016/12/19/tex-and-latex/
TeXとは
TeXは1978年にDonald E. Knuthが発表した組版システムです。組版を行うソフトウェアだけではなく、組版を記述する言語もTeXとよびます。
LaTeXとは
TeXは非常に基本的な命令で文書を組版するため、それを用いて文書を作成するのは難しいものがあります。そこで、より抽象的に文書を書けるようにしたマクロ体系が開発されました。そのマクロこそLaTeXです!!
まとめ
すなわち、
なまえ | いみ |
---|---|
TeX | 処理系、文書を出力する処理系 |
LaTeX | マクロ 、処理系を扱いやすくした命令体系 |
ということになります。 |
TeXとLaTeXの種類
参考:https://texwiki.texjp.org/?TeX#zf0ba6fa
参考:https://blog.wtsnjp.com/2016/12/19/tex-and-latex/
TeXは処理系、LaTeXはマクロということが分かりましたが、それらには種類があります。
処理系であればpTeX, upTeX, XeTeX, pdfTeX, LuaTeXなど、マクロ体系であればLaTeX, pLaTeX, plain TeX, ConTeXt, AMS-TeXなどです。
ただ、文書を作成する立場からすれば結局どれを使えばよいかに興味があると思います。
条件として、
- 日本語圏でよく用いられる
- ある程度情報がある
- これからもサポートされる可能性が高い
ような処理系を選びたいと自分は考えました。
日本語を書くということだし、やっぱりpTeX系統がよさそうです。処理系の変遷はこちらの記事
に書かれていますが、あたらしいe-upTeXがよさそうじゃないでしょうか。
処理系をe-upTeXにするとなると、マクロの方はupLaTeXになるでしょう(upLaTeXはpTeX向けのマクロ体系なので)
補足1 自分の使っている処理系を知るには
自分が現段階でどんな環境でTeXを処理しているか知りたい場合、こちらの記事が参考になります。
pLaTeXとe-upTeXを使えるか確認!!
WindowsTerminalを起動して(コマンドプロンプトやPowerShellでもいいです!)、
uplatex
と打ち込んでみましょう。僕の環境だと、
>>> This is e-upTeX, Version 3.14159265-p3.8.2-u1.25-190131-2.6 (utf8.uptex) (TeX Live 2019/W32TeX) (preloaded format=uplatex)
restricted \write18 enabled.
と返ってきました。
つまり、uplatexを使おうとすれば、普通に要求の環境が利用できることが分かります。
私の環境はインストール時はTeXLive2018で、それをTeXLive2019にアップデートしたものなので、TexLive2019をインストールすれば同様の環境が得られると思います。
TeXがPDFをつくるまで
参考:https://qiita.com/Rumisbern/items/d9de41823aa46d5f05a8
ここでTeXが実際にPDFドキュメントを吐く過程を追ってみましょう。大前提ですが、基本的にTeXはPDFを吐きません。DVIファイルというものを吐き出します(参考:Wikipedia-DVI (ファイルフォーマット))。
このDVIファイルというのは、人が読める形態ではなく、プリンタなどに依存せず文字などの配置をバイナリ形式で記述したものです。
なのでそれらを画像化する処理、つまり、PDFファイルを生成する処理が基本的に必要です。1
このDVIファイルからPDFを生成するソフトウェアがdvipdfmxです。画像をドキュメント内に取り込む場合に\usepackage[dvipdfmx]{graphicx}
と書く場合があると思いますが、この"dvipdfmx"はまさにこのことです。
よって、TeXでPDFを作る過程は(大雑把に言うと)以下のようになります。
- TeX処理系でDVIファイルをつくる
- dvipdfmxでDVIファイルからPDFファイルをつくる
つまり、TeXでPDFを作る場合には毎度TeXでDVI作成、dvipdfmxでPDF作成の手順をとらないといけないことになります。
ですが、それは面倒です。そこで、latexmkというツールを用います。「ツールなんて使わなくても、これくらいいけるぜ」と思う気がしないでもないですが、TeXでは相互参照のために複数回コンパイルをする必要があったりするため、やっぱり手動でコマンドを一つ一つたたくのは面倒です。2
latexmkをつかうもん!!!
参考:https://qiita.com/Rumisbern/items/d9de41823aa46d5f05a8
これでlatexmkを使うマエフリは完璧です。latexmkはそのコマンドの設定ファイルを作っておいて使うのが一般的です。カレントディレクトリかホームディレクトリに".latexmkrc"という名前のファイルを設定ファイルとして置きます。3
#!/usr/bin/env perl
$latex = 'uplatex -halt-on-error -interaction=nonstopmode -file-line-error %B';
$latex_silent = 'uplatex -halt-on-error -interaction=batchmode %B';
$bibtex = 'pbibtex';
$biber = 'biber --bblencoding=utf8 -u -U --output_safechars';
$dvipdf = 'dvipdfmx %B';
$makeindex = 'mendex %O -o %D %S';
$max_repeat = 5;
$pdf_mode = 3;
$pvc_view_file_via_temporary = 0;
では上記の.latexmkrcでうまくPDFが書けるか試してみましょう!!
適当なところに"tst"フォルダを作り、"tst.tex"ファイルと".latexmkrc"ファイルを置きます。(windowsではファイル名が"."から始まるファイルを作りたい場合、ファイル名の末尾にも"."をつけないといけないそうです。つまり、エクスプローラーなどで新しいファイルを作成し、ファイル名を".latexmkrc"にしましょう)。
"tst.tex"には以下のように書きましょう。".latexmkrc"は上に挙げたように書いてください。
\documentclass[uplatex]{jsarticle}
\usepackage{url}
\usepackage{amsmath,amsbsy}
\usepackage{amsthm}
\usepackage{bigints}
\title{TeXのテストです}
\author{ぼく}
\begin{document}
\maketitle
\section{はじめに}
これは\TeX のテストです。
マクスウェル方程式は以下の四つの式である。
\begin{gather}
\vec{\nabla} \cdot \vec{B}(\vec{r}, t)=0
\label{eq:maxwell_1} \\
\vec{\nabla} \cdot \vec{E}(\vec{r}, t)=\frac{\rho}{\epsilon_0}
\label{eq:maxwell_2} \\
\vec{\nabla} \times \vec{E}(\vec{r}, t)=-\frac{\partial \vec{B}(\vec{r},t)}{\partial t} \\
\vec{\nabla} \times \vec{B}(\vec{r}, t)=\mu_0\vec{j}(\vec{r},t)+\epsilon_0\mu_0\frac{\partial}{\partial t}\vec{E}(\vec{r},t)
\label{eq:maxwell_4}
\end{gather}
マクスウェル方程式やばいっすね。
\end{document}
それができたら適当なTerminal(コマンドプロンプトやパワーシェルやら好きなものを使って大丈夫だと思います)でここのディレクトリに移り、
latexmk tst.tex
と打ち込み、Enterです!コマンドラインが流れていき、うまくいけばpdfファイルが生成されているはずです。
以上でlatexmkが無事使えるようになりました!あとは、これをVSCodeからたたけるようにうまーく設定してやればよさそうですね。
VSCodeを利用しよう
参考:https://qiita.com/popunbom/items/7d02fc75ad23b735d28c
参考:https://qiita.com/t_asa/items/97ec9dc336dc827908da
テキストエディタ
藪から棒にテキストエディタの話が出てきましたが、テキストエディタとは文字通りテキストを編集するソフトウェアです。拡張子がなんであれ、テキスト形式のファイル(非バイナリファイル)はテキストが書かれているだけなので、テキストエディタで編集することができます。
たとえば、C言語のプログラムを書いたファイル(ソースファイル)は"main.c"のように拡張子が"c"になっていたりしますが、これも中身は単なるテキストファイルなので、テキストエディタで編集します。そして、そのソースファイルを編集する行為こそプログラミングの基盤となる行為です。つまり、プログラミングは究極的にはテキストエディタをさえあればできます。また、逆にプログラミングをするうえではテキストエディタが非常に大切なのです(参考:3分でわかるエディタ戦争物語 )。
TeXは厳密にいえばプログラミング言語ではないそうですが、コンピュータへ命令を羅列し文書を作成するのでTeXで文書を作ることは非常にプログラミングと似ていると思います。なので、TeXを書くうえでもテキストエディタが重要になってきます。
補足2 IDE(統合開発環境)ってなに
プログラミングを行う場合にテキストエディタではなくIDE(統合開発環境)といったソフトウェアを使う場合があります。
プログラミングは多くの場合、①ソースファイルを書く②コンパイル/リンクする(ソースファイルからコンピュータが直接実行できる形式である実行ファイルを生成すること)③デバッグする(プログラムにまちがいがないか探すこと)の3つを繰り返して行うと思います。
よって、使用するソフトウェアもテキストエディタ、コンパイラ、リンカ、デバッガと複数用意して管理する必要があります。つまり、上の1ステップを行うのに毎回複数のソフトウェアを利用する必要があります。
このような工程を繰り返すのは作ろうとするプログラムの規模が大きくなってくると大変だと思います。そこで、よりユーザが使いやすいように三つを一つにまとめて、プログラミングをしやすいようにしたソフトウェアが開発されました。それが統合開発環境です。
TeXにもそういったツールがいくつか開発されています。こちらを参考にしてください。表中で"LaTeX"と表記されているものがIDEです。
IDEなんて便利なものがあるならそっち使えよとなりますが、テキストエディタをつかうことには利点がいくつかあります。特に今回扱っているVSCodeというテキストエディタを利用することの利点はこちらの記事 の冒頭などにまとまっているかと思います。個人的にはテキストエディタで編集したほうが軽いのかなとか、余計なソフトウェアを入れなくて済むので気分がいいなとか思ったりしますが、まあ検証したわけではないので、好みの問題でもあるかもしれません。
ともかく、本記事ではIDEを使わない手法をとっています。IDEを使うわけではなく、テキストエディタをつかって(つまり上記で言う別々のソフトをバラバラに管理する形態で)TeXの環境を整備しようとしています。IDEを使った環境構築に関する情報とごっちゃにならないよう注意してください。
VSCodeってなあに?
VSCodeは正しくはVisual Studio Codeという名前でMicrosoftが開発しているテキストエディタです。有名なテキストエディタとしてほかにメモ帳などがあると思いますが、VSCodeはプログラミングをすることに非常に特化していると思います。
TeXで文書を作成することもプログラミングとよく似たところがあるので、VSCodeはTeXととても親和性が高いと思います。
べんりな拡張機能
VSCodeは単体でもしっかりしたテキストエディタだと思います。ですが、VSCodeが便利なのは拡張機能が充実している点にあると思います。たとえば、"Haskell"という言語でプログラミングをしたい!となったとしても、Haskell専用の拡張機能をVSCodeに入れれば、VSCodeでHaskellの文法に従ってSyntax Highlighting(プログラムを色付けして見やすくする機能)をしたり、予測入力したりすることができます。
拡張機能のインストールがとっても簡単にできるところもVSCodeのいいところです。インストールの手順の詳しい解説はほかの記事を参照してほしいですが(次節で参考記事を紹介)、やってみるととっても簡単にインストールできることが分かります。
いろいろインストール
当然ですがまずはVSCodeをインストールします(インストール方法は”VSCode インストール”などでググるといい記事があるかと思います)。続いてTeX用の拡張機能を入れますが、こちらの記事を参考にLaTeX Workshopをインストールします。これで、”基本的”な設定は完了です。
いろいろ設定しよう
VSCodeは拡張機能を含めさまざまな機能をユーザの希望に沿って設定できるところもいいところだと感じています。VSCodeの設定をする方法は設定画面からぽちぽちボタンやチェックボックスをいじる方法と、"settings.json"というファイルに設定を書き込む方法とあります。後者の方が詳しく設定できるようなので、ここではそちらの手法をとります。
settings.jsonファイル
参考:https://code.visualstudio.com/docs/getstarted/settings
参考:https://prius.cc/itya/20181218_vscode-workspace
settings.jsonファイルはVSCodeの設定を記述すファイルで、二種類あります。User設定を行うファイルとWorkspace設定を行うファイルです。
User設定のsettings.json
これはVSCodeがインストールされたPCユーザーごとに設定をおこなうためのもので、windowsの場合、%APPDATA%\Code\User\settings.json
にあります。このsettings.jsonファイルに設定を書き込むと、そのPCでVSCodeを利用した場合にはその設定がVSCodeの基本設定として適用されるようになります。
ワークスペース設定のsettings.json
これは編集するワークスペースごとに設定を行うためのものです。ワークスペースはプロジェクトの概念のようなものです。
例えば、物理の実験レポートを書く場合には、TeXのファイルだけでなく、実験結果を表すグラフの画像や実験装置のグラフを表す画像など、複数のファイルが必要となると思います。そのとき、それらファイルを一つの”物理実験レポートフォルダ”のようなフォルダに格納しておくと思います。このフォルダこそがまさしくワークスペースに相当します4。
ワークスペースがひとつのフォルダの場合、そのフォルダに".vscode"フォルダをつくり、その中でsettings.jsonファイルを置くことで、ここに設定を書き込めます。
User設定としてTeX用の設定をしてもよいですが、とりあえずの間はWorkspace設定として設定をすればよいかと思います。Workspace設定であればTeXに関する設定だけ(つまり拡張機能であるLaTeX-Workshopの設定のみ)を記述すればよいので、おかしな設定をしてほかの設定を変えてしまうのではないかという心理的負担もないですし、VSCodeを使うようになってから設定を少し変えたいなと思っても簡単に変えることができるでしょう。なので、Workspace設定で書いていきます。
settings.jsonの書き方
設定はJSON形式で書き込みます。JSON形式というのは、構造を持ったデータを記述する形式で、JSON形式自体の詳しい解説はググってみてください。
基本的にはLaTeX-Workshopを開発している方のドキュメントを参考に、JSON形式で設定を書き込んでいくことになります。
設定は各々好みがあると思いますし、ここでそれらをすべて紹介すると記事の内容が複雑化しますし、settings.jsonに書き込んだ内容のどの部分が肝心の設定かなどが分かりにくいとも思います。そこで、ここでは最低限VSCodeでTeXを書きPDFを出力するのに必要な設定を書こうと思います。
PDFを出力するのに必要な設定は以下のようになるかと思います。※このsettings.jsonファイルは本記事中で紹介する".latexmkrc"ファイルと併用して正しく動作します。
{
"latex-workshop.latex.recipes":[{
"name": "uplatex",
"tools" : [
"latexmk"
]
}],
"latex-workshop.latex.tools": [{
"name": "latexmk",
"command": "latexmk",
"args" : [
]
}],
"latex-workshop.view.pdf.viewer":"tab"
}
上に挙げた例では、"latex-workshop.latex.recipes"という項目と、"latex-workshop.latex.tools"という項目と、"latex-workshop.view.pdf.viewer"という項目を設定しています。それぞれ詳しく見ていきます。
レシピ
ここでは"latex-workshop.latex.recipes"で設定した内容を説明します。LaTeX-Workshopには「レシピ」という概念があります。僕もはっきりとわかっているわけではありませんが、これはTeXでPDFを出力する際に使ういくつかのコマンドを、目的に合わせてどのように組み合わせるかを記述したものです。
たとえば、upLaTexとpLaTexの両方を使いたいとすると、TeX処理系でDVIファイルを作る処理はそれぞれで異なり、叩くべきコマンドも異なりますが、最後のdvipdfmxでPDFを出力する工程では、どちらの処理系を用いていてもdvipdfmxを使うことになるので、結局同じ処理をします。
そこでupLaTexを使う場合とpLaTexを使う場合とでレシピを二つ用意しておきます。レシピ内では、前者にはupLaTexを使いDVIファイルを作ったあとdvipdfmxでPDFファイルを作るといったことを、後者にはpLaTexを使いDVIファイルを作ったあと最後にdvipdfmxでPDFファイルを作るといったことを書いておきます。これにより、どちらの方法でもVSCodeから簡単に処理が行えるようになります。
ただ、本記事ではuplatexをlatexmkで使う場合しか考えていないので、レシピは一つしかありません。レシピ内では、おなじくsettings.jsonファイル内で設定し定義した(後述)、"latexmkツール"のみを使うようになっています。
ツール
ここでは"latex-workshop.latex.tools"で設定した内容を説明します。LaTeX-Workshopには「ツール」という概念があります。これは、レシピで処理を書く場合に用いられる、ユーザーによって定義された処理のかたまりのようなものです。
今回はツールとして一つのみを設定しました。上の例だと下の部分です。
{
"name": "latexmk",
"command": "latexmk",
"args" : [
]
}
これは、このツールの名前(name)を"latexmk", このツールを使う場合に実際に叩くコマンド(command)を"latexmk"と設定しています。"args"はこのツールを使う場合にコマンドと合わせて入れる引き数のことで、今回は何も設定していません。
つまり、レシピ内で"latexmk"と記述されるツールの中身は、コンソールでただ
latexmk
と打つだけであるとわかります。
latex-workshop.view.pdf.viewer
最後のこの項目は、VSCode上でPDFファイルを表示しようとした場合にどのような挙動をするかを設定しています。今回は"tab"にしたのでCtrl+Alt+Vを押すと、新しいタブがVSCode上で現れ、PDFファイルがプレビューされます。他にもさまざまな設定がありますが、それは上でも紹介した公式ドキュメントのここを見てください。
この項目は必ず設定しなければならないというわけではないと思います。どのようにVSCode上でプレビューするかを設定していなくても、VSCode上でTeXをただ書き、処理系でPDFをただ出力することはできますもんね。ですが、TeXを書くうえでプレビューがあることは重要であろうと思ったので、ここでは必要最低限の設定に含めることにしました。
じゅんび
テスト用のフォルダをつくり、そこで設定やTeXファイルを書いていきましょう。以下のようなフォルダおよびファイルをつくりました。
tst
├── .latexmkrc
├── tst.tex
└─.vscode
└── settings.json
tstフォルダに".vscode"という名前のフォルダと"tst.tex", ".latexmkrc"という二つのファイルが、さらに".vscode"フォルダには"settings.json"というファイルがあります。上のようなファイル・フォルダ構成にしてください。それぞれはここまでの説明を踏まえ以下のように書きましょう(すべてここまでで紹介済みのファイルですが再掲)。
\documentclass[uplatex]{jsarticle}
\usepackage{url}
\usepackage{amsmath,amsbsy}
\usepackage{amsthm}
\usepackage{bigints}
\title{TeXのテストです}
\author{ぼく}
\begin{document}
\maketitle
\section{はじめに}
これは\TeX のテストです。
マクスウェル方程式は以下の四つの式である。
\begin{gather}
\vec{\nabla} \cdot \vec{B}(\vec{r}, t)=0
\label{eq:maxwell_1} \\
\vec{\nabla} \cdot \vec{E}(\vec{r}, t)=\frac{\rho}{\epsilon_0}
\label{eq:maxwell_2} \\
\vec{\nabla} \times \vec{E}(\vec{r}, t)=-\frac{\partial \vec{B}(\vec{r},t)}{\partial t} \\
\vec{\nabla} \times \vec{B}(\vec{r}, t)=\mu_0\vec{j}(\vec{r},t)+\epsilon_0\mu_0\frac{\partial}{\partial t}\vec{E}(\vec{r},t)
\label{eq:maxwell_4}
\end{gather}
マクスウェル方程式やばいっすね。
\end{document}
#!/usr/bin/env perl
$latex = 'uplatex -halt-on-error -interaction=nonstopmode -file-line-error %B';
$latex_silent = 'uplatex -halt-on-error -interaction=batchmode %B';
$bibtex = 'pbibtex';
$biber = 'biber --bblencoding=utf8 -u -U --output_safechars';
$dvipdf = 'dvipdfmx %B';
$makeindex = 'mendex %O -o %D %S';
$max_repeat = 5;
$pdf_mode = 3;
$pvc_view_file_via_temporary = 0;
{
"latex-workshop.latex.recipes":[{
"name": "uplatex",
"tools" : [
"latexmk"
]
}],
"latex-workshop.latex.tools": [{
"name": "latexmk",
"command": "latexmk",
"args" : [
]
}],
"latex-workshop.view.pdf.viewer":"tab"
}
以上の内容をVSCodeで開き書き込みましょう(VSCode以外のエディタで書きこんでもいいですが、VSCodeでの環境構築なのでVSCodeを使いましょう)。
※手元の環境で試したところ、settings.jsonに書き込んだ内容は次回の起動時から有効になるようです。なので、settings.jsonに変更を加えた後は一度VSCodeを終了して再度、tstフォルダを開いて以下の内容を読み進めてください。
PDFをつくってみる
書き込んだ上で、VSCode上で"tst.tex"ファイルを開き、"Ctrl + Alt + b"を押しましょう。VSCode下部のコマンドラインが流れていき、TeXの処理が完了します。正しく処理されていれば、"tst.pdf"というファイルが"tst.tex"と同一のフォルダに出力されるはずです。うまくpdfが出力されない場合は間違ってるところがないか確認してください。PDFを出力出来たら、"Ctrl + Alt + v"を押しましょう。VSCode上に新しいタブができ(右側にもう一つ目のウィンドウがでてくる)、PDFファイルが表示されると思います。
調整
TeXやlatexmkに使い慣れていたりしてお好みの設定がある場合には、.latexmkrcをいじって好みの設定にしましょう。VSCodeのTeXに関する挙動で気に食わないところがあれば、settings.jsonファイルを修正しましょう。settings.jsonファイルはLaTeX Workshopのページをみることでいろいろ設定できることが分かると思います。
おわりに――VSCodeで書きまくろう――
VSCodeは無料ですし、TeXを書くうえで便利な機能がいろいろ揃っていると思います。機能が多くすべてを把握するのは難しいとは思いますが、それらをなるべく理解して使いこなすことで快適なTeXライフを送っていきたいですね!
-
latexmkってmakeみたいな便利な機能なんですね! ↩
-
makeでいうところのMakeFileってかんじですかね!
.latexmkrcはPerlの文法で書くようです。とはいえ、(見た限り)いくつかの変数に適切な値を代入する程度だと思うので、あまり複雑ではないでしょう。.latexmkrcを具体的にどのように書くかや、その詳しい意味などについては、こちらをご覧ください。
ではWindowsの、目的のTeX処理系にあわせた.latexmkrcはどうなるか、ですが、ざっと下のような感じになると思います。(以下の内容はこちらとこちらを基に作成しました)。 ↩ -
ワークスペースはここで紹介したようにプロジェクトのrootディレクトだけでなく、複数のフォルダの混合物としてVSCodeの機能を利用して定義することもできます。詳しくはこちらを。 ↩