Pythonを使ってPython講座に使うファイルの自動作成に挑戦しています。今回は8回目(番外編その3)です。 前回の記事はコチラになります。
前回はPythonを使って技術書典に出典する本を作るお手伝いをしたお話でした。複数のMarkDownテキストファイルをまとめて、ファイルの区切りで改ページのコードを入れるところまでをご紹介しました。
今日は前回の続きです。本を作るには、複数の原稿ファイルをまとめる以外にもやることがあります。
目次を入れる
ある程度まとまった内容の本になると、目次が欲しくなってきます。目次を作成するには前回も使ったMarkdown PDFというVScodeのアドインを使います。
コチラの「Create Table of Contents」という機能を使うと「# 目次」と記述下部分に自動で目次を作成してくれます。目次を作るには、目次を作る位置を決めなければなりません。プログラムの前に原稿のテキストファイルのリストがあるので、このリストを使って目次を入れる位置を決めましょう。今回は最初の「0はじめに.md」と本文先頭の「1第1章_本を作ろう.md」の間に入れることにします。先頭のリスト、定数宣言部分はこうなりました。
# 目次を入れる filenames = [ "0_はじめに.md", "I", "1_第1章_本を作ろう.md", "2_第2章_原稿を書こう.md", "3_第3章_装丁しよう.md", "4_おわりに.md"] new_page ='\n\n'\ '<div style="page-break-before:always"></div>'\ '\n\n'
目次を設定する部分には「I」をリストに挿入しました。次にプログラム本体部分です。
# 書込み用ファイルを開く with open("new-file.md", "w", encoding='utf-8') as new_file: # 各ファイルを読み込んで書き込み先に書き込む for name in filenames: if name == "I":# 目次を入れる new_file.write('# 目次\n' + new_page) continue with open(name, encoding='utf-8') as f: for line in f: new_file.write(line) # 各ファイルの後に改ページ入れる new_file.write(new_page)
リストから取得した値が「I」だった場合はその部分に「# 目次」と改ページのコードを入れるようにしました。これで指定した部分に目次ができ上ります。
目次対象外を設定
さて目次なのですが、このままだと全部の章が目次に掲載されます。「0はじめに.md」と「4おわりに.md」は目次の対象から外したいです。目次自体も対象外です。目次対象外とな部分を指定できるようにしましょう。目次の対象外にするには、直前に以下のコードを記述します。
<!-- omit in toc -->
先頭のリスト、定数宣言部分はこうなりました。
filenames = [ "X", "0_はじめに.md", "X", "I", "1_第1章_本を作ろう.md", "2_第2章_原稿を書こう.md", "3_第3章_装丁しよう.md", "X", "4_おわりに.md"] new_page ='\n\n'\ '<div style="page-break-before:always"></div>'\ '\n\n' omit_index ='<!-- omit in toc -->\n'
リストから取得した値が「X」だった場合はその直後の部分を目次対象外に指定します。目次対象外指定のコードとしてomit_indexも定義しました。次にプログラム本体部分です。
# 書込み用ファイルを開く with open("new-file.md", "w", encoding='utf-8') as new_file: for name in filenames: if name == "X":# 目次の対象外にする new_file.write(omit_index) continue if name == "I":# 目次を入れる new_file.write('# 目次\n' + new_page) continue # 各ファイルを読み込んで書込み用ファイルに書き込む with open(name, encoding='utf-8') as f: for line in f: new_file.write(line) # 各ファイルの後に改ページ入れる new_file.write(new_page)
リストから取得した値が「X」だった場合はその部分に目次対象外指定のコードを入れるようにしました。これで指定した部分が目次対象外となります。
簡単なプログラムでお仕事が楽に
いかがでしたでしょうか。PDF化の作業は単純な作業ですが何度も繰り返すことがあり、面倒でミスの原因にもなります。あと、こうやってプログラムを少しずつ改善、機能追加していくといい学びになりますね。最後まで読んでいただきありがとうございいました!!