めんどくさい!! スラッシュ・バックスラッシュ問題
あれ? latexのコンパイルエラーが出た。ああ,画像パスを置換し忘れてた。
もう自動出来ないのか?
調べたところなかった為,自作しました。
初めに
この記事では、PowerShellを使用してTeXファイル内のバックスラッシュをスラッシュに置換するスクリプトを作成する方法を紹介します。TeXファイル内のバックスラッシュを置換することは、特にLaTeX文書でグラフィックスパスを変更する必要がある場合に便利です。
スクリプトの作成
まず、PowerShellスクリプトを作成します。以下は、convert_backslash_to_slash.ps1
というスクリプトの内容です。
param (
[Parameter(Mandatory=$true)]
[string]$texFilePath
)
# .tex 拡張子を追加する
$texFilePath += ".tex"
# ファイルの内容を読み込む
$texCode = Get-Content -Path $texFilePath -Raw
# \includegraphics の場合の置換
$includeGraphicsPattern = '\\includegraphics\s*(\[[^\]]*\])?\s*{([^}]+)}'
$texCode = [System.Text.RegularExpressions.Regex]::Replace($texCode, $includeGraphicsPattern, { param($m) "`\includegraphics$($m.Groups[1].Value)`{$($m.Groups[2].Value -replace '\\', '/')}" })
# \includesvg の場合の置換
$includeSvgPattern = '\\includesvg\s*(\[[^\]]*\])?\s*{"([^}]+)"}'
$texCode = [System.Text.RegularExpressions.Regex]::Replace($texCode, $includeSvgPattern, { param($m) "`\includesvg$($m.Groups[1].Value)`{$($m.Groups[2].Value -replace '\\', '/')}" })
# 変換後の内容を書き戻す
Set-Content -Path $texFilePath -Value $texCode -Encoding UTF8
このスクリプトは、指定されたTeXファイルのパスを引数として受け取り、バックスラッシュをスラッシュに置換します。
VSCode設定
setting.jsonに以下を追加します。convert_backslash_to_slash.ps1のパスを設定してください。
"latex-workshop.latex.tools": [
{
"name": "convert_backslash_to_slash",
"command": "powershell",
"args": [
"-NoProfile",
"-ExecutionPolicy",
"Bypass",
"-File",
"convert_backslash_to_slash.ps1",
"%DOCFILE%"
]
}
],
"latex-workshop.latex.recipes": [
{
"name": "LuaLaTeX_PS",
"tools": [
"convert_backslash_to_slash",
"Latexmk (LuaLaTeX)"
],
},
],
"[latex]": {
"files.encoding": "utf8bom"
}
これでコンパイルをLuaLaTeX_PSで行えば,自動的に画像パスだけを置換してくれます。