なんでやねんDTP・新館

はてなダイアリーから移行しました…

「文字組みアキ量設定」の最大値と延ばし処理_再

先日の「文字組みアキ量設定」の最大値の延ばし処理における挙動に関する推論をさらに強力にするために、もう少しヒツコク検証してみた。

回避方法が見つかった…問題となる句読点類/後ろ括弧類/中点類の各々の後続文字の「文字前のアキ量」を「ベタ」に固定すれば「文字組みアキ量設定」の最大値の設定範囲内で処理されるようだ。CS4以降なら「正規表現スタイル」で解決できるだろう。また、このバグは約物が連続する部分には発生しない模様。(詳細は未検証)(この部分、2014.02.17追記

もう一つの回避策が見つかりました。twitterで教えていただいたのですが、…「隠されたアキ量」そのものが「優先度=なし」のレベルにある(もちろん設定項目にはありません)ようなので、その他(目に見える設定項目)をレベル「9」以上に設定すれば「なし」レベルの「隠されたアキ量」が発動することは大きく回避されるだろう…というものです。簡単に検証してみましたが、確かに回避されました(この設定によって他のバグが顕在化しないことを願います…大丈夫でしょ…)。私がデフォルトの優先度を嫌うあまり、別の方法で約物にレベルを設けたことが、「隠されたアキ量」を顕在化させる一因でもあったということですね。
*トゥゲッターに「InDesignの隠されたアキ量」として纏めてありますので、ご参照ください。(この部分、2014.06.05追記

行末受け約物全角/半角をベースに、約物をすべて半角固定とし、他の部分の最大値も「0%=ベタ固定)の設定を作成してみた(優先度は行末以外は「なし」とした)。
他の部分の最大値も0%とするのは、私からすればあり得ない設定ではあるが、以前に紹介した「困った設定」は実際にそうなっていた。この設定によりバグはより顕在化する。



で、先日の例文に適用してみた。



よくみると約物の後ろ以外の部分にも(最大値0%以上に)アキは挿入されている。
現在、必要な調整量は3000/1000emなのだが、1文字プラスして2000/1000emにしてみると、約物の後ろ以外はベタの状態となる。



ここから、1行目にある2つの約物には(最大値の設定に関わりなく)それぞれ+1角分(100%)のアキが予め担保されているということになるだろうか。
そして、行中のアキ量設定の最大値以上に延ばし処理が必要になった場合はその(担保されている)アキ量の100%が優先的に使用されることとなるようだ。
で、先の例の3000/1000emから2つの約物分の2000/1000emを除き、残る1000/1000emを字間(18)で割ると約56/1000emとなり、そのようにトラッキングで調整したモノ(赤字)はピッタリと重なる(約物部分は1056/1000em)。



もちろん、1文字プラスしたモノは約物の2箇所のみにトラッキング1000でピッタリと重なる。



ここで、最初の例の読点類を中点類に変更しても文字の位置の移動はないが、終わり括弧類を始め括弧類に変更すると文字の位置は移動する



つまり、中点類もその後ろに+1角分(100%)のアキが予め担保されているが、始め括弧類はそうではなく最大値(+アキ)が正しく適用されるのみ。
この場合は、必要調整量の3000/1000emから読点に担保されている1000/1000emを除いた、2000/1000emを字間で割った約111/1000emが各字間に割り振られていることになる(読点部分は1111/1000em)。



ややこしい話だが、この場合の約物2つの最大値に50%(最大全角ドリ)が設定してあれば、最大値500/1000emと担保されている1000/1000emが有効となり(1500/1000em*2箇所)、必要調整量が3000/1000emでも他の部分にアキは振られない。



が、それを超えて(例えば以下のように1行目の字数が1字減って)4000/1000emの調整が必要になれば、他の部分にも残る1000/1000emを字間(17)で割ったアキ(約59/1000em)が割り振られることになる(結局、約物部分は1559/1000em)。



どちらにしても、延ばし処理に際して、ある種の約物には最大値の設定を無視して「後ろに+1角分(100%)のアキが予め担保されている」(設定値以外にも目に見えないある種の優先的なアキ量を抱えている)というこの挙動はバグというしかないだろう。
※日常の一般的な組版作業では顕在化しないバグではあるが、こまかく見れば、延ばし処理が必要な場合の句読点後のアキなどは意図した通りには組めていないというのは確実なところ*1。ちなみにJIS X 4051ではこれら約物類は(全角分以上に)延ばし可能とはなっていない。

上記の例は(バグを顕在化させるために)約物以外の部分も最大値は0%としてあることに注意。
例えば仮名同士などの(最適値は0%で)最大値をデフォルトである100%としてある場合、その部分を「1」とするならば(もちろん50%の場合は「0.5」)、約物の(最適値が0%で)最大値0%の場合は(担保されている)100%と考えて「1」(最大1.5角分+α)、(最適値が0%で)最大値50%の場合は150%と考えて「1.5」(最大2角分+α)…の比率で調整量が割り振られると考えれば大丈夫であろうことは先日の作例から判断できる。また、約物類(中点類を除く)をデフォルト設定(最適値と最大値が50%)としてある場合は(担保されている100%分の)「1」と考えて割り振るのであろうことも先日の作例から判断できるだろう(この部分は検証が不十分かもしれない…)。
まとめて簡単に言えば、延ばし処理の場合、一般に最適値と最大値の差の比率に応じてアキは割り振られるハズだが、句読点類・中点類・終わり括弧類の後ろにはあらかじめ担保されている1角分(100%)も考慮しなければならない(最適値と最大値の差に100%加える)……となろうか。

最大値以上に調整が必要なら、約物以外の他の部分も同様にアキを発生させるべきだと思う。


この辺りに、デフォルトの各設定の例えば平仮名・カタカナ・その他の和字の関係をみる時、最大値に過大だと思われる「100%」が設定されている謎を解明する鍵があるのかも知れない。また、私がいつのまにか(経験的に)最大値を触るのを避けることになった原因もあるのだろう。


バグの挙動をヒツコク検証していても意味は余り感じられないので、この辺でやめておくが……。
少なくとも、最適値が同じ設定の場合には、その最大値の比率に応じてアキは割り振られるべきである、事実そういう正しい挙動も確認できるのだから。


●以下、2011.12.06追記
なお、左右均等割などでの中点類のおかしな挙動の原因もココにあると考えられる。



  • 図中の数値は「最適値/最大値」
  • デフォルトの「行末約物半角」
  • 全体に3字分のアキが発生

ご覧の通り、文字組みアキ量設定通りにアキが割り振られているのは始め括弧類の行のみ!

*1:私は(最大値を信用して)全角ドリ以上には開けないと考えていた…中黒にいたってはなんともはや…