Kindle mobi, azw 形式 ページ余白設定

Kindle mobi, azw, azw3 形式においてページ余白の長さは CSS などのスタイル設定では指定できそうにない( page width や screen margin などの設定項目が見つからない)。

ページ(スクリーン)の余白の長さに影響するのは opf ファイル( standard.opf や content.opf などのファイル名である)の primary-writing-mode 指定である。文書が縦書きの場合は、これが適切に設定されていないとKindle端末で思うようにスクリーン余白が確保されない。
下記は縦書きの場合の設定例。

opfファイルの設定

  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
...

<!-- レンダリング指定 -->
<meta property="rendition:layout">reflowable</meta>
<meta property="rendition:orientation">auto</meta>
<meta property="rendition:spread">auto</meta>
...
<dc:title id="title0">小説を読もう</dc:title>
<dc:creator id="creator0">著者太郎</dc:creator>
<meta property="dcterms:modified">2018-04-29T09:00:00Z</meta>
...
<meta name="primary-writing-mode" content="vertical-rl"/>
</metadata>
...

さて、電子書籍の作成用スクリプトとして、ネット上では easy_epub, easy_epub-denshokyo が入手できるが、2018年4月現在、これらのスクリプトepubファイルを作成しても primary-writing-mode の設定が書き出されない。
primary-writing-mode を設定するには、後続の作業としてスクリプトで生成された epub ファイルを calibre のようなツールで編集するか、下記のように修正した easy_epub.pl を使うかの方法が考えられる。

easy_epubソースコード修正(赤い箇所が追加行)


...
sub content_opf{
my $self = shift;
my $args = shift;

$args->{title} = 'タイトル' if ! $args->{title};
$args->{author} = '著者名' if ! $args->{author};
my $page_progression_direction = $args->{page_style} ? 'ltr':'rtl';
(527行目辺り)
my $primary_writing_mode = $args->{page_style} ? 'horizontal-tb':'vertical-rl';

...

...
<meta property="dcterms:modified">${ymd}T09:00:00Z</meta>
(663行目辺り)
<meta name="primary-writing-mode" content="$primary_writing_mode"/>
</metadata>