筆者は学生時代を最後に論文という文章を作成する環境とサヨナラしていました。しかし、幸運な巡り合わせにより、再び論文を書く機会を得ました。折角得られた機会を活かして学生時代論文やレポート作成で愛用していたTeX(LaTeX)を再び使ってみようと決意しました。学生時代はTeXStudioというOSSのエディターを利用していました。しかし、最近Visual Studio Code(以下VSCode)の進化が著しく、VSCodeで快適に執筆が出来る。。。物は試しと構築してみた所、予想以上に快適な環境が完成しました。今後も改良を続けて行くつもりですが、まずは構築方法を備忘録として残しておこうと思います。
環境情報
WSL2上のUbuntuとMacで環境構築を実行しました。
Linux
- Ubuntu 22.04 @ WSL2
- Visual Studio Code 1.76.1
- TeX Live 2021
Mac
- macOS 12.6.3 Monterey
- Visual Studio Code 1.76.1
- TeX Live 2021
TeX Liveのインストール
まずはTeX形式のファイルをビルドするための様々なアプリケーションを含んだディストリビューションで最もメジャーであるTeX Liveをインストールします。
Ubuntuの場合
2023/4/12更新: TeX Live 2023インストール
TeX Live 2021はもう使えないようです。証明書の期限切れエラーとなります(2023/4現在)。最新版のインストールは以下のリンクに詳しい説明が有ります。
旧バージョンインストール
当初フルバージョンをインストールしようと以下のコマンドを実行した所。。。
$ sudo apt install -y texlive-full
12時間 50分 16秒
と信じられない程時間を要すことが判明したので、最低限(日本語、英語)文書を作成出来る環境を構築することとし、以下のコマンドを実行しました。
sudo apt install -y texlive-lang-japanese
インストールが完了したら、latexindentというアプリケーションをインストールします。これをインストールせずにVSCode上でビルドを実行するとエラー終了します。Ubuntuの場合は、texlive-extra-utilsをインストールするとインストールされます。
sudo apt install -y texlive-extra-utils
aptでインストール可能なTeX Liveは2021であり、最新版(2022)はソースをビルドしてインストールが必要など煩雑です。よってしばらくTex Live 2021を利用できるようにtlmgrのリポジトリをTeX Live2021の物に変更し、フォントセットをインストールします。
sudo tlmgr init-usertree
sudo tlmgr option repository https://ftp.math.utah.edu/pub/tex/historic/systems/texlive/2021/tlnet-final/
sudo tlmgr install collection-fontsrecommended
Macの場合
Homebrewを用いてインストールを実行します。
brew install --cask basictex
sudo tlmgr update --self --all
sudo tlmgr paper a4
sudo tlmgr install collection-langjapanese
Macでも同様にlatexindentをインストールします。
brew install latexindent
フォントセットをインストールします。
sudo tlmgr install collection-fontsrecommended
VSCodeにLaTeX Workshop拡張機能の追加
VSCodeにLaTeX Workshop拡張機能をインストールします。コマンドでインストールする場合は、以下を実行します。拡張機能のストアからGUI操作でインストールすることも可能です。
code --install-extension james-yu.latex-workshop --force
自動ビルドの設定
*.tex
ファイルが保存されたら、自動的にPDFにビルドされる様にビルドスクリプト(Recipe)及びビルドに必要なtoolを定義します。settings.json
に以下を追記します。Ubuntuの場合、ptex2pdfの-u
オプションを付けたままjsarticleドキュメントクラスのファイルのビルドを実行するとビルドエラーになります。設定追記後はVSCodeを再読み込みするか、再起動します。
初回ビルドのみ自動で実行されず、Ctrl + Alt + B(Mac: option + command + B)を打鍵してビルドを実行させます。以降は保存される度にビルドが自動実行されます。
"latex-workshop.latex.autoBuild.run": "onFileChange",
"latex-workshop.latex.recipes": [
{
"name": "ptex2pdf",
"tools": ["ptex2pdf"]
}
],
"latex-workshop.latex.tools": [
{
"name": "ptex2pdf",
"command": "ptex2pdf",
"args": [
"-l",
"-ot",
"-kanji=utf8 -synctex=1 -interaction=nonstopmode -file-line-error",
"%DOC%"
]
}
],
"latex-workshop.view.pdf.viewer": "tab",
-u オプションを付けた時のエラーログ @ Ubuntu
This is e-pTeX, Version 3.141592653-p3.9.1-210218-2.6 (utf8.euc) (TeX Live 2022/dev/Debian) (preloaded format=platex 2023.3.13) 13 MAR 2023 18:51
entering extended mode
restricted \write18 enabled.
file:line:error style messages enabled.
%&-line parsing enabled.
**/home/user/manuscripts/textest/test2
(/home/user/manuscripts/textest/test2.tex
pLaTeX2e <2021-11-15> (based on LaTeX2e <2021-11-15> patch level 1)
L3 programming layer <2022-01-21> (/usr/share/texlive/texmf-dist/tex/platex/jsclasses/jsarticle.cls
Document Class: jsarticle 2021/06/28 jsclasses (okumura, texjporg)
\jsc@mpt=\dimen154
\jsc@mmm=\dimen155
\jsc@smallskipamount=\skip47
LaTeX Info: Redefining \textmc on input line 497.
LaTeX Info: Redefining \textgt on input line 499.
\symmincho=\mathgroup4
LaTeX Font Info: Overwriting symbol font `mincho' in version `bold'
(Font) JY1/mc/m/n --> JY1/gt/m/n on input line 561.
LaTeX Font Info: Font shape `JT1/mc/m/n' will be
(Font) scaled to size 9.60999pt on input line 755.
LaTeX Font Info: Font shape `JY1/mc/m/n' will be
(Font) scaled to size 9.60999pt on input line 755.
\fullwidth=\dimen156
LaTeX Font Info: Font shape `JT1/mc/m/n' will be
(Font) scaled to size 7.68799pt on input line 908.
LaTeX Font Info: Font shape `JY1/mc/m/n' will be
(Font) scaled to size 7.68799pt on input line 908.
\c@part=\count184
\c@section=\count185
\c@subsection=\count186
\c@subsubsection=\count187
\c@paragraph=\count188
\c@subparagraph=\count189
\@abstractbox=\box67
\c@figure=\count190
\c@table=\count191
\abovecaptionskip=\skip48
\belowcaptionskip=\skip49
\jsc@tocl@width=\dimen157
\@lnumwidth=\dimen158
\bibindent=\dimen159
(/usr/share/texlive/texmf-dist/tex/platex/jsclasses/jslogo.sty
Package: jslogo 2019/07/25 okumura, texjporg
LaTeX Info: Redefining \TeX on input line 82.
LaTeX Info: Redefining \LaTeX on input line 135.
LaTeX Info: Redefining \LaTeXe on input line 188.
)
\heisei=\count192
) (/usr/share/texlive/texmf-dist/tex/platex/ipsj/ipsj.sty (/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
Package: geometry 2020/01/02 v5.9 Page Geometry
(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
\KV@toks@=\toks17
) (/usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty
Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead.
(/usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty
Package: iftex 2020/03/06 v1.0d TeX engine tests
))
\Gm@cnth=\count193
\Gm@cntv=\count194
\c@Gm@tempcnt=\count195
\Gm@bindingoffset=\dimen160
\Gm@wd@mp=\dimen161
\Gm@odd@mp=\dimen162
\Gm@even@mp=\dimen163
\Gm@layoutwidth=\dimen164
\Gm@layoutheight=\dimen165
\Gm@layouthoffset=\dimen166
\Gm@layoutvoffset=\dimen167
\Gm@dimlist=\toks18
) (/usr/share/texlive/texmf-dist/tex/platex/titlesec/titlesec.sty
Package: titlesec 2021/07/05 v2.14 Sectioning titles
\ttl@box=\box68
\beforetitleunit=\skip50
\aftertitleunit=\skip51
\ttl@plus=\dimen168
\ttl@minus=\dimen169
\ttl@toksa=\toks19
\titlewidth=\dimen170
\titlewidthlast=\dimen171
\titlewidthfirst=\dimen172
)) (/usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-dvips.def
File: l3backend-dvips.def 2022-01-12 L3 backend support: dvips
\l__pdf_internal_box=\box69
\g__pdf_backend_object_int=\count196
\l__pdf_backend_content_box=\box70
\l__pdf_backend_model_box=\box71
\g__pdf_backend_annotation_int=\count197
\g__pdf_backend_link_int=\count198
\g__pdf_backend_link_sf_int=\count199
) (./test2.aux)
\openout1 = `test2.aux'.
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 4.
LaTeX Font Info: ... okay on input line 4.
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 4.
LaTeX Font Info: ... okay on input line 4.
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 4.
LaTeX Font Info: ... okay on input line 4.
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 4.
LaTeX Font Info: ... okay on input line 4.
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 4.
LaTeX Font Info: ... okay on input line 4.
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 4.
LaTeX Font Info: ... okay on input line 4.
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 4.
LaTeX Font Info: ... okay on input line 4.
LaTeX Font Info: Checking defaults for JY1/mc/m/n on input line 4.
LaTeX Font Info: ... okay on input line 4.
LaTeX Font Info: Checking defaults for JT1/mc/m/n on input line 4.
LaTeX Font Info: ... okay on input line 4.
*geometry* driver: auto-detecting
*geometry* detected driver: dvips
*geometry* verbose mode - [ preamble ] result:
* driver: dvips
* paper: <default>
* layout: <same size as paper>
* layoutoffset:(h,v)=(0.0pt,0.0pt)
* modes:
* h-part:(L,W,R)=(62.328pt, 529.78906pt, 62.328pt)
* v-part:(T,H,B)=(93.49207pt, 754.17021pt, 77.91003pt)
* \paperwidth=597.49843pt
* \paperheight=845.04324pt
* \textwidth=529.78906pt
* \textheight=754.17021pt
* \oddsidemargin=-9.94199pt
* \evensidemargin=-9.94199pt
* \topmargin=-17.1869pt
* \headheight=20.0pt
* \headsep=18.40898pt
* \topskip=12.76073pt
* \footskip=31.16971pt
* \marginparwidth=36.98749pt
* \marginparsep=18.49374pt
* \columnsep=21.81479pt
* \skip\footins=16.0pt plus 5.0pt minus 2.0pt
* \hoffset=-6.87735pt
* \voffset=-6.87735pt
* \mag=913
* \@twocolumntrue
* \@twosidefalse
* \@mparswitchfalse
* \@reversemarginfalse
* (1in=72.27pt=25.4mm, 1cm=28.453pt)
LaTeX Font Info: Font shape `JT1/mc/m/n' will be
(Font) scaled to size 11.53198pt on input line 6.
LaTeX Font Info: Font shape `JY1/mc/m/n' will be
(Font) scaled to size 11.53198pt on input line 6.
LaTeX Font Info: Font shape `JT1/gt/m/n' will be
(Font) scaled to size 11.53198pt on input line 6.
LaTeX Font Info: Font shape `JY1/gt/m/n' will be
(Font) scaled to size 11.53198pt on input line 6.
LaTeX Font Info: Font shape `JT1/gt/m/n' will be
(Font) scaled to size 9.60999pt on input line 7.
LaTeX Font Info: Font shape `JY1/gt/m/n' will be
(Font) scaled to size 9.60999pt on input line 7.
[1
] (./test2.aux) )
Here is how much of TeX's memory you used:
1572 strings out of 479850
25018 string characters out of 5887378
328994 words of memory out of 5000000
19943 multiletter control sequences out of 15000+600000
475744 words of font info for 59 fonts, out of 8000000 for 9000
269 hyphenation exceptions out of 8191
70i,5n,76p,197b,192s stack positions out of 5000i,500n,10000p,200000b,80000s
Output written on test2.dvi (1 page, 584 bytes).
"latex-workshop.latex.autoBuild.run": "onFileChange",
"latex-workshop.latex.recipes": [
{
"name": "ptex2pdf",
"tools": ["ptex2pdf"]
}
],
"latex-workshop.latex.tools": [
{
"name": "ptex2pdf",
"command": "ptex2pdf",
"args": [
"-u",
"-l",
"-ot",
"-kanji=utf8 -synctex=1 -interaction=nonstopmode -file-line-error",
"%DOC%"
]
}
],
"latex-workshop.view.pdf.viewer": "tab",
Snipettsを作成
Snipettsを作成しました。まだ最低限ですが、これから加筆修正して使いやすくしていく予定です。以下の内容をlatex.json
に書き込むとSnippetsとして利用出来ます。
"Normal Template for Doc": {
"prefix": "normal",
"body": [
"\\documentclass[a4j, 12pt]{jsarticle}",
"",
"\\begin{document}",
"",
"$0",
"",
"\\end{document}",
],
"description": "Normal Template"
}
STYファイルを追加する方法
*.sty
ファイルを追加する必要性が生じた時の為に追加方法をまとめておきたいと思います。titlesec.sty
を追加する例で説明します。但し、この方法だとPCをリカバリーした時などに復旧が大変なのでホームディレクトリにシンボリックリンクを作ってバックアップが取りやすい様にしようと思っています。但し、CTANに格納されている*.sty
を追加する場合はtlmgr
コマンドでインストール可能です。
sudo tlmgr install <styファイル名>
Ubuntuの場合
cd /usr/share/texlive/texmf-dist/tex/platex
sudo mkdir titlesec
cd titlesec/
sudo wget http://tug.ctan.org/tex-archive/macros/latex/contrib/titlesec/titlesec.sty
sudo mktexlsr
シンボリックリンクの作成
ln -s /usr/share/texlive/texmf-dist/tex/platex ~/tex_stys
Macの場合
cd /usr/local/texlive/2022basic/texmf-dist/tex/platex/
sudo mkdir titlesec
cd titlesec/
sudo wget http://tug.ctan.org/tex-archive/macros/latex/contrib/titlesec/titlesec.sty
sudo mktexlsr
シンボリックリンクの作成
ln -s /usr/local/texlive/2022basic/texmf-dist/tex/platex/ ~/tex_stys
実際にTeXファイルをビルド
*.tex
ファイルを編集して保存すると自動的にビルドが実行され、PDFが作成されます。編集せずにビルドする場合は、Ctrl + Alt + B(Mac: option + command + B)を打鍵します。
まとめ
今回VSCodeでTeX文書作成環境を構築しました。これから利用しながら改良を重ねていこうと思います。まずは最低限動作する環境の構築を目指しましたが、昔調べた時と比較して操作が簡単になっている様な気がしました。技術の進歩には今更ながら脱帽です。
Reference