‘未分類’ カテゴリーのアーカイブ

Kindleで画面内表示画像サイズを%指定する

2018/09/28

 各ストアビューア向けのEPUB制作で、画面サイズに対して%で画像表示サイズを指定することは長らくできておらず、悩ましい問題です。これは2014年頃にEPUB組版表現の対応状況を調査し始めてから状況がずっと変わっていません。特にKindleでは、PaperWhiteなどの電子ペーパー専用端末とAndroid版では%指定が効くものの、iOS版Kindleアプリで効かないという状況が続いており(参考/項目7-9)、このために画像を画面内の特定のサイズで表示させるために「余白部分込み」で画像化するというまるでWebの初期のようなTipsを使用せざるを得ませんでした。
 これをやってしまいますと、ビューア側の設定で背景色を変えた際に余白部分が白く表示されて見えてしまうので可能ならば避けた方が良いのですが、サイズ指定が効かないよりはマシということで使われてきたわけです。
 ただ、最近JAGATの研究会活動の一環として改めて挙動をチェックしてみたところ、%指定が効かなかったiOS版Kindleでもどうやら単位にvw/vh※1を用いたサイズ指定なら効くことがわかりました。であるならば、もしかしたら%とvw/vhを同じ値で指定してやることでKindleの全プラットフォーム共通のサイズ指定ができるかもしれません。ということで試してみよう、というのが今回の趣旨です。

iOS版Kindleでサイズ指定が効いた!

 以下のようにCSSの指定を書き※2、テストファイルを作ってテストをしてみます。

 iOS版Kindleでの表示結果は以下の感じ。

iOS版Kindleの表示結果

 KindleはiOS版以外では普通に%指定が効くため、iOS版でサイズ指定が効けばよいので目論み通り成功です。他のKindleデバイスでも不具合は出ていないようです。ただ他社のビューアで不具合が出る可能性がありますので、一応それも見てみなければなりません。

他社製EPUBビューアで不具合が出る

 ということで他社ビューアでの表示結果もチェックしたのですが、残念なことにあるビューアで表示の不具合が出てしまいました※3。どうやらline-height(行高指定)とtext-combine-upright(縦中横)が効かなくなるようです。さて困りました。

メディアクエリで適用範囲をKindleのみに限定できないか

 ここで思い出したのがKindleのメディアクエリです。メディアクエリは一般的には表示ウィンドウサイズに応じて異なるCSSを当てる際などに使う技術ですが、Kindleでは「@media amzn-kf8」「@media amzn-mobi7」などの形で、デバイスごとに表示を切り替えるための独自の値を定義しています※4。これを利用してCSSの適用範囲をKidleのみに限定できないでしょうか。ということでCSSにメディアクエリを追記して再テストをしてみます。CSSは以下のような感じ。

 はい、成功です。

 ということでひとまず目的は達しました。とはいえ%でのサイズ指定が効かないのはKindleだけではなく、Mac版iBooks(もうApple Booksですが)でも同様だったりしますので、出来るなら将来的にはメディアクエリは外したいところです。各電書ストアビューアの表示対応を期待します。

※1 vwは表示中の画面(ビューポート)の横幅に対しての%指定、vhは高さに対しての%指定の意味。参考記事はこちら
※2 電書協EPUB3制作ガイドのCSS記述を参考にしている。
※3 中の人に報告上げてブログ記事作る間に該当のビューアで修正がかかった模様。対応が早くてありがたい。とはいえ不具合が出るビューアが1社だけとは限らないので記事としては残しておく。
※4 参考:http://epubsecrets.com/media-queries-for-kindle-devices.php

おまけ
EPUBで電書協ガイドの規定クラスに追記するには以下の形になるはず。book-style.cssの作品別カスタマイズ領域に書けばよい。

(2018.10.1)

「Kindle パブリッシングガイドライン 2018.2」更新内容チェック

2018/08/03

Amazon Kindle向けコンテンツ作成の仕様書、「Amazon Kindle パブリッシングガイドライン」が更新されていたようですので、更新部分をざっくりとチェックしました。英語版はこちら。以下、見出しは元文書の見出し項目そのまま、赤字は特に重要と思われる箇所です。ご一読ください。

“2.1.1 Kindle Create”

 Kindle Createについての表記追加。.doc/.docx形式のファイルからKindleドキュメントを生成できるもの。ただし現状まだ日本語には未対応のよう。

“3 フォーマットの比較”

 「タイプセッティングの改善のコラムを追加」とある。ここでのコラムは表組みの「列」の意味と思われる。

“6.7 サポートされる文字とスペースの使用”

 「問題を起こす可能性があるため、Unicode 形式の文字は使用しないでください」とあるが、「Unicode 形式の文字」は英語版ドキュメントでは「Unicode format characters」とあり、「Unicodeの制御文字」と訳すべき箇所。
 おそらくU+0000 – U+001F(C0制御コード)、U+007F(削除文字)、U+0080-U+009F(C1制御コード)などを指していると思われるが(参考)、U+2028(LINE SEPARATOR)、U+2029(PARAGRAPH SEPARATOR)なども制御文字であるため注意が必要。また、U+0000〜U+001Fの制御文字のエリア内でもU+000A(LF)やU+000D(CR)などは改行コードであり、これを使うなというのは現実味がない。具体的に使うべきでないコードポイントを明示して欲しい。

“7.1 内部リンクに関するガイダンス”

 「意図しない脚注のポップアップが表示されないようにするには、脚注ではない内部リンクに双方向ハイパーリンク (A から B へのリンクと B から A へのリンク) を設定しないでください。」とある。作り方としては一般的だが、制作指針に縛りをかける要望ではある。
 また「現在、電子書籍端末の固定レイアウトの本では、内部ハイパーリンクはサポートされていません。」とあり、ここはずっと変わっていない。

“7.2 外部リンクのガイドライン”

 「本から外部Webサイトへのリンクは、読者体験とAmazonによって定められた本のコンテンツをより一層意義あるものにし、それらに直接関係のある場合に限ります。」とある。外部へのリンクは技術的に可能でも規約上の制約がかかるため注意が必要。
 「Amazonはリンクを独自の判断で削除する権利を有します。」ともある。

“9.1 メタデータのガイドライン”

 「<dc:language>」および「<dc:title>」が必須、ページめくりの方向が左から右ではない場合、メタデータまたは背表紙に「<meta name="primary-writing-mode" content="horizontal-rl"/>」のような形でページめくり方向を明示する必要がある、との記述。これはAmazon独自のメタデータなので注意が必要。従来これはフィックス型のEPUBでのみ必要な措置だったように記憶しているのだが、リフロー型でも必要になったようにも読める。だとすればメタデータの追記が必要になるだろう(ちなみにこの「horizontal-rl」という記述も以前からある罠で、「horizontal-lr」もしくは「vertical-rl」になると思われる。一度引っかかった)。なお、 「背表紙」は「Spine」をそのまま訳してしまったミス。OPFのSpine項目への記述のことと思われる。「<spine page-progression-direction="rtl">」の記述で代替できるということか?

“9.3.11 Real Page Number の有効化”

 実ページ番号のサポート。教科書など教育関係の本で要望がずっとあったもので、iBooksなどではかなり前からサポートされていた(参考)。
 「出版者は、電子書籍のReal Page Numberをその電子書籍と最も一致度の高い印刷版(ハードカバー、ペーパーバックなど)にマッピングし、ISBNをhttp://kb.daisy.org/publishing/docs/navigation/pagelist.html#descに従いメタデータに指定する必要があります。」とあり、紙版の書籍と電子版の双方を刊行する前提の本で使うことを想定したものであることがわかる。米国などでのKindleの教育市場へのニーズを伺わせる機能追加。おそらくは電子教科書用だろう。
 なお、「サイドロードでプレビューできませんが、電子書籍が出版されると表示され、詳細ページにも記載されます。」とあり、残念ながら実際の挙動を確認することはできなかった。

“9.3.12 脚注のガイドライン”

 「脚注のマーキングには HTML5 の aside 要素を epub:type 属性と組み合わせて使用することを強くお勧めします。その場合、アクセス可能な端末では指示が追加されていない限り脚注を無視することができます。」とある。脚注を通常の画面内では非表示にし、リンクを叩いた際にだけ表示させるという意味かと思う。
 脚注のポップアップ表示にも対応したとのこと。なお脚注のポップアップ自体はiBooksや楽天KoboのiOS版、Microsoft Edge(同一xhtmlファイル内に脚注のジャンプ先がある場合のみ)では既に対応済み(参考)。Kindleでは専用端末のKindle PaperWhiteなどで脚注表示の挙動は見られたが、これはepub:type 属性を無視して相互リンクを脚注と見なす極めて不完全な対応だった(参考)。
 KindleがEPUBの脚注の正式な規格であるaside要素およびepub:type属性への対応を謳ったのは今回が初である。どう変わったのか挙動を見てみたのだが、現状Kindle FireおよびKindle PaperWhiteでポップアップの挙動は見られなかった。また、Kindle PaperWhiteではリンク自体が動作しないという挙動があり、これは早急に修正して欲しいところ。

“9.4.11 サポートされている SVG タグと要素を使用する”

 SVGの項目自体は以前からあったが、「タイプセッティングの改善」に関係する記述が追加されている。ここだけでなく影響はありそうなので注意が要りそうだ。

“9.5.2 シンプルな HTML の表を作る”

 ここにも「タイプセッティングの改善」に関する追加記述がある。

“9.6 MathML のサポート”

 数式のMathML表記をサポートしたとのこと。

“15.1 タイプセッティングの改善について”

 今回の更新内容の多くの項目が「タイプセッティングの改善」機能に絡むものだが、日本語はまだ対応言語に入っていないようなのでまだ考えなくてよい模様(15.5 
サポート対象の言語)。

“16 付録 B: タイプセッティングの改善でサポートされている属性とタグ”

 サポート対象のCSSプロパティ、HTMLタグが列挙されている。

今回、Real Page Number対応やepub:type 属性での脚注ポップアップ対応、MathML対応など大きな追加ポイントがありましたが、潜在的に最も大きな変化は「タイプセッティングの改善」(まだ日本語非対応ですが)に関するものでしょう。これは改訂履歴の項目の大部分がこれ絡みであることからわかります。
どうもずっとこの機能は謎のままだったのですが、今回の改訂から推測する限りでは、フォントサイズや端末の種類に伴う画面サイズなどの変化に応じてKindle側が随時CSSの値の調整を行う機能であるように思われます。つまりメディアクエリ的なことをKindleが自動でやるということです。これは日本語コンテンツでも使えるようになれば相当以上に大きな変化がもたらされるものと思います。ただし実機でのコンテンツ表示チェックは相当以上に大変になりそうです。Amazonがレンダリングエンジンの不具合を長期放置している理由もこれの対応が絡んでいるような気はします。

(2018.8.6)

テキストエディタmiがバージョン3.0でかなり機能強化されていた

2018/06/25

 EPUBを作るためにフリーのmac用テキストエディタ「mi」(旧ミミカキエディット)のバージョン2.1を愛用していたのですが、そろそろOSのバージョンが上がってきて64bit対応しなければならないのが見えてきたので正式リリースバージョンの出ていたバージョン3.0を試したところ、かなりの機能強化がなされていたようなのでちょっと紹介です。以下新機能や前からあったけれど良いなと思っている機能を箇条書きで。

1.タブセットを保存

タブセットを保存

タブセットを保存

 miはもともとタブ表示機能を持っていたテキストエディタでしたが、3.0で開いていたタブの情報を保存しておけるようになったようです。作業切り替え時などに混乱を防ぐために開いていたタブを一旦閉じざるを得ないことはよくあるので有難いかも。

2.ファイルパスをコピー

ファイルパスをコピー

ファイルパスをコピー

 地味だけど現在開いているファイルのパスをコピーできる機能が追加。コード書いている時などにターミナルで動作テストはよくやるので有難いかも。

3.強化された検索置換機能

強化された検索置換機能

強化された検索置換機能

 検索置換関係が相当機能強化されている様子。一度設定した検索置換セットを「検索メモリー」機能で名前を付けて保存しておけます。スゴい便利そう。それから置換テーブルを別ファイルで用意して一括置換もできるようになったようです。また、「一致テキストを新規ドキュメントに抽出」などという機能も見えます。正規表現もドロップダウンメニューから選んで入力できるように。

4.マルチファイル検索/マルチファイル置換

マルチファイル検索

マルチファイル検索

マルチファイル置換

マルチファイル置換

 miには2.1からマルチファイル検索の機能がありましたが、3.0でマルチファイル置換の機能が加わって強力になりました。一度マルチファイル検索を実行してから置換対象ファイルを選んで置換を実行する形なのもうれしい感じ。置換実行前にファイルをバックアップなどという機能もあって至れり尽くせり。この辺の機能でうっかりミスをやらかすと悲劇が待ってますからね。

5.コードの折りたたみ表示

コードの折りたたみ表示

コードの折りたたみ表示

 コードの折りたたみ表示にも対応したようです。長めのスクリプトを書くときに全体の見通しが良くなりそう。

6.見出しリスト

見出しリスト

見出しリスト

 見出しをリスト表示してクリックでジャンプ。まあこれは2.1からあった機能なんですが便利なので紹介。EPUB用のXHTMLとかだとかなり長めのテキストを編集することになるので見出しで飛べるのは有難いです。

7.テキストの比較

テキスト比較

テキスト比較

 いわゆるdiff機能ですがかなり機能強化されたようで「ファイルと比較」「クリップボードと比較」などの機能が増えたほか、設定すればgitやsubversionとの連携もできるようになった模様です。

8.モード機能

モード機能

モード機能

モード編集画面

モード編集画面

 miと言えば「モード」機能が強力無比です。自分で「モード」を作ってよく使うタグコマンドなどを簡単に入力できるようにし、特定の用途用の専用エディタに仕立て上げることができます。ショートカットもカスタマイズできますし各種スクリプトも仕込めるのでまあ相当なことができるわけです。私はこんな感じで使ってます。

9.縦書きモード

縦書き表示の対応

縦書き表示の対応

 今回から縦書き表示にも対応したようです。設定すれば原稿用紙風の表示も可能。簡単なワープロ代わりとしても使えるようになってきた感じでしょうか。

10.サブ画面表示

サブ画面表示

サブ画面表示

 画面を左右2分割して参照テキストを表示しながら編集できるようになりました。CSSファイルを開いてクラス名を確認しながらXHTMLを修正するなどのシーンで威力を発揮しそう。

11.ビューの縦分割

画面分割表示

画面分割表示

 編集中のテキストの縦分割表示もできます。同一ファイル内でのコピー&ペースト作業は日常的に発生するので有り難いかと。

12.単語の自動ハイライト

単語の自動ハイライト

単語の自動ハイライト

 個人的にスゴいなと思ったのがコレ。カーソルを置いた場所を含む単語を自動識別して同じ単語をリアルタイムでハイライト表示します。挙動を見る限りではどうやら形態素解析まではやっていないようで、連続する漢字/カタカナ/ひらがな/英文字を識別しているだけのようですがまあ挙動も軽いしそれで必要十分な感じ。ナチュラルに修正の見落としが減りそうで素晴らしいです。

13.テキストハイライトパレット

テキストハイライト表示

テキストハイライト表示

 特定の単語を指定してハイライトさせることもできます。「テキストハイライト」パレットに単語を登録してやればOK。ハイライト単語リストを複数登録しておいて切り替えて表示させることもできるようです。

14.テキスト情報パレット

テキスト情報

テキスト情報

 「テキスト情報パレット」で、特定の文字のUnicode値などを気軽にチェックできるようになりました。これ個人的にはとても嬉しいです。macOSの以前のバージョンではmi等でテキストを選択してATOKの文字パレットを開くとコードポイントがチェックできていたのですが、バージョンアップで出来なくなってしまっていたので。

15.プレビューパレット

プレビュー表示

プレビュー表示

 今回からXHTMLなどの表示結果をプレビューモードで見ながら編集できるようになりました。縦書き表示の結果もきちんと反映されていましたので、そこまで凝ったレイアウトでもなければ十分役に立ちそうです。

 どうでしょうか。なかなか山盛りの機能追加で見ていて嬉しくなって来てしまいます。これがフリーウェアで本当にいいのかという感じ。触れる環境にある方はぜひ試してみてください。

(2018.6.26)

プロフィール
Jun Tajima

こちらにて、電子書籍&Web制作を担当しています。
このブログは、EPUB3をはじめとした電子書籍制作担当オペレータからの、「電子書籍の制作時にたとえばこんな問題が出てきていますよ」的な「現地レポート」です。少しでも早い段階で快適な電子書籍閲覧・制作環境が整うことを願って、現場からの声を発信していこうと目論んでおります。

当ブログ内の記事・資料は、私の所属しております組織の許諾を得て掲載していますが、内容は私個人の見解に基づくものであり、所属する組織の見解を代表するものではありません。また、本ブログの情報・ツールを利用したことにより、直接的あるいは間接的に損害や債務が発生した場合でも、私および私の所属する組織は一切の責任を負いかねます。