概要
PowerShellのスクリプトとバッチファイルを使って、TeX文書作成のためのフォルダ作成、テンプレートのコピー、エディタの起動を自動化しました。
背景
私が所属していた研究室では毎週ミーティングと呼ばれる進捗報告の集まりがありました。
A4数枚程度にテキストと図で直近1週間で実施した内容をミーティング資料としてまとめ、その資料を読みながら進捗を報告していき、必要であればディスカッションするというものです。
この研究室では、基本的に文書作成はWordではなく「TeX」と呼ばれる組版処理ソフトウェアで作成するように求められていました。TeXについての詳しい説明は省きますが、HTML/CSSのような形でソースコード上で文書の本文、章分け、図表の挿入などの記述をして、最終的にコンパイルしてpdfを出力します。理系の論文の執筆ではWordよりも優れている点があるため、普段からTeXの使用が推奨されていました。
文書の内容のコードを書く.texファイル、参照文献リストを記録したreference.bibファイルの2つのファイルをコンパイルすると、pdfファイルと数個の補助的なファイルが生成されます。
1つの文書に対して複数のファイルが紐づくため、ミーティング資料を毎週同じフォルダに作り続けていると、大変分かりづらくなります。そこでTeXの文書を作る際は、基本的に1つの文書に対して1つのフォルダを作ります。
また、0から.texファイルのコードを書くことは少なく、通常テンプレファイルをコピーしてきて内容部分を新たに書いていく、というスタイルになります。
つまり、新しいミーティング資料を作る時は
1. テンプレファイルが入ったフォルダをコピーする
2. フォルダ名を日付に変更する
3. .texファイルの名前をmt日付.tex
のように変更する (mtはミーティングの略)
4. 作成したフォルダをエディター(VSCode)で開いて編集開始
という流れになります。
たいしたことない作業ではありますが、毎週となるとちょっと無駄に感じてきます。
そこでPowerShellのスクリプト機能を使い、この流れを自動化してみました。
作成したコード
以下が作成した.ps1ファイルのコードです。
(GitHubのリポジトリはこちら)
#入力要求し、かつ変数fulldateに入力データを代入
$full_date = Read-Host "Input date"
#inputが6文字でなければ弾く
$input_length = $full_date.Length
If ($input_length -ne 6){
echo "invailed input number"
}Else{
$year = $full_date.Substring(0,2)
$month = $full_date.Substring(2,2)
$date = $full_date.Substring(4,2)
#folder名は数字連続が見づらいので分割
$foldername = $year+"_"+$month+"_"+$date
echo $foldername
New-Item C:\Users\yoshi\meeting\$foldername -ItemType Directory
#テンプレファイルをコピーして、入力した日付をファイル名に変更
Copy-Item C:\Users\yoshi\meeting\tempre\tempre.tex C:\Users\yoshi\meeting\$foldername\mt$full_date.tex
Copy-Item C:\Users\yoshi\meeting\tempre\reference.bib C:\Users\yoshi\meeting\$foldername
#作業フォルダをVSCodeで自動的に開く
cd "C:\Users\yoshi\AppData\Local\Programs\Microsoft VS Code"
.\Code.exe C:\Users\yoshi\meeting\$foldername
cd ~\
}
使い方
tempreフォルダの中に、tempre.texファイルとreference.bibファイルを用意しておきます。
make_tex_folder.ps1をPowerShellで実行すると、以下のように入力を受け付けます
日付を6桁の数字で入力します。(2023年1月23日なら230123)
すると、tempreフォルダがコピーされ、23_01_23
というフォルダ名になり、
さらにその中のテンプレのtexファイルもmt230123.tex
という名前に変更されています。
このとき自動的にVSCodeが起動して新たに作成したフォルダを開いてすぐに編集ができます。
バッチファイルを作る
これで多少便利にはなりましたが、わざわざPowerShellを立ち上げてmake_tex_foloder.ps1を指定して実行する、というのはまだ少し手間に感じます。
これを解決するため、make_tex_foloder.ps1を実行するバッチファイルを作ります。
そのバッチファイルに内容が以下です。
powershell -ExecutionPolicy RemoteSigned -File C:\Users\yoshi\make_tex_folder.ps1
pause
そしてこのバッチファイルのショートカットを作成し、デスクトップに配置します。
そうすると、このバッチファイルのアイコンをクリックするだけで、コマンドプロンプトが立ち上がり、日付入力を受け付ける状態になります。
これにて自動化完了です!
コメント