Help us understand the problem. What is going on with this article?

LaTeX Workshopってなに?どうやって使うの?調べてみた!

東京大学航空宇宙工学科/専攻 Advent Calendar 2019

この記事は、東京大学航空宇宙工学科/専攻 Advent Calendar 2019の3日目の記事です。一日前に先輩のレベルの高い環境構築の話が来たあとにこんな低レベルなTeX導入の記事が来て申し訳ないです。こんなしょうもない記事よりももっと面白い記事先輩方や同期、後輩の記事が載っているので、是非毎日読んでいってみてください。

LaTexをVScodeで使う

LaTeXと言えば、レポートで綺麗な数式を書きたいときや、良い感じのデザインのレポートを作りたい時などにいつも使われている大助かりの文章作成ツールですね。航空宇宙は卒論の締め切りが早いようですが、他の学科等では現在進行形でTeXを叩いているという方もいらっしゃるのではないでしょうか。そんなTeXですが、夏休みにVScodeの拡張機能を導入しようとしたときにすこしハマったことがあるのと、ちょっとアドベントカレンダーに参加してみたい気持ちもあってここで記事を書こうと思いました。なお、僕はWindowsしか使ったことが無いので、この記事はWindows向けです。Macにも使えるところはあるかもしれませんが、その点はご了承ください。前置きですが、なお、題名からわかる通り、僕自身TeXの超初心者で、記事はTeXを使い始めたばっかりとか、TeXworksに不満があるとか、いつもVScodeを使っているのでTeXも書けるようにしたいとか、TeXって何?右も左もナンモワカランという方向けの環境構築の内容になっています。いつもTeXで文章を書いているという人にはかなりつまらない内容になっていると思うので、そこのあたりはすみません。記事に間違っている内容がありましたら、優しくマサカリを投げて頂けると幸いです。

LaTeX Workshopとは

LaTex WorkshopとはVScodeでTeXファイルの編集からコンパイル、実行まで全て出来るようにしてあるとてもすごい拡張機能です。ここではそのすごい例を一部をご紹介します。。

補足機能

a.gif
予測変換を出してくれます。1年生の時とか何も知らなくていちいち\frac{}{}とか\left(\right)とかやっていたのでこれを初めて見た時にはかなり感動しました。

マウスオーバー

スクリーンショット (19).png
TeXと言えばいちいち数式をコンパイルしないと中身が見れないのが難点で、しかもエラーがわかりにくい!と思っていましたが、マウスオーバーすれば、自分が打った数式が正しいのかどうかがわかります。しかも間違っているときにはそもそも表示されないので、何かがおかしいとわかります。相変わらず何が間違っているかはわかりませんが
もちろんこのマウスオーバーは図や\refに対しても使えます。
スクリーンショット (21).png

Snippets

b.gif
そういえばあの文字TeXでどうやって打つんだっけ...ググろ...みたいな時あると思いますが、LaTex Workshopなら調べなくてもSnippetsをポチるだけで貼ってくれます。
こんな感じでまぁ色々とめっちゃ便利です。

TeXをインストールする

というわけでまずはTeXの導入からですが、ここはただインストールするだけです。このあたりを参考にするとよいと思います。
はじめてTeXを使う人が知っておくといいことまとめ
TeX Wiki TeX入手法
一応自分も色々あってTeXの再インストールをする羽目になったのでWindowsの簡単な流れだけ説明します。
ここにいってtexlive2019.isoをダウンロードします。3.3GBもあるのでそこそこかかります。終わったら、isoをダブルクリックして、中に入って、install-tl-windows.batを管理者として実行すると

が出てきます。全てのパッケージをインストールすると容量が多く時間もかかるので、要らないものは外してしまいましょう。高度な設定>追加コレクションの数:カスタマイズと開いて、

  • 左側の言語欄
    • 日中韓(base)、日本語、英語・米語、以外のすべての言語
  • 右側
    • ゲーム組版
    • 人文科学パッケージ(理系の人は)
    • 音楽パッケージ

とチェックを外してOKを押して、インストールを押すとインストールが始まります。かなり長いので辛抱強く待ちましょう。(僕は1時間かかりました。)
コマンドプロンプトなどから、latex --versionなどと入れて、pdfTeX 3.14159265...と出てきたら完了です。

VSCodeを入れる

Visual Studio Code – コード エディター | Microsoft Azureからダウンロードしてインストールするだけです。僕はTeX以外にも任意のプログラムをVSCodeで書いています。(と言ってもそんな量は全く書いてないのですが...

LaTex Workshopを入れる

VSCodeを入れ終わったら、左端の一番下になんか積み木みたいなマークがあるので、そこをクリックして、"LaTeX Workshop"と入れて検索すると一番上に出てくると思います。それを選んでインストールするだけです。

LaTeX Workshopの設定をする

ただ拡張機能を入れただけでもそのままでは使えません。自分がコンパイルしたいTeXの種類に合わせてきちんと設定してあげることが出来ます。実はLaTeX Workshopは2017 ~ 2018の間に大きなアップデートをした様で、こちら(VScodeで快適LaTeX環境を構築する方法)で書かれている方法を使うことは出来ません...。toolchainはもう今は存在しないようです。というのをこちら(VSCodeでTeXがいじれなくなった)を読んで初めてわかりました。まぁQiitaを読まずに、初めから公式(James-Yu/LaTeX-Workshop)や、TeX Wikiを読め、という話ではあるのですが。まぁハマった原因の一つとして、設定が一体何を設定しているのかわからない(もしかして僕だけ?)、というのがあったので、ここでは一つ一つ説明書きを書いていこうと思います。まずは、Ctrl + Shift + Pか、表示 > コマンドパレットでコマンドパレットを開いて、基本設定: 設定(JSON)を開くから、settings.json の一番下に以下を追記してください。(データがjson形式なので、元々の最終行に ,がついていない場合は、つけて改行してから、コピペして貼ってください。)

settings.json
//LaTeX
    "latex-workshop.latex.recipes": [
        {
            "name": "lualatex",
            "tools": [
                "lualatex",
            ]
        },
        {
            "name": "lualatex twice compile",
            "tools": [
                "lualatex",
                "lualatex",
            ]
        },
    ],
    "latex-workshop.latex.tools": [
        {
            "name": "lualatex",
            "command": "lualatex",
                "args": [
                        "--cmdx",
                        "-file-line-error",
                        "-synctex=1",
                        "-interaction=nonstopmode", 
                        "-halt-on-error",
                        "%DOC%",
            ],
        },
    ],
    "latex-workshop.latex.autoClean.run": "onBuilt",
    "latex-workshop.latex.autoBuild.run": "onFileChange",
    "latex-workshop.latex.autoBuild.interval": 0,
    "latex-workshop.view.pdf.viewer": "tab",

まず、"latex-workshop.latex.tools"というところを見てください。"name", "command","args"とありますね。.texをコンパイルするときにはコマンドプロンプト(以下cmd)からlualatex sample.texとすればコンパイルすることは出来ます。ここでlualatexとしているところがtoolscommandに当たります。そして、"args"となっているところがコマンドを実行するときのオプションに当たります。それぞれのコマンドの意味などは、TeX の実行あれこれを参照するとよいでしょう。どうやら"--cmdx"をつけておくとtexファイルが入っているフォルダ名が日本語でも問題無くなるようです。(外すとコンパイル出来なくなりました。このオプションはlatexmkでは使えないようです。)そして、recipes"name"とはVScodeでBuild LaTeX Projectからコンパイル方法を選択する時に表示される名前です。これが選択されると、下のrecipes内の"tools"で指定されているtoolのうち、"latex-workshop.latex.tools"での"name"が一致しているコマンドが呼び出され、"args"に従って実行されていきます。目次を貼ったり、\label\refなど2回コンパイルする必要がある場合には、"luatex twice compile"の様に、lualatexを2回呼び出せばよいです。(latexmkを使え。僕はほとんど1回のコンパイルで済むようなものしか書いていない、かつ、TeXが入っているフォルダ名が日本語なのでlatexmkは使っていません。)latexmkを使いたいときには下の様にすればよいと思います。

settings.json
    "latex-workshop.latex.recipes": [
       {
                "name": "Latexmk(lualatex)",
                "tools": [
                    "Latexmk(lualatex)",
                ]
            },
    ],
    "latex-workshop.latex.tools": [
        {
                "name": "Latexmk(lualatex)",
                "command": "latexmk",
                "args": [
                    "-lualatex", 
                    "-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",
                    "-gg",
                    "-pdflua",
                    "%DOC%"
                ],
            },
    ],

一番下の"autoClean.run"の意味は.aux.logなどの生成物を削除するかどうか。("onBuilt"で、コンパイルの成否に関わらず消去します。)"autoBuild.run"で、"onFileChange"を選んでおくと保存時に勝手にコンパイルが走るようになります。などを指定します。ここら辺は公式のwiki James-Yu/LaTeX-Workshopでかなりしっかり書いてあるので、そちらを参照してあげるとよいでしょう。
また、巷の色んなところでLuaTeXが推奨されているので、ここではLuaTexを使う様に設定してますが、他のTeXエンジン、例えばpTeXを使っている、と言った方は、lualatexと書かれている場所の上で左クリックして全ての出現箇所を変更を選択してlualatexとなっているところを全てplatexと書き換えてあげればよいと思います。
それでは最後に実際にコンパイルしてみましょう。

sample.tex
\documentclass{ltjsarticle}
\usepackage{luatexja}
\begin{document}
\section{はじめてのLua\TeX-ja}
ちゃんと日本語が出るかな?
\subsection{出たかな?}
長い文章を入力するとちゃんと右端のところで折り返されるかな?
大丈夫そうな気がするけど.ちょっと不安だけど何事も挑戦だよね.
\end{document}

を入れて、Ctrl+Sで自動でコンパイルが始まり、PDFが生成されれば成功です!環境構築お疲れ様でした。失敗した!コンパイルが終わらない!などの場合には、ターミナル→出力から右下のデフォルトでタスクとなっているところからLaTeX Compilerを選べばエラーメッセージが読めるので根気よく対処しましょう...。ごめんなさい...。出来たPDFは左端でTEXと表示されているところをクリックして、View LaTeX PDFからView in VSCode tabを選択すれば隣に並びます。また、隣に並べながらTeXが書けます。TeXworksの様にコンパイル時にいちいち消去する必要もありません。ちなみにCtrl + Sで実行されるコンパイルは、"latex-workshop.latex.recipes"で一番上に書いたrecipeが採用されます。

フォントを変える

デフォルトのLaTeXのフォントの書体は細めで、印刷するとかすれてしまうこともあります。また、LuaTeXは、他のTeXに比べてフォントを変更するのがかなり簡単なのも特徴(らしい)です。ここでは、AdobeとGoogleが共通で開発し、公開している「源ノ角ゴシック(Source Han Sans)」と、「源ノ明朝(Source Han Serif)」にフォントを変更してみましょう。なお、以下の記事はOSがWindowsであることが前提ですが、コマンドなどはMacやLinuxにも通じるところがあるとは思います。

フォントのインストール

公式が出しているLuaTeX-ja パッケージの拡張パッケージ、luatexja-presetを見ると、sourcehan-jpを使うためには、Source Han Sans JPをインストールすれば良いようです。というわけでインストールしに行きます。
adobe-fonts/source-han-sans
adobe-fonts/source-han-serif
それぞれSansがゴシック体、Serifが明朝体にあたります。上のリンクを踏んでから少し下に行くと、Latest releaseがあるのでそこを踏んで、一番下に行くとRegion-specific Subset OTFsがあって、Japan(日本)となっているところをクリックするとフォントがダウンロードできます。それぞれ解凍して、
C:\texlive\texmf-local\fonts\opentype\SourceHanSansJP
C:\texlive\texmf-local\fonts\opentype\SourceHanSerifJP
の様に配置します。(C:\texlive\texmf-local\fonts\opentypeまでは決まっていますが、それ以下のフォルダ名は必ずしもこれである必要は無いようです。)
そこから、検索窓にcmdと入れてから、管理者権限としてコマンドプロンプトを実行して、(MacやLinuxの場合ここでsudoを付ければ良い?)
fc-cache -vfr mktexlsr luaotfload-tool --updateと3つのコマンドを実行しましょう。
終わったら、kpsewhichか、luaotfload-tool --fuzzy --find="フォント名"でインストールされたか確認できると良いです。
(ちなみに管理者権限でなくても出来る時もありますが、出来ない時もあります。出来ない時は、Cannot open C:\texlive ~のようなメッセージが出ると思うので、\texmf-local,\texmf-config,\texmf-var, \texmf-dist以下にそれぞれ存在するls-Rというファイルのセキュリティを全ユーザーに対してフルコントロールにしてからもう一度mktexlsrすれば直ると思います。)

cmd.exe
C:\WINDOWS\system32>kpsewhich SourceHanSerifJP-Regular.otf
c:/texlive/texmf-local/fonts/opentype/SourceHanSerifJP/SourceHanSerifJP-Regular.otf

C:\WINDOWS\system32>luaotfload-tool --fuzzy --find="sourcehanserifjp"
luaotfload | resolve : Font "sourcehanserifjp" found!
luaotfload | resolve : Resolved file name "c:/texlive/texmf-local/fonts/opentype/SourceHanSerifJP/SourceHanSerifJP-Regular.otf"

フォントを変える

あとは、実際に文章をコンパイルしてみるだけです。\usepackage{luatexja-preset}からsourcehan-jpを選択して、

sample.tex
\documentclass[a4paper,11pt]{ltjsarticle}
\usepackage[sourcehan-jp,deluxe]{luatexja-preset}
\begin{document}
\noindent
「ふくちゃん、あのね」\\
「自分に自信があるときは、期待なんて言葉を出しちゃあいけない」
\end{document}

キャプチャ3.PNG
(米澤穂信著「クドリャフカの順番」より引用)

上がデフォルト、下が源ノフォント。実際にフォントが少し太めになったのがわかりますね。僕の家のプリンターだとこれだけで文字が全然かすまなくなったので、これはかなり大きな違いでした。
なお、presetに付いている細かいオプションの意味は上の公式のPDFを見ると良いようです。
また、フォントの導入には以下の記事が参考になりました。
源ノ角ゴシック/源ノ明朝フォント・Noto フォントを活用する
TeX 日本語環境で「源ノ」フォントを使ってみた
源ノ明朝/源ノ角ゴシックをLuaLaTeXで使用する (Windows)
(以下余談)
上のPDFを見ればわかると思いますが、これ以外にもsourcehan、noto-otc、noto-otfなど複数のフォントを入れるコマンドと、それに対応するフォントがあります。しかし、僕はこのsoucehan-jpしか上手くいきませんでした。luaotfload-tool --findだとfindなのにいざコンパイルすると! Package fontspec Error: The font "ふぉんと" cannot be found.ってでるんですよね、意味わからん...これで2,3日溶かした...。

2020/7/30 追記
これですが、totochanさんからコメントで指摘を頂けましたが、自分が入れられたフォント名とtexlive\2020\texmf-dist\tex\luatex\luatexja\addons\luatexja-preset.styを確認する必要がありそうです。totochanさんありがとうございます。
SourceHanの場合、Region-specific Subset OTFsから落としたフォントのファミリー名を確認すると、Source Han Sans(Serif) JPとなっているので、この場合luatexja-preset.styで、

luatexja-preset.sty
\ltjpreset_declare_preset:nx{sourcehan}{
    mc-m =  Source~Han~Serif~Regular,
    mc-b =  Source~Han~Serif~Bold,
    gt-d =  Source~Han~Sans~Regular,
    gt-b =  Source~Han~Sans~Bold,
    gt-u =  Source~Han~Sans~Medium,
    gt-eb = Source~Han~Sans~Heavy,
    mg-m =  Source~Han~Sans~Heavy,
    mc-l =  Source~Han~Serif~Light,
    __custom = false, __office = false, __noembed = false,
}
\ltjpreset_declare_preset:nx{sourcehan-jp}{
    mc-m =  Source~Han~Serif~JP~Regular,
    mc-b =  Source~Han~Serif~JP~Bold,
    gt-d =  Source~Han~Sans~JP~Regular,
    gt-b =  Source~Han~Sans~JP~Bold,
    gt-u =  Source~Han~Sans~JP~Medium,
    gt-eb = Source~Han~Sans~JP~Heavy,
    mg-m =  Source~Han~Sans~JP~Heavy,
    mc-l =  Source~Han~Serif~JP~Light,
    __custom = false, __office = false, __noembed = false,
}

となっているので、latexja-presetではsourcehan-jpを指定します。一方で、Language-specific OTFsから落とした場合、JPが付いていないので、フォントでは、sourcehanを指定するとよいでしょう。ただ、JPがついていない場合、原因はわかりませんがsourcehan-jpに比べてフォントの容量が4倍ほど多く、僕の環境ではメモリー不足で以下のようなエラーを吐いて止まってしまいました。

LatexCompiler
...xmf-dist/tex/luatex/luaotfload/fontloader-basics-gen.lua:362: not enough memory for buffer allocation.
<to be read again> 
\scan_stop: 
l.716 \ltjapplypreset {}

noto~系列でも同様でした。noto-otfは、jpが入っているにも関わらず、同じようにメモリー不足でコンパイルをすることが出来なかったので、otfファイルからフォントを読み込む場合には容量に気を付けてあげた方が良いかもしれません。font not foundというエラーを吐いた場合は、フォントのファミリ名とluatexja-preset.styを確認して、場合によってはstyファイル側を書き換えてあげるとよいでしょう。また、いろんなフォントを混ぜて使いたい方は、本文中で、

sample.tex
\ltjnewpreset{mypreset}{
    mc-l = hogehoge_Serif-Light.otf,
    mc-m = hogehoge_Serif-Regular.otf,
    mc-b = hogehoge_Serif-Bold.otf,
    gt-m = hogehoge_Sans-Medium.otf, 
    gt-b = hogehoge_Sans-Bold.otf, 
    gt-eb = hogehoge_Sans-Heavy.otf,
    mg-m = hogehoge_Sans-Heavy.otf,
}
\ltjapplypreset{mypreset}

などととしてmypresetを定義して、\usepackage[mypreset, deluxe]{luatexja-preset} と食わせてあげると使うことが出来ます。luatexは本当にフォント変えるのが簡単ですね。(あまりに大きいフォントを使うと上のように not enough memoryに引っかかるかもしれませんが...。mc-l,mc-mなどの意味は、luatex-jaのPDFに書いてあります。
なお、さらに追記ですが、texlive2020からは原ノ味フォントがデフォルトになっています。このフォントは源ノフォントを組み替えたものらしく、フォントの読み込みがかなり軽くなっているので、IPAの細いのが好きではないからとわざわざ源ノフォントを入れる必要が無いかもしれません。原ノ味フォントについては、TeX Wiki 原ノ味フォントが詳しいです。

プリアンブル

参考までに僕の使っているプリアンブルを置いておきます。多分こちらの方がより役に立つとは思います。

sample.tex
\documentclass[a4paper,11pt]{ltjsarticle}
\usepackage{amsmath,amssymb,amsfonts}
\usepackage{mathtools,amssymb,amsfonts}
\usepackage{geometry}
\usepackage{siunitx}
\usepackage{multirow}
\usepackage{here}
\usepackage{graphicx}
\usepackage{url}
\usepackage{listings}
\usepackage{bm}
\usepackage{lscape}
\usepackage{pdflscape}
\usepackage{csvsimple}
\usepackage{wrapfig}
\usepackage{comment}
\usepackage{luatexja}
\usepackage[no-math]{luatexja-fontspec}
\usepackage[sourcehan-jp, deluxe]{luatexja-preset}

\setcounter{section}{0}
\makeatletter
    \renewcommand{\theequation}{
    \thesection.\arabic{equation}}
    \@addtoreset{equation}{section}
    \renewcommand{\figurename}{Figure }
    \renewcommand{\tablename}{Table }
\makeatother
\geometry{top=10truemm,bottom=25.4truemm,inner=19.05truemm,outer=19.05truemm}
\title{\huge LaTeX Workshopってなに?どうやって使うの?調べてみた!}
\author{\LARGE 航空宇宙工学科3年 \ \ @moinslut \ \ モイ}
\date{12/03/2019}

\begin{document}
\maketitle
\end{document}

いかがでしたか?

困った時にQiitaに頼らずにすぐに公式とかリファレンスを読んで、それを理解出来る人になりたいです...。なりましょう!ちなみにOverleafを使うとこんなことで苦労しなくて済むようです。
環境構築の参考になれば幸いです。快適なTeX Lifeを!
明日は同期の優秀な7LMCH君がTikZの入門記事を書いてくれるそうです。是非読んでみてください。

参考URL

東京大学航空宇宙工学科/専攻 Advent Calendar 2019
はじめてTeXを使う人が知っておくといいことまとめ
TeX Wiki TeX入手法
VScodeで快適LaTeX環境を構築する方法
VSCodeでTeXがいじれなくなった
GitHub - James-Yu/LaTeX-Workshop
Visual Studio Code/LaTeX - TeX Wiki
TeX の実行あれこれ - 雑記帳
LuaTeX-jaの使い方 - LuaTeX-ja Wiki
LuaTeX-ja パッケージ - luatexja-ja.pdf
Adobe Fonts - GitHub
源ノ角ゴシック/源ノ明朝フォント・Noto フォントを活用する
TeX 日本語環境で「源ノ」フォントを使ってみた
源ノ明朝/源ノ角ゴシックをLuaLaTeXで使用する (Windows)
TeX Wiki 原ノ味フォント
【LuaTeX】LuaTeXテンプレート - 溶けかけているうさぎ
Overleaf

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした