Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@hiro_literal

「小説家になろう」バックアップファイルをTeX変換する

More than 1 year has passed since last update.

「小説家になろう」について

小説家になろうは、近年、ファンタジー系の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で改行を置換・削除する | 俺的備忘録 〜なんかいろいろ〜

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?