1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-02-13

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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?