2017年4月25日

和字間隔(全角空白)の話.JLReqにおける和字間隔は(ZRさんの解釈では)次のように振る舞う.

和字間隔は全角幅を持つ不可視の文字である.

  • 周りの空きは漢字とは異なる振る舞いをする.
  • 和字間隔の直前での分割は起こりうる.その場合和字間隔は行頭に移動し,見かけ上一文字字下げされる.
  • ただし,和字間隔の直前が区切り約物(!や?など)であり,和字間隔と区切り約物の間で分割が起きた場合,和字間隔は幅が0になる.

なお,区切り約物の前後の空白は次のように規定されている.

  • 区切り約物が文末に来ていて,さらに直後が終わり括弧類でない場合は,和字間隔を入れる.
  • 文中の区切り約物は,前後をベタにするか前後に四分の空きを入れる.

現在のjlreq.clsにおけるU+3000は,JLReqに定められている前後空き量を持つ(LaTeXの意味での)文字としてある.ここから生じる問題点は次の二つ.

  1. 前が区切り約物であり,U+3000との間に改行が入ってもU+3000が消えることはない.
  2. U+3000が文字クラス0に入っていると仮定してある処理(一部で「和文ゴースト」と呼ばれている処理)ができない.

一つ目を解決するのはJFMだけでは対処不可能なので,マクロが必須となる.すると

  • 和字間隔をマクロにする.直前の文字は\lastnodecharで取得する必要がある.(文中区切り約物のために四分空きの命令も必要?)
  • 区切り約物をマクロにする.文末と文中との二つのマクロを用意する必要がある.
のどちらか.区切り約物をマクロにすると「後ろに和字間隔を入れている」という気分が出にくいが,処理は100%うまくいく.またU+3000は和字間隔にとっておく必要があるため,文字クラス0にはできない.和字間隔をマクロにすると,U+3000はJFM上好きな場所に入れてよくなる.またLuaTeXならば,U+3000をアクティブにすればマクロであることをほぼ意識せずに使えるようになる(多分).一方で,\lastnodecharによる制限に引っかかる.(区切り約物と和字間隔出力マクロの間にごちゃごちゃいろいろあるとうまく行かないかもしれない.)

0 件のコメント:

コメントを投稿

コメントの追加にはサードパーティーCookieの許可が必要です