#はじめに
LaTeX の原稿を Visual Studio Code の拡張 LaTeX Workshop を使って書いていたときに
SVG を埋め込みたくなる状況になりました。
VSCodeでSVGを埋め込んだ原稿をコンパイルするには少し設定の修正が必要だったので、メモを残します。
使用した環境は以下です。
- macOS Big Sur 11.5.2
- TeXLive2021
- VSCode バージョン: 1.59.0
- LaTeX Workshop v8.20.2
#事前準備
LaTeX にSVGファイルを埋め込むには SVGパッケージと Inkscape が必要になります。
SVGパッケージについては以下を参考にしました。
https://konoyonohana.blog.fc2.com/blog-entry-432.html
https://pyopyopyo.hatenablog.com/entry/2019/11/17/180855
TeXLive だとデフォルトでインストールされてるはずで、texdoc svg
としてドキュメントが参照できるなら、特にインストール作業は不要です。
SVGファイルを LaTeX に埋め込める形式に変換するために SVGパッケージではInkscape を使います。
これは mac であれば brew
を使って以下のコマンドでインストールできます。
brew install --cask inkscape
Visual Studio Code 拡張の設定
SVGパッケージを使うときには内部で Inkscape を呼び出すので LaTeX のコンパイルコマンド
(pdflatex
, lualatex
等)に -shell-escape
オプションが必要になります。
VSCode の LaTeX Workshop 拡張のデフォルト設定では -shell-escape
は実行時に指定されませんので、
追加する必要があります。
とはいえ、これは任意の外部コマンドを実行できるようにするオプションなのでユーザのデフォルト設定とすることは
セキュリティ上の懸念があると考え、ワークスペース固有の設定とすることにしました。
⌘,
で設定画面を開いたら、latex.tools
で検索すると変更したいオプション latex-workshop.latex.tools
が見つかります。
settings.json で編集
を選んで、例えば latexmk
に対しては以下のように "args"
オプションの中の "%DOC%"
の直前に -shell-escape
を追加します。
必要に応じて lualatexmk
, pdflatex
など、他のコマンドの設定にも-shell-escape
を追加します。
{
"name": "latexmk",
"command": "latexmk",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"-pdf",
"-outdir=%OUTDIR%",
"-shell-escape",
"%DOC%"
],
"env": {}
},
これでコンパイル時に自動的に inkscape が呼び出されてSVGを埋め込んだPDFが出力されるはずです。