renumber_slides.py の技術ドキュメント
プログラムの動作
renumber_slides.py は、指定されたテキストファイル内のスライド番号を自動的に連番に振り直すPythonスクリプトです。主にMarkdown形式のスライド資料を対象としており、# Slide N ... という形式で記述されたヘッダー行のスライド番号 N を \(1, 2, 3, \ldots\) のように修正します。
このプログラムは、スライドの追加や削除によって不整合になったスライド番号を簡単に修正することを目的としています。ファイルの内容を直接上書きするため、実行前に元のファイルのバックアップを取ることを推奨します。
原理
本プログラムは、以下の手順でスライド番号の振り直しを行います。
入力ファイルを1行ずつ読み込みます。
各行に対して、正規表現
^#\s*Slide\s+(\d+)(.*)$を使用して、スライドヘッダー行であるかどうかを判定します。^: 行の先頭を表します。#\s*Slide\s+:# Slideという文字列パターンにマッチします。\s*は0個以上の空白文字、\s+は1個以上の空白文字にマッチします。これにより、#Slide 1や# Slide 2のような形式にも対応します。(\d+): 1つ以上の数字の並び(既存のスライド番号)をキャプチャグループ1として抽出します。(.*): スライド番号に続く残りの文字列(スライドタイトルなど)をキャプチャグループ2として抽出します。$: 行の末尾を表します。
行がこのパターンにマッチした場合、スクリプト内で管理している現在の連番カウンター(
slide_no)を使用して、新しいスライドヘッダー行を作成します。具体的には、マッチした行から取得したキャプチャグループ2(スライドタイトルなど)を再利用し、# Slide {slide_no}{rest_of_line}の形式で新しい行を生成します。slide_noは処理ごとに1ずつインクリメントされます。マッチしなかった行は変更せず、そのまま保持します。
全ての行の処理が完了した後、生成された新しい行のリストを元のファイルに上書き保存します。
このアルゴリズムにより、ファイル全体を通してスライド番号が \(1\) から始まる連続した番号に統一されます。
必要な非標準ライブラリとインストール方法
renumber_slides.py は、Pythonの標準ライブラリのみを使用しており、非標準ライブラリは必要ありません。 したがって、追加のインストール作業は不要です。
必要な入力ファイル
本プログラムは、コマンドライン引数で指定された単一のテキストファイルを入力として受け取ります。
ファイル形式: 特に特定のファイル形式は要求されませんが、Markdown形式のスライド資料のように、各スライドの冒頭が以下の形式のいずれかで記述されていることを期待します。
# Slide 1 Some Title# Slide 5 Introduction#Slide 10 Conclusion
ファイル内容: 上記のパターンにマッチする行が含まれている必要があります。プログラムはこれらの行を対象としてスライド番号を振り直します。
例:
# Slide 1 Introduction
This is an introductory slide.
# Slide 3 Agenda
- Point 1
- Point 2
# Slide 20 Important Topic
Details about the topic.
生成される出力ファイル
プログラムは、入力として指定されたファイルを直接上書きします。新しいファイルは生成されません。
ファイル名: コマンドライン引数で指定された入力ファイル名と同じです。
内容: 入力ファイルの内容が、スライドヘッダー行(
# Slide N ...の形式の行)の番号が連番に振り直された状態で更新されます。その他の行は変更されません。コンソール出力: 処理中に、変更された各行の元の内容と新しい内容が標準出力に表示されます。また、処理の最後にファイルが更新されたことを示すメッセージが表示されます。
コンソール出力例:
Open slides.md
# Slide 1 Introduction => # Slide 1 Introduction
# Slide 3 Agenda => # Slide 2 Agenda
# Slide 20 Important Topic => # Slide 3 Important Topic
slides.md has been updated
コマンドラインでの使用例 (Usage)
renumber_slides.py は、以下の形式でコマンドラインから実行します。
python renumber_slides.py <filename>
<filename>: スライド番号を振り直したいファイルのパスを指定します。
コマンドラインでの具体的な使用例
事前準備
slides.md という名前で以下の内容のファイルを作成します。
# Slide 1 Introduction to Project X
This project aims to solve complex problems.
# Slide 5 Core Components
- Component A
- Component B
- Component C
# Slide 2 Challenges and Solutions
- Challenge 1: Solution 1
- Challenge 2: Solution 2
A normal paragraph.
実行コマンド
python renumber_slides.py slides.md
実行結果の説明
上記のコマンドを実行すると、ターミナルには以下のような出力が表示されます。
Open slides.md
# Slide 1 Introduction to Project X => # Slide 1 Introduction to Project X
# Slide 5 Core Components => # Slide 2 Core Components
# Slide 2 Challenges and Solutions => # Slide 3 Challenges and Solutions
slides.md has been updated
同時に、slides.md ファイルの内容は以下のように更新されます。
# Slide 1 Introduction to Project X
This project aims to solve complex problems.
# Slide 2 Core Components
- Component A
- Component B
- Component C
# Slide 3 Challenges and Solutions
- Challenge 1: Solution 1
- Challenge 2: Solution 2
A normal paragraph.
出力結果から分かるように、元のファイル内の # Slide N ... という形式の行が、# Slide 1 ..., # Slide 2 ..., # Slide 3 ... のように連番に振り直されています。# Slide N の後の内容は維持され、スライドヘッダーではない行は変更されていません。また、プログラムがファイルを開き、どの行がどのように変更され、最終的にファイルが更新されたかがコンソールに表示されます。