DTPab

DTPにまつわるあれこれ

制御文字U+FEFFによるアキ量の無効化

この記事はDTPアドベントカレンダー16日目の記事になります。
前回はkmutoさんの『Markdownファイルをpandocを使わずに力ずくで組む方法』でした。超大作でしたね……。まだ細部まで読みきれてないのですが、

本記事の本質は「DTP作業にも正規表現はいいぞ」という普及活動です

とあるように、Markdownを扱う材料とした正規表現検索置換に関する記事です。かなり足元から丁寧に解説してくださっているので、Markdownとはなんぞや、という方でも、正規表現のお勉強として得られるものがあるのではないでしょうか!

さて、僕の今回の記事はU+FEFFという制御文字についてです。

U+FEFF is 何?

厳密にはZero Width No-Break Spaceという名前です。ある面ではBOMとも呼ばれます*1
Unicodeに定義されているれっきとした文字ですが、InDesignの独自拡張? により、InDesignでは本来の使い方とは違った使われ方をします*2。この文字がInDesignのさまざまな諸機能で利用されているのです。

どんな機能で使われる?

僕が把握している範囲では、下記の機能を使うと挿入されます。

  • XMLタグ
  • 索引
  • 相互参照
  • 注釈

もちろん、文字は文字なので直接入力することも可能です*3

どんな問題を引き起こすの?

PDFを書き出した際、U+FEFFの直後の前アキ量が無効になります。ただ実はこの不具合がCC2019から解消されています。これは朗報でした。これだけでも前述の機能を利用しているものはCC2019を使う価値が高まりますね。

それはともかく、まずは状況を把握していただきたいので、不具合が発生するCC2018以下で試した結果が下記です。

f:id:uske_S:20191216192956p:plain
CC2018 データでの見た目

見ていただいた通りですが、念のため補足しますと、上から順に

  • U+FEFFなしのもの
  • U+FEFF単体を直接挿入したもの
  • XMLタグを挿入したもの
  • 索引を挿入したもの
  • 相互参照を挿入したもの
  • 注釈を挿入したもの

となっています。相互参照以外は「■」の前にU+FEFF(:のような制御文字)が入っていて、相互参照は挿入した相互参照(例ではページ番号)の直前に入っている、という状況です。
またそれぞれは上から順に

  • 文字組みアキ量設定で行頭1字下げを設定したもの
  • 文字パネルから文字の前アキ量で全角アキを設定したもの
  • 段落パネルの左/上インデントで1字分の字下げを設定したもの
  • 段落パネルの1行目左/上インデントで1字分の字下げを設定したもの

です。このデータをPDFに書き出します(X4、X1aどちらも結果は同じ)。

f:id:uske_S:20191216193103p:plain
PDFに書き出した結果

すると索引を除く4つの機能でアキ量がおかしくなっている(文字の字下げが無効になっている)のがわかります。

サンプルデータ

こちらにidmlファイルを用意しました(いつまで置いておくかわからないですが)。

www.dropbox.com

最後に

先ほども書いたように、この不具合はCC2019で解消されています。
解消されていますが、過去のデータからコンバートした際などは文字のアキが変わるため注意が必要です*4。くれぐれもお気をつけください。

明日はmi2gktさんによる記事です! どんな記事になるか楽しみですね!
今年もアドベントカレンダー楽しかったです〜! 企画してくださったのえる(@noellabo)さん、ありがとうございました。

*1:https://www.compart.com/en/unicode/U+FEFF

*2:本来のBOMとしての使い方などは記事の範囲外であるため割愛

*3:エディタからコピペしたり、検索置換で置換したりなど。officeアプリからテキストを取り込んだ際に紛れることも多いです

*4:PDFでアキ量がおかしくなってしまうだけで、文字の流れ込みなどは全く動きません