本作りを手伝う(Python学習)

本作りを手伝う

Pythonを使ってPython講座に使うファイルの自動作成に挑戦しています。今回は7回目(番外編その2)です。 前回の記事はコチラになります。

hirocom777.hatenadiary.org

Python講座もひととおり終わって、卒業LT大会が開催されました。TA(ティーチングアシスタント)を担当した僕も発表しました!!

実を言うと講座の間にお手伝いしたお仕事でPythonを使いましたので、その内容について発表しました。

技術書典13

技術書典なるイベントがあります。技術書版の同人誌販売イベントみたいな感じで、僕が所属しているノンプロ研も参加しています。

techbookfest.org

ノンプロ研では技術ライティング講座というものがあって、コチラを卒業後に書籍の企画が通ると、実際に書籍を執筆して技術書典に出典できるのです。

今回の技術書典でも、メンバーが書籍を書いて出典しています。僕はその中でメンバーが執筆している際の伴走、原稿の確認、書籍化へのお手伝いなどをしています。そのうち書籍化へのお手伝いでPythonを使いましたよ!!今回はコチラをご紹介します。

書籍化の手順

書籍化の作業とは、以下のようなものになります。

  1. 著者が書いた複数の原稿(MarkDownテキストファイル)をまとめてPDFファイルに変換する
  2. PDFファイルを著者に渡して確認してもらう
  3. 著者からの修正依頼を基に原稿を修正
  4. 2.に戻って著者からOKをもらうまで繰り返す

この原稿をPDF化してまとめる作業が結構面倒なので、それをPythonでやってしまおうと言う訳です。

複数ファイルをまとめる

ファイルをまとめるプログラムを書いてみました。リストfilenamesに登録した5つのファイルを併せて1つのファイル(new-file.md)にまとめます。

filenames = ["0_はじめに.md",
"1_第1章_本を作ろう.md",
"2_第2章_原稿を書こう.md",
"3_第3章_装丁しよう.md",
"4_おわりに.md"]
# 書込み用ファイルを開く
with open("new-file.md", "w", encoding='utf-8') as new_file:
    # 各ファイルを読み込んで書き込み先に書き込む
    for name in filenames:
        with open(name, encoding='utf-8') as f:
            for line in f:
                new_file.write(line)

リストにある5つのファイルを順番に開いて、出力用のファイルに1行ずつ書き込んでいきます。これでファイルを1つにまとめることができましたが、実際に必要な作業はこれだけではありません。

改ページを入れる

上のプログラムでは単純にファイルを併せただけですが、実際には他にも対応しなければいけない事があります。各ファイルとファイルの間は区切りをつけるため改ページ処理しなければなりません。 PDF化する際に、Markdown PDFというVScodeのアドインを使います。

marketplace.visualstudio.com

改ページをする場所に以下のCSSコードを挿入すると、PDF作成時に改ページ処理がされます。

<div style="page-break-before:always"></div>

各ファイル毎に上記のコードを挿入するようにプログラムを書き換えてみます。リストfilenamesの部分は変更がないので省略します。

new_page ='\n\n'\
    '<div style="page-break-before:always"></div>'\
    '\n\n'
# 書込み用ファイルを開く
with open("new-file.md", "w", encoding='utf-8') as new_file:
    # 各ファイルを読み込んで書き込み先に書き込む
    for name in filenames:
        with open(name, encoding='utf-8') as f:
            for line in f:
                new_file.write(line)
            # 各ファイルの後に改ページ入れる
            new_file.write(new_page)

他にも書籍の構成等によって他にも改ページを挿入する必要がありますが、こちらは微妙な作業となるためPDFに変換した結果を見ながら手作業で対応します。でも、ここまでの作業を手作業ではなく自動化で済ませることができれば、大変楽になりますし、ミスも減りますね!! この作業は原稿に修正が入るたびに発生する作業なので、効果は大きいです。

次回に続く

ここまで書いてきたのですが、実際には他にもやらなければいけない作業があります。これらの作業については次回ご紹介したいと思います。お楽しみに!!

hirocom777.hatenadiary.org