小説家になろうのコンテンツから縦書きpdfを作成する その1

小説家になろうのコンテンツから縦書きpdfを作成してまとめて読むことを考える。

 

 作成例としてアニメ化もされた「蝉川夏哉/異世界居酒屋のぶ」はこんな感じ。

f:id:k_igrs:20190307064927j:plainf:id:k_igrs:20190307065836j:plain

方針として

  1. 縦書きpdfを作成するためTeXを導入する
  2. なろうから小説をダウンロードする
  3. htmlフォーマットからTeXフォーマットに変換する

とする。


1.TeXの導入

以下のリンクを参考にしてTeXを導入する。

doratex.hatenablog.jp3GByte以上あってびっくりするけど頑張ってインストールと設定を完了させる。

導入が完了したら"/usr/local/texlive/2018/bin/x86_64-darwin/"にパスを通しておく。

 

2.小説のダウンロード

ブラウザから右クリックでダウンロードするか、wgetコマンドで一括でダウンロードするかはご自由に。

現在、小説家になろうのurl構成はurl以下にindex.htmlがあり、同じ階層に小説ファイルが"数字/index.html"の形式で存在する。

なのでコマンドラインから

wget -U "Safari" 小説のURL/1/

wget -U "Safari" 小説のURL/2/

と実行していくと実行したディレクトリにファイルがダウンロードされる。ファイル名が重複するとwgetがファイルの末尾に数字を付加するので必要な分ダウンロードを実行する。

まとめてダウンロードを実行するシェルスクリプトを作成してもいいだろう。

 

3.HTMLをTeXのフォーマットに変換する。

まず、骨組みを用意する。

エディタで、以下のファイルを作成する。

\documentclass[a5j,12pt]{ltjtarticle}

 

% -----章を番号無しで表示し目次に表示するマクロ-----
\newcommand{\Section}[1]{\section*{#1}
\addcontentsline{toc}{section}{#1}}
\newcommand{\Subsection}[1]{\section*{#1}
\addcontentsline{toc}{subsection}{#1}}

 

% -----図の設定-----
\usepackage{graphicx}
\usepackage{float}

 

% -----ルビ使用の設定-----
\usepackage{luatexja-ruby}

 

% -----囲みの設定-----
\usepackage{boites}

 

% -----ヘッダ・フッタの設定-----
\usepackage{fancyhdr}
\pagestyle{myheadings}
\renewcommand{\headrulewidth}{0pt}

 

% -----余白の設定-----
\usepackage[top=20mm,left=10mm,right=10mm]{geometry}

 

% -----タイトル、筆者の設定-----
\title{\vspace{3cm} \Huge タイトル}
\author{\Large 著者名}
\date{\hspace{\fill}\today}

 

% -----本文-----
\begin{document}

 

% -----タイトル表示-----
\maketitle
\thispagestyle{empty}
\newpage

 

% -----目次-----
\tableofcontents

\newpage

 

\end{document}

 

 以上が縦書きpdf用のTeXファイルの骨組みである。

\end{document}の前にテキストデータを書き込んだ拡張子.texのファイルを作成し、ファイルをダブルクリックしてTeXShopを立ち上げ、タイプセットのメニューからLuaLatexを選択してコマンド+tを実行すると、コンパイル後、縦書きpdfが作成される。

またはコマンドラインから

lualatex 文書ファイル.tex

を実行する。

 TeXファイルでは以下の設定を行なっている。

・縦書きの文章を生成する。

\documentclass[a5j,12pt]{ltjtarticle}

・大見出しや中見出しに番号が付加されないコマンドを定義する。

\newcommand{\Section}[1]{\section*{#1}
\addcontentsline{toc}{section}{#1}}
\newcommand{\Subsection}[1]{\section*{#1}
\addcontentsline{toc}{subsection}{#1}}

・図を挿入できるようにする。

\usepackage{graphicx}
\usepackage{float}

・ルビをふれるようにする。

\usepackage{luatexja-ruby}

・文章を線で囲めるようにする。

\usepackage{boites}

・ヘッダ、フッタの設定

左上にページ数、右上に中見出しを表示する。

\usepackage{fancyhdr}
\pagestyle{myheadings}
\renewcommand{\headrulewidth}{0pt}

・余白を設定する。

\usepackage[top=20mm,left=10mm,right=10mm]{geometry}

・タイトル、著者名、pdf作成日を設定する。

タイトルは最大文字でページの中程に、著者名はやや大きな文字に、作成日はページの地から表示する。

\title{\vspace{3cm} \Huge タイトル}
\author{\Large 著者}
\date{\hspace{\fill}\today}

・1ページ目にタイトル、著者名、作成日を表示したのち改ページする。1ページ目の下にページ番号1が表示されるのでページ番号は表示しないようにする。

\maketitle
\thispagestyle{empty}
\newpage

・目次を作成して改ページする。

\tableofcontents

\newpage

 HTMLファイルからTeX形式のファイルへの変換

TeX形式の特徴を踏まえてHTML形式を変換する。

      • TeXでは行頭は自動でインデントするので、スペースでインデントしている場合は削除する。
      • TeXでは改行のみの行により、新しい段落が開始される。
        aaaa
        bbbb
        は2行に見えるがTeXでは
        aaaabbbbとなる。2行にするには
        aaaa

        bbbb
        と改行をいれる。
      • 上記の理由により改行のみの行は空白行と認識されないため、改行専用のコマンドを記述する。
      • 文章中にあるTeXのメタ文字があるとコンパイル時にエラーとなるので変換する。
        メタ文字
        # $ % & _ { } < > \ ^ | ~

ダウンドードした文書ファイルを特定のディレクトリに格納し、for文で1ファイルずつ処理していく。

ファイルネームは章が順番になるようにしておく。

 ・タイトルと著者名を取得する。

タイトルと著者名は以下のように記述されている。

作者:<a href="url">著者名</a>

dc:title="タイトル"

以上のタイトル名と著者名を取得してファイルに保存する。

タイトルと著者の取得は一回行えばよい。

 

・大見出しと中見出しを取得し、TeXのフォーマットに変換する。大見出しと中見出しは以下のように記述されている。

<p class="chapter_title">大見出し</p>

<p class="novel_subtitle">中見出し</p>

TeXのフォーマットは

\Section{大見出し}

\Subsection{中見出し}

\markright{中見出し} --ページ右上に中見出しを記述

に変換する。見出しは以下のように

大見出し1

 中見出し1

 中見出し2

 中見出し3

大見出し2

 中見出し4

 中見出し5

 中見出し6

のように大見出しが重複するので、そのチェックをおこない、重複してないときのみTeXの大見出しの記述に変換する。

 

・本文中の特定文字を置換する。

本文は

<p id="L数字">

 の後に記述されているので、この記述がある行に対してTeXでエラーがでる記述を置換する。

置換の一例

メタ文字(例:# $ % &)は全角に変換する。

&lt;や&quotなどのhtml記述を通常の文字列に変換する。

ルビの文字には表記の揺れ(半角でも全角でもOK)があるので全角に統一する。

 

・改行、ルビ、その他の処理

htmlの改行のみの記述

<p id="L数字"><br /></p>

TeX

\vskip\baselineskip

に置換する。

 htmlのルビの記述

<ruby><rb>ルビを振る文字</rb><rp>(</rp><rt>ルビ</rt><rp>)</rp></ruby>

TeX

\ruby{ルビを振る文字}{ルビ}

に置換する。

"!?"のような記述を縦書きにしたいときは

\rensuji{!?}

に置換する。

また、傍点があるときは、\bou{傍点を振る文字}に置換する。

 

1つのhtmlファイルの変換処理が完了したらテンポラリ用のファイルに追加して、用意したhtmlファイル全てに対して同じ処理を行う。

最後にテンポラリ用のファイルを、骨組み用のファイルに追加し、著者とタイトルを記述する。 

これらの作業をシェルスクリプトで記載すれば自動でpdf作成用のTeXファイルができる。

スクリプト

小説家になろうのコンテンツから縦書きpdfを作成する その2 - k-igrsの日記

のような感じ。