はじめに
著者
理系.応用化学科3年.物理化学専攻.
目的
物理化学では複数の数式を取り扱う.その際にLateXの体系化された手法の方が楽に感じたため,MS WordよりもLateXを使用している.
研究室配属を控え,LateXを用いて複数の文書を作成する際にフォルダ構成などを毎回作成するのが面倒に感じたので自動化を行う.
環境
M1 Macbook Air
Lualatex
Python
プログラムや作業等
設定
適当なディレクトリに普段使用するLateXのテンプレートフォルダを作成する.これは自由に後から設定可能.
.
└── document/
└── project_template/
├── report.tex
├── preamble/
│ └── preamble.tex
├── images/
│ └── image.png
├── data/
│ └── data.csv
└── ...
上記ディレクトリ構成では,project_template以下がコピーされるようになる.
#!/usr/bin/env python3
import os
import shutil
from datetime import datetime
def copy_project_template(src_folder):
"""
特定のフォルダ構成を現在のディレクトリにコピーする。
Args:
src_folder (str): コピー元フォルダのパス
"""
# 現在のディレクトリをコピー先の親フォルダとして取得
dest_parent_folder = os.getcwd()
# コピー先フォルダ名にタイムスタンプを追加
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
dest_folder = os.path.join(dest_parent_folder, f"project_{timestamp}")
try:
# フォルダのコピー
shutil.copytree(src_folder, dest_folder)
print(f"フォルダをコピーしました: {dest_folder}")
except Exception as e:
print(f"エラーが発生しました: {e}")
# 使用例
if __name__ == "__main__":
# コピー元フォルダ(固定パス)
source_folder = "/Users/ユーザー名/Documents/project_template"
# 関数の実行
copy_project_template(source_folder)
上記コードをbin内に作成し,bash等の設定を適宜行う.(あまり詳しくないのでここでは説明しない)
.
└── users/
└── ユーザー名/
├── bin/
│ └── copy_template.py
└── ...
最後にスクリプトに実行権限を付与する.
chmod +x /Users/ユーザー名/bin/copy_project.py
これで設定は終わり.
動作テスト
例えば量子化学について新しくレポートを作成することになった際,「量子力学の授業フォルダ」に移動しターミナルで次を実行する.
copy_project.py
その結果,「量子力学の授業フォルダ」には次のようなコピーが生成される.
.
└── 「量子化学の授業フォルダ」/
└── project_日付_時間/
├── report.tex
├── preamble/
│ └── preamble.tex
├── images/
│ └── image.png
├── data/
│ └── data.csv
└── ...
これでreport.texを編集することにより,スムーズにレポート作成を始めることができる.
利点
このコードは元となるフォルダが存在し,プログラム実行毎に確認されているため,latexのプリアンブルを追加する際にpythonのコード自体を編集する必要はなく,フォルダ内を直接編集することで次回以降のコピーを変化させることができるのが便利である.
最後に
自分自身の専門が非情報系であるため,もっと良いファイル管理方法がある可能性がある.新たな気づきを得た場合は適宜調整を行おうと思う.
また,本文は「計算化学」授業でpythonを勉強し始めた.それのアウトプットの意味も込めている.