なんでやねんDTP・新館

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

今が旬の「ここまでインデント」

「ここまでインデント」に関して昨日(2012.01.25)から今日にかけて話題になっていたが、ある程度の結論に達したのでここに纏めておく(作例はCS4)。


きっかけは @ さんの

「左揃えのテキストに強制改行入れて「ここまでインデント」揃えようとしても行頭が揃わないのって、インデントマーカーの前後のアキ量設定が影響してる???」

という呟きだった。


その後のtwitter上でのやりとりは @ さんが纏めてくださった コチラでご確認して頂くとして……


私は、当初は

ここまでインデント…設定した直後は最適値が適用されるが、2行目はアキ量(最適値)を無視した本来の字幅位置に揃えられる…なのでここまでインデント直前の文字の後ろアキを固定してやらなアカン…

という仮説を立てたが、「(行末)約物全角」では正常になるという報告を読み飛ばしており、@ さんからもご指摘があって……

【仮説訂正】ここまでインデント…設定した直後は行中の最適値が適用されるが、2行目は(ここまでインデント直前の文字の)対:行末の最適値に揃えられる…なのでここまでインデント直前の文字の後ろアキを固定してやらなアカン…

という一応の結論に達した。


これを検証しつつ確認してみる。

                    • -

以下のような作例を用意した。


  • 1行目「なら、」の後ろに「ここまでインデント」を挿入(頭揃え)
  • 3行目の「なら、」読点は自動ママ
  • 4行目の読点は「文字後ろのアキ」で「ベタ」に半角固定(0%)


それぞれの設定と部分拡大画像は以下の通り。


デフォルトの「行末約物半角」



  • 1行目は読点の対:片仮名(50%)の設定に応じた位置に
  • 2行目は読点の対:行末(0%)の設定に応じてベタの位置に


デフォルトの「(行末)約物全角」



  • 1行目は読点の対:片仮名(50%)の設定に応じた位置に
  • 2行目は読点の対:行末(50%)の設定に応じて1行目と同じ位置に


カスタマイズした設定(本来はツメ組み用)



  • 1行目は読点の対:片仮名(12.5%)の設定に応じた位置に
  • 2行目は読点の対:行末(−6%)の設定に応じてベタの位置より前に


これらから先の仮説 「ここまでインデント」…設定した直後は行中の最適値が適用されるが、2行目は(ここまでインデント直前の文字の)対:行末の最適値に揃えられる……は、ほぼ証明される。
蛇足になるが、「(行末)約物全角」の例のように両者が同じ値ならズレは発生しない。


で、それぞれの読点の対:片仮名の最適値を「文字後ろのアキ」で設定し固定すると……


  • 1行目の読点を「行末約物半角」(1ブロック目)は「半角(アキ)」、カスタマイズした設定(3ブロック目)は「八分(アキ)」に固定


ここから、「ここまでインデント」直前の「文字の後ろのアキ」を固定してやることによって2行目のズレは回避できるということになる。


今までの例はカーニング設定は「和文等幅」の場合……
では、メトリクスを使用した場合は……



ご覧のように微妙にズレルので(メトリクスカーニングによって文字の前もツメられるので)和文の場合、メトリクスカーニング適用時は「ここまでインデント」の使用は適切ではない


また、これはあまり知られていないことだが、(以下の画像の通り)「ここまでインデント」の前の部分には行長調整によるアキが挿入されない仕様になっているということも頭に入れておきたい。



作例が不適当で誤解を招くかもしれませんが、私としてはこの仕様は好都合という認識です(コメント欄参照)。(公開日追記


(以下、2012.01.31追記
@ さんのこの呟きをヒントに、「ぶら下がり」を「標準」あるいは「強制」とした段落では、「ここまでインデント」直前の文字の前が(ぶら下がり対象文字である)句読点なら揃わないことを確認した。上に記した対処策:文字後ろのアキを「二分(アキ)」に設定してもダメだった。これは対:行末との設定によるのではなく、ぶら下がり対象文字であることが原因と考えられる。


(以下、2012.02.01追記
もう少し説明を加えると……
「ぶら下がり」を設定した段落では、「ここまでインデント」の直前の文字が句読点の場合、2行目(ここまでインデント)以降は句読点の前で揃えられる。
つまり、ぶら下がり対象文字である句読点は、(上の考え方を援用すれば)対:行末に対しては文字幅ゼロとして認識されているから……ということになる。
これはよく知られた“全角スペースを行末吸収に設定すると「ここまでインデント」が無効になる”というバグがあるが、そうした段落が「ここまでインデント」以降は全角スペースの前で揃えられるのと挙動としては同じ理屈。

          • -

上の追記内容をtwitterにも流しておいたのだが、その後(当日)、同じくtwitter上で、@ さんから素晴らしい対処法が示された。→参照

今ふと思いついて、「ここまでインデント」の直前に「結合なし」を挿入してみたんですけど、これでバグを回避できるっぽいです!

これは「ぶら下がり」や「全角スペースの行末吸収」の際だけでなく、すべてのケースに有効であることをザーッとではあるが確認したことを報告しておく。