‘InDesign’ タグのついている投稿

InDesignの制御文字について調べてみた

2016/04/13

 InDesignはとても多様な機能を持ったDTP組版アプリケーションです。そして、その多様な機能をドキュメント内部で記録しておくために、当然さまざまな「制御文字」を使っています。この制御文字は、XML書き出しやEPUB書き出しなどをした際には意味を持たなくなるわけですが、これがそのままXMLに書き出されれば当然トラブルの種になりそうです。ということで、InDesignの制御文字についてちょっと調べてみました。なお、調査した環境はOS X 10.9/InDesign CS6です。

調査対象の文字

 今回調査の対象にしたのは、InDesign内コンテキストメニューの「特殊文字の挿入」「スペースの挿入」「分割文字の挿入」から選択して入力できる文字のうち、明らかに通常の記号に過ぎないものおよび、ページ番号など通常EPUBには書き出さないものを除いたもの(「特殊文字/記号」「特殊文字/マーカー」「特殊文字/引用符」項目を除去)、および、索引マーカー、脚注マーカーなどの各制御文字です。また、今回の基本資料として、こちらの英文記事を参考にしました。

 これをもとに機能名を日本語版InDesignでの表記に置き換え、またEPUB制作時にXMLでの書き出しを行うとどういった状態で出力されるのか、同じくコピー&ペーストで書き出した場合はどうなるかに関して調べました。結果が以下の表です(クリックでGoogleドキュメントの元データにジャンプ)。

column54_1

 特に注意が必要そうな箇所は赤で塗りつぶしてあります。XML書き出し時にはかなりの制御文字が削除もしくは置き換えられていることがわかります。また、改行などを見ればわかるように、同一のコードが複数の制御文字に割り当てられています。あくまで推測ですが、InDesign内で異体字を表示する際に親字のUnicodeひとつに対して複数の異体字をaalt等のサブ属性を割り振って管理しているのと同種の処理を行っているのではないかと思います。

XML書き出しで問題が出そうな文字

 さて、InDesignはXML書き出し時におおむね問題のない置換を行ってくれているようなのですが、いくつかちょっと問題のある処理があるようです。
ちょっと問題ありそうな箇所を列挙してみます。

・U+2011の分散禁止ハイフンが消えてしまう
・U+2003のEMスペースが通常の半角スペースに変わる(幅が狭すぎる)
・U+00A0の分散禁止スペース(ノーブレークスペース)がそのまま残る
・U+2006の1/6スペースがそのまま残る
・U+2005の1/4スペースがそのまま残る
・U+2004の1/3スペースがそのまま残る
・U+000Aの強制改行が通常の半角スペースに変わる
・U+200Bの任意の改行がそのまま残る

 「分散禁止ハイフン」が消えてしまうのはとても困った挙動で、これは欧文の前後の文字を行末改行させないという挙動以外は通常のハイフンと変わらない約物ですので、消えてもらっては困ります。せめて通常のハイフンに置換して欲しいところです。

 また、特殊幅スペース類に関しては、欧文フォントにはグリフの割り当てがあるようですので将来的にEPUBのほとんどのビューアで部分言語指定がきちんと反映されるようになってくればそのままでもよいかと思うのですが、現状では部分言語指定が効くビューアの方が少数で、また日本語フォントには該当コードポイントにグリフの割り当てがないようですので、現状まだ半角スペース等に変換した方が無難と考えます。

 それから改行コード類ですが、「強制改行」は通常、組版の最終段階で文章中の改行位置の微調整に使うものですので、これが半角スペースになるのは困ります。削除が正しい対処かと思います。あとは「任意の改行」ですが、これは主に欧文などで長い単語が行末に来た際などに改行を許す位置を指し示すためのものですので、こちらもEPUB化では削除するのが正しそうです。
 他には「索引の付加位置を示すマーカー」「脚注のマーカー」「アンカーオブジェクトのマーカー」「CID/GIDしかない文字のInDesign内部表示用キャラクタ(参考)」が消えてしまうのも問題で気になるところですが、これらについては目視確認して個別箇所の処理が必要になりますので、別枠とします。

XML書き出し前にInDesign内で置換処理を行う必要がある

 さて、対処なのですが、どうやらXML書き出しを行う前に、InDesign内で処置をする必要がありそうです。例えば強制改行などは半角スペースに置換されて書き出されてしまうため、XML書き出しを行った後では目視で潰すしかなくなってしまいます。ということでInDesign内でスクリプト処理を行うとすると、例えばAppleScriptを使って

 といった形で、検索置換パレットを使ったループ処理を行うことになります。多少時間がかかりますが、制御文字の性質上これは仕方ありません。

コピー&ペーストで問題の出そうな文字

 一方でInDesign内のテキストをそのままコピーし、テキストエディタにペーストした場合には、索引マーカー、脚注マーカー、アンカーオブジェクトマーカー、XMLタグマーカーなどを例外として、ほぼ全ての制御文字がそのままペーストされるようです。miにペーストした際にはU+2001のフラッシュスペースがU+2003のEMスペースに変換されるという挙動が見られたのですが、これはどうやらmiのみの問題のようで、テキストエディット等にペーストした際にはU+2001のままペーストされました。おそらくmiの内部でこのコードポイントを使用して何らかの処理をしており、それとバッティングするのを防ぐために変換されたものと思われます。

 そのままペーストされるということは制御文字が剥き出しになるということなので、これは置換、削除する必要が出てきます。処理内容としては

・U+00ADの任意ハイフン → 削除
・U+0008の右インデントタブ → 削除
・U+0007の「ここまでインデント」文字 → 削除
・U+0003の先頭文字スタイルの終了文字 → 削除
・U+200Cの結合なし → 削除
・U+2003のEMスペース → 全角スペースに
・U+00A0の分散禁止スペース → 半角スペースに
・U+202Fの分散禁止スペース(固定幅) → 半角スペースに
・U+200Aの極細スペース → 半角スペースに
・U+2006の1/6スペース → 半角スペースに
・U+2009の細いスペース → 半角スペースに
・U+2005の1/4スペース → 半角スペースに
・U+2004の1/3スペース → 半角スペースに
・U+2008の句読点等の間隔 → 半角スペースに
・U+2007の数字の間隔 → 半角スペースに
・U+2001のフラッシュスペース → 半角スペースに
・U+200B任意の改行 → 削除

 といったところでしょうか。強制改行が普通の改行と見分けられなくなってしまうのは問題ですが、これはテキストになってしまった後では目視で発見するしかありませんので自動処理はできません。あるいはコピー&ペーストする前に(テキストデータにする前に)InDesign内の検索置換で消しておくというような処置をすることになるでしょう。

(2016.4.13)

市川せうぞー師匠より関連情報をお知らせいただきましたのでリンクを貼っておきます。こちらはJavascriptで自動組版する際の制御文字の扱いに関する情報の模様。

(2016.4.14追記)

InDesign出力XML→XMDF変換スクリプト公開

2012/08/10

 「緊デジ」でリフロー型EPUB3の制作受け入れが決まりました。同時に出版社サイドからの制作会社指定が可能になり、PDF制作にも対応、申請点数の上限を年間発行点数の2倍までとした規定の廃止など、申請条件を大幅に変更した旨のお知らせが、緊デジサイトに掲載されています。EPUB3の制作ガイドラインの内容告知、EPUB制作会社の選定準備等は9月1日以降になるとのことで、XMDF・ドットブック形式の制作会社はすでに決定しはじめていると思われるものの、8月7日現在での申請数が未だ目標の6万点の半分にも届いていない状況を考えると「一度仕切り直し」感は否めません。

 ほとんど前例のないプロジェクトですので関係者の方を一方的に責める気にはなれないのですが、制作サイドの会社に所属している一人としては、ここまでスケジュールが遅れている現状でなお当初の予定通り3月末までに6万冊を揃えることが可能な見通しなのか不安があります。おおざっぱなものでも構いませんので、早い時期に今後の制作スケジュールの見通しを示していただくことを望みたく思います

 さて、私の所属している会社は結局XMDF・ドットブックの緊デジ制作会社には選ばれなかったのですが、制作に向けてXMDF変換スクリプトの準備は進めておりました。制作者としてこのまま無駄にするのも忍びない思いがありますので、会社の許可を得てこれを公開してしまうことにしました。以下よりダウンロードいただけます。

InDesign CS5 XML→XMDF変換スクリプト

ID5XML2xmdf Win用 (1020)(XMLファイルを「ID5XML2xmdf.bat」にドラッグ&ドロップすると置換されます)
ID5XML2xmdf Mac用 (847)(XMLファイルをテキストエディタ「mi」で開き、スクリプトを実行すると置換されます)

 なおこれは、私のブログに掲載されております「InDesign→EPUB3用XHTML作成ワークフロー」の手順に従ってタグ付け作業を行ったInDesignデータから書き出したXMLデータを、XMDF本文用のXMLデータに変換するためのスクリプトです。手順19までは共通の流れとなりますのでご了解ください。また、配布スクリプトをWindows環境でご使用いただくには、あらかじめActivePerlのインストールが必要になります。
 割り当てるタグの名称等は上記ワークフローのそれに準じます(つまり、同一のXMLソースからスクリプトの切り替えだけでEPUB用XHTMLとXMDF用XMLの双方の出力が可能です)。

XMDFビルダー側で必要になる作業

 本文をXMDF形式のXMLデータに変換した後、実際にXMDFコンテンツとして書き出すためにXMDFビルダー側で以下の作業が必要になります。なお、XMDFビルダー内での詳細な操作に関しましては、XMDF情報スクエアにてログイン後ダウンロード可能な説明書をご参照下さい。また、緊デジでの作業内容に関しましては、公式サイトのガイドライン等をご参照いただければ幸いです。

1 テキストをコピー&ペーストします

テキストをコピー&ペースト

テキストをコピー&ペースト

 変換済のXMLファイルをメモ帳等で開き、一番上の「<?xml version="1.0" encoding="UTF-8" standalone="yes"?>」の行を除いた全てのテキストを、XMDFビルダー「ワークスペース」内の「フロー」にコピー&ペーストします。また、画像・外字画像等を使用している場合は、「パーツマネージャー」からコンテンツ内に取り込んでおきます。

2 スタイルを設定します

スタイルを設定

スタイルを設定

 「文書構造スタイル」「文字スタイル」を設定します。書き出されたタグのうち、「<structure style="○○">」の「○○」が文書構造スタイル名(InDesignで言うところの段落スタイル名)に相当します。同じく「<font style="××">」の「××」が文字スタイル名です。
 XMDFビルダー内「基本構成」メニュー内「スタイル」にて設定できますので、適宜適切な値に設定します。各スタイル名をスクリプトが自動出力する値以外に設定したい場合は、あらかじめテキストエディタの一括置換機能などでXMLファイル内のスタイル名を置換した上で、XMDFビルダー側に置換後の名称を設定することで対応できます。
 なお、「コンテンツテンプレート」機能を用いて各種パラメータをインポート/エキスポートできますので、見出し/本文等のスタイル設定を保存しておくことは可能です。

3 画像の回り込みなどを設定します

画像の回り込み等を設定

画像の回り込み等を設定

 必要であれば画像の回り込み、表示方法などを設定します。

4 文書内リンク等を設定します

文書内リンクの設定

文書内リンクの設定

 文書内リンクは「<char_id char_id="■">※</char_id>」といった形で出力されますので、「■」を選択して「装飾編集」パレット「イベントID」からID番号を入力し、「基本構成」メニュー内「イベント編集」で移動先のページ等を設定します。なお、こちらの作業は手順として、一冊分全てのフローを設定した後で行った方が効率的と思われます。

5 外字の代替文字を入力します

 外字は「<external_char alt="〓" alt_img=”cid-0000.png” />」のような形で出力されますので、「〓」部分に適宜代替文字を入力します。代替文字を入力しなくても、外字画像が適切に設定されていれば通常表示に問題はありませんが、将来的な変換や読み上げ等の対応を考えた場合、入力しておいた方が何かと流用が効きやすいデータになるように思います。

InDesign内で外字ファイル名にルビを設定

InDesign内で外字ファイル名にルビを設定

 なお、外字にルビをかける場合は、InDesignドキュメント内にインラインで記述されている外字ファイル名(「InDesign→EPUB3用XHTML作成ワークフロー」手順3参照)にグループルビとしてルビを入力しておくことで、自動で変換出力されます。
 なお、EPUB3出力でも同様の外字ルビ処理に対応するため、そちらのスクリプトも改訂いたしました。適宜ダウンロードしていただければ幸いです。

 緊デジでの画像サイズの設定、ファイル名の規定等に関しましては、公式ガイドラインをご参照下さい。また、こちらのスクリプトを使用したことによるデータ破損等の損害に関しまして、私としては責任は負いかねますので、あくまで自己責任でご使用ください。

(2012.8.10)

Mac用置換スクリプトで「<p.indent>〜」等の記述が正常に変換されないケースがあった問題を修正しました。

(2012.9.6)

先頭文字/行/正規表現スタイルの処理を考える

2012/07/09

正規表現スタイル

正規表現スタイル

 InDesignには、「段落スタイル」設定内の「ドロップキャップと先頭文字スタイル」から設定できる「先頭文字スタイル」および「行スタイル」、同じく「段落スタイル」設定内で使用できる「正規表現スタイル」といった便利な機能があります。これらは全て、段落スタイルの適用されている行内の文字のうち、設定した特定の条件に適合する文字に自動的に指定した文字スタイルを適用する機能です。例えば「先頭文字スタイル」であれば、文中の数字だけを自動的に斜体にする、「行スタイル」であれば1行目だけを太字にするといったような、通常長時間の反復処理が必要になる作業を段落スタイルの設定のみで処理できます。「正規表現スタイル」はさらに自由度が高く、正規表現を用いて適合する文字列を指定できます。例えば「A」「B」「C」だけを太字にする、いったような処理も簡単に行うことができます。ここでは正規表現そのものについては触れませんのでこちらをご参照ください。
 これら特殊スタイルはInDesign内では「段落スタイル」のみが適用されており、文字スタイルは「なし」になっているように見えるため、電子書籍制作時にきちんとした処理がされるのかどうかちょっと気になるところです。

 そこで、実際の電子書籍制作時の流れの中で、これら特殊スタイル類がどのように処理されるのか試してみました。

「スタイルをタグにマップ」で正常にタグが付加されないパターンがある

行スタイルのタグに問題が出る

行スタイルのタグに問題が出る

 最初に、私がこちらのブログ内で紹介しているあらかじめ各文字に段落スタイル・文字スタイルを適用しておき、「タグ」パレットの「スタイルをタグにマップ」でタグを付加してXML書き出しを行う方法をテストしました。

 まずはシンプルに「先頭文字スタイル」「行スタイル」「正規表現スタイル」を単体で適用してみます。「先頭文字スタイル」および「正規表現スタイル」についてはきちんとタグが付加されているようですが、「行スタイル」に関しては、最後の一文字に正常なタグ付加がされていないようです。

重ねがけで正常にタグが付加されない

重ねがけで正常にタグが付加されない

 次にこれら特殊スタイル類の重ねがけを試してみます。「行スタイル」を含んだ段落のタグが全て1文字ずつずれて適用されている他、「先頭文字スタイル」と「正規表現スタイル」との重ねがけに関しても、「先頭文字スタイル」のみがタグ付加され、「正規表現スタイル」の部分にはタグが付加されていません。これではちょっと危なくてタグの自動付加はできません
 なお、「行スタイル」の最後の1文字にタグが付加されないのは、バグの類ではないかと思われます。

IDMLには文字スタイルが書き出されない

XMDFビルダーに文字スタイルが取り込まれない

文字スタイルが取り込まれない

 次にIDML(InDesign Markup Language)形式でデータを書き出し、XMDFビルダーに取り込んでみます。これは緊デジのXMDF制作ガイドラインで想定されている制作方法です。

 どうやら、特殊文字スタイル類は完全に無視され、段落スタイルのみが取り込まれるようです。つまり、XMDFビルダー内で全ての文字スタイルを再割り当てすることになってしまいます。これはちょっと作業量的に避けたい流れです。

文字カラーを変更し、検索置換パレットを使用して文字スタイルを再適用する

 さて、結局どちらにしても文字スタイルの再適用は避けられそうにありませんので、出来るだけ楽をしてスタイル再適用の作業を行いたいところです。とりあえず以下のようなワークフローを考案してみました。なお、このワークフローを使用したことに伴うトラブルに関して、私として一切の責任は負いかねますので、こちらの作業を行う前には必ず元データをバックアップしておき、コピーしたデータで作業を行うことをおすすめします。

1 文字スタイルの「文字カラー」を変更する

文字スタイルの「文字カラー」を変更する

文字スタイルの「文字カラー」を変更する

 まず、先頭文字/先頭行/正規表現スタイル内で使用されている文字スタイルの「文字カラー」を変更します。多色刷りなどのデータの場合には、登録済みのスウォッチカラーがドキュメント内のいずれかの箇所に使われている可能性を考慮し、トラブルを避けるためにもスウォッチを新規作成して割り当てることをおすすめします。

2 先頭行スタイル内の先頭文字/正規表現スタイルを手動で処理

先頭行スタイル内の先頭文字/正規表現スタイルを手動で処理

先頭文字/正規表現スタイルを手動処理

 先頭行スタイルと先頭文字/正規表現スタイルが混在している場合は、まず先頭行スタイル内の先頭文字/正規表現スタイルに手動で通常の文字スタイルを再適用します。これは、3の検索置換処理で先頭行スタイル内の先頭文字/正規表現スタイルが検索にヒットしないためです。

3 パラメータを設定し、検索置換を実行

検索置換パラメータを設定

検索置換パラメータを設定

 検索置換パレットの「検索形式」に1で設定したカラーを、「置換形式」に1で文字カラーを変更した文字スタイルをそれぞれ指定し、ドキュメント全体に対して置換を実行します。全ての文字スタイルに関して同様の置換を実行します。

 これでとりあえず文字スタイルの再適用はできます。「行スタイル」内の先頭文字/正規表現スタイルを手動処理しなければならない問題はありますが、幸い「行スタイル」はそれほど頻繁に使用されているわけではないように思えますので、実作業的にそこまでの問題はないかと思います。
 また、「タグ」パレットの「スタイルをタグにマップ」でタグを付加する際のトラブルを防ぐため、文字スタイルの再適用を行った後に「スタイルをタグにマップ」を使用する場合には、全ての特殊スタイル類をあらかじめ削除しておいた方が良いでしょう。

 なお、「正規表現スタイル」の通常文字スタイルへの置換に関しましては、市川せうぞーさんが「正規表現スタイル由来の文字スタイルをリアル文字スタイルとして適用する」というエントリーで自動処理スクリプトを発表されておられますので、そちらを利用されるのも良いかと思います。

(2012.7.9)

市川せうぞーさんより、「正規表現スタイル」2つ以上を重ねがけしている場合でも「スタイルをタグにマップ」で正常にタグが付加されないとの情報をいただきました。例え「正規表現スタイル」だけしか使われていない場合でも、文字スタイルの再適用が必須になると考えておいた方がよさそうです。

(2012.7.9追記)

プロフィール
Jun Tajima

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

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

最近のコメント