#問題の概要
wsl+vscode環境でlatexソールファイルをビルドすると、.flsと.synctex.gzの二つのファイルが自動で削除されないバグが発生。
macOSの環境で同じ.latexmkrcとsettings.jsonを記述してビルドしたところ、この二つのファイルを含めたすべての中間ファイルは自動で削除されているので、おそらくこの現象はwslとvscodeを連携したときに起こるバグみたいなものだと思う。
この二つのファイルを削除せずにgit pushしてしまうと、文字コードの関係で、mac環境にgit pullすることができないので何とか削除しないといけない。
#.flsと.synctex.gzを削除する方法
直接この問題を解決するのではなく、新たにシェルスクリプトを作成して面倒なこの二つのファイルの削除を自動でやってもらおうという方法である。
まず私の.latexmkrcとsetting.jsonは以下のように記述してある。
##.latexmkrc
#!/usr/bin/env perl
# LaTeX
$latex = 'platex -synctex=1 -halt-on-error -file-line-error %O %S';
$max_repeat = 5;
# BibTeX
$bibtex = 'pbibtex %O %S';
$biber = 'biber --bblencoding=utf8 -u -U --output_safechars %O %S';
# index
$makeindex = 'mendex %O -o %D %S';
# DVI / PDF
$dvipdf = 'dvipdfmx %O -o %D %S';
$pdf_mode = 3;
# preview
$pvc_view_file_via_temporary = 0;
if ($^O eq 'linux') {
$dvi_previewer = "xdg-open %S";
$pdf_previewer = "xdg-open %S";
} elsif ($^O eq 'darwin') {
$dvi_previewer = "open %S";
$pdf_previewer = "open %S";
} else {
$dvi_previewer = "start %S";
$pdf_previewer = "start %S";
}
# clean up
$clean_full_ext = "%R.synctex.gz"
##settings.json
{
// ---------- Language ----------
"[tex]": {
// スニペット補完中にも補完を使えるようにする
"editor.suggest.snippetsPreventQuickSuggestions": false,
// インデント幅を2にする
"editor.tabSize": 2
},
"[latex]": {
// スニペット補完中にも補完を使えるようにする
"editor.suggest.snippetsPreventQuickSuggestions": false,
// インデント幅を2にする
"editor.tabSize": 2
},
"[bibtex]": {
// インデント幅を2にする
"editor.tabSize": 2
},
// ---------- LaTeX Workshop ----------
// 使用パッケージのコマンドや環境の補完を有効にする
"latex-workshop.intellisense.package.enabled": true,
// 生成ファイルを削除するときに対象とするファイル
// デフォルト値に "*.synctex.gz" を追加
"latex-workshop.latex.clean.fileTypes": [
"*.aux",
"*.bbl",
"*.blg",
"*.idx",
"*.ind",
"*.lof",
"*.lot",
"*.out",
"*.toc",
"*.acn",
"*.acr",
"*.alg",
"*.glg",
"*.glo",
"*.gls",
"*.ist",
"*.fls",
"*.log",
"*.fdb_latexmk",
"*.snm",
"*.nav",
"*.dvi",
"*.synctex.gz"
],
// 生成ファイルを "out" ディレクトリに吐き出す
"latex-workshop.latex.outDir": "out",
//補助配流を自動的に削除
"latex-workshop.latex.autoClean.run": "onBuilt", //added
// ビルドのレシピ
"latex-workshop.latex.recipes": [
{
"name": "latexmk",
"tools": [
"latexmk"
]
},
],
// ビルドのレシピに使われるパーツ
"latex-workshop.latex.tools": [
{
"name": "latexmk",
"command": "latexmk",
"args": [
"-silent",
"-outdir=%OUTDIR%",
"%DOC%"
],
},
],
"latex-workshop.latex.clean.subfolder.enabled": true,
"editor.inlineSuggest.enabled": true, //added
}
この状態でビルドしても.flsと.synctex.gzは削除されずにoutディレクトリに残ってしまう。
※ここで言うoutディレクトリとは、ビルド時に生成されるファイルを一括でまとめて管理しているディレクトリである。詳しくはsettings.jsonを参照
##シェルスクリプトの作成
#!/bin/sh
echo "shell script start!"
rm out/*.fls
rm out/*.synctex.gz
echo "shell script executed!"
二つの不要なファイルを削除するシェルスクリプトを作成する。
仮にrm_tex.shという名前にしておく。
この.shファイルをどこかわかりやすいところに配置して実行するだけで二つのファイルは削除されるが、
いちいち実行するためにshコマンドを打ち込むのは芸がないのでエイリアスを作成する。
##シェルスクリプトを実行するエイリアスの作成
仮に.shファイルを ~/shell_script/の下に置いたとする。
その場合、.bashrcファイルには以下のエイリアスを追加すればよい。
alias rmtex='sh ~/shell_script/rm_tex.sh'
これで、rmtexコマンドが新たに使えるようになった。
ただし、このシェルスクリプトを実行するためには、outディレクトリが存在するディレクトリにいる状態で(つまり、outディレクトリと同じ親を持つディレクトリにいる状態で)
$ rmtex
と打つ必要がある。