#「小説家になろう」について
小説家になろうは、近年、ファンタジー系のWeb小説個人投稿サイトでは(たぶん)最大手のWebサイトです。
書いた小説は、作者自身ならバックアップ用ファイルをtext形式でダウンロードできます。
このファイルはプレーンテキストであり、htmlやjson等の構造化テキストではありません。
#TeXにしてみよう
元々WebサイトをHTML化してもつまらないのでTeXファイルに変換することにしました。
出力はレイアウト最低限の措置のみとし、一般に印刷不要の内容は削っています。また、正規表現の置換なので、偶然にキーワードと一致する記述が作品中にあれば誤変換します。
なお、Perlは普段、ほとんど使わないのでshellに混ぜて使用という邪道です。(Perlやsedの熟練した人には効率の悪いスクリプトですが。)
とりあえずMacOS Catalina + ptex2pdfで変換できました。BSD sedはGNU sedを使えばもっと楽なコードになるかと思います。(「小説家になろう」ユーザーとしては、GNU sed版は呪文感があるなどと余計なことを思いますが。閑話休題。)
「小説家になろう」のTeX化にどれほど需要があるかわかりませんが、一つのテストケースとして。
##bash+Perl版
#!/bin/bash
LANG=C
FILE=Desktop/result.tex
cat << 'EOF' > $FILE
\documentclass[uplatex,a4paper,12pt]{jsbook}
\usepackage[utf8]{inputenc}
\usepackage[driver=dvipdfm,truedimen]{geometry}
\geometry{left=25truemm,right=25truemm,top=25truemm,bottom=25truemm}
{\catcode`\^^M=\active
\gdef\xobeylines{\catcode`\^^M\active \def^^M{\par\leavevmode}
\setlength\parindent{0pt}
}
\global\def^^M{\par\leavevmode}}
EOF
perl -0pe 's/\n【免責事項】.*/\\end{document}/s' $1 |
perl -0pe 's/【本文】\n|----.*\n//mg' |
perl -0pe 's/【サブタイトル】\n(.*)\n/\\section{$1}/mg' |
perl -0pe 's/【第.章】\n(.*)\n/\\chapter{$1}/mg' |
perl -0pe 's/【タイトル】\n(.*)\n/\\title{$1}/m' |
perl -0pe 's/【作者名】\n(.*)\n/\\author{$1}/m' |
perl -0pe 's/【最終掲載日時】\n(.*)\n/\\date{$1}/m' |
perl -0pe 's/【.*?\\/\\/sg' |
perl -0pe 's/(\\chapter)+?/\\begin{document}\n\\maketitle\n\\xobeylines\n\\chapter/' >> $FILE
##sed版(BSD sed)
sed版はヒアドキュメントの中でエスケープ(「`」「\\」など)が幾つかあるので留意。
#!/bin/bash
LANG=C
FILE=Desktop/result.tex
cat << EOF > $FILE
\documentclass[uplatex,a4paper,12pt]{jsbook}
\usepackage[utf8]{inputenc}
\usepackage[driver=dvipdfm,truedimen]{geometry}
\geometry{left=25truemm,right=25truemm,top=25truemm,bottom=25truemm}
{\catcode\`\^^M=\active
\gdef\xobeylines{\catcode\`\^^M\active \def^^M{\par\leavevmode}
\setlength\parindent{0pt}
}
\global\def^^M{\par\leavevmode}}
\title{`w='【タイトル】';grep -A 1 $w $1|grep -v $w`}
\author{`w='【作者名】';grep -A 1 $w $1|grep -v $w`}
\date{`w='【最終掲載日時】';grep -A 1 $w $1|grep -v $w`}
\begin{document}
\maketitle
\xobeylines
`sed -n '/----/,$p' $1|sed -n '/【免責事項】/q;p'|sed '$d'|sed -e ':a' -e 'N' -e '$!ba' -e 's/【サブタイトル】\n/\\\section{/g'|sed -e ':a' -e 'N' -e '$!ba' -e 's/【第.章】\n/\\\chapter{/g'|sed -e '/【本文】/d' -e '/----/d' -e 's/section{.*/&}/g' -e 's/chapter{.*/&}/g'|sed -e ':a' -e 'N' -e '$!ba' -e 's/}\n/}/g'`
\end{document}
EOF
なお、ptex2pdfをインストール済みの場合、いずれもシェルスクリプトの最後に下記を付け足せばPDF生成まで自動で進められます。
ptex2pdf -u -l -i -output-directory 'Desktop/' $FILE
##参考ページ
TeXでつくる可能な限りWYSIWYGな文書
sedで改行を置換・削除する | 俺的備忘録 〜なんかいろいろ〜