Affinity Publisherで日本語処理(1)禁則処理

2019年07月24日

前回の続きです。次の図は前のエントリのテキストAffinity Publisherに配置したものです。アキが分かりやすいように行揃えは左にしてあります。1行10文字です。なお、段落の初期値で段落後のアキがついているので、それは解消しています。

Affinity Suite(バージョ1.7)では下図の赤丸部分のように日本語の禁則処理ができていません。

実はそれだけではなく、括弧類の受けと起しの間が分割禁止になっている状況があります(下図の青丸部分)。

これを正規表現検索置換機能を使って禁則処理を行います。ただし、現状では追い出し処理のみです。追い込みができるようになるには約物の文字幅処理が必要です。

1.行頭禁則文字の処理

行頭禁則文字」というのは「行の最初に来てはいけない文字」という意味ですが、実は「前の文字と分割してはいけない」という「分割禁止」になります。

この「分割禁止」Affinity Suiteでもあります。英語では「no break」、日本語では「区切りなし」(なんて訳し方だ)で、指定した文字とその直前の文字の分割を禁止します。

ですから、句読点や括弧類の受けはここのチェックを入れればいいんですね。

でも一つ一つ入れていくのは面倒なので、「Find and Replace」日本語では「検索して置換」のパネルで一気に行います。このパネルは現時点でPublisherにしかないのですが、いずDesignerやPhotoでも使えるようになるだろうと思います。

まず、「検索」の歯車アイコンをクリックして「正規表現」のみにチェックが入っているのを確認します。

次に、「次で置換」の歯車アイコンをクリックして「フォーマット」をクリックします。

図のように「区切りなし」のチェックをオンにして閉じます。

続いて検索文字列欄に行頭禁則にしたい文字を正規表現で入力します。私の常用パターンの場合は

[!"\),\.:;>\?\]}’”、。々〉》」』】〕〟〱〲〳〴〵゛゜ゝゞ・ヽヾ!),.:;?]}。」、・゙゚]

となります。いわゆる「弱い禁則」にいくつか文字を追加したものです。「強い禁則」が必要な場合はこれに長音、拗音、促音で使用する文字を追加してください。また、不要なものは削除してください。ただし最初と最後のブラケットは正規表現に必要なので削除しないでください。

置換文字列欄には何も入力しません。そうすることで、書式のみ追加されることになります。これInDesignと同じですね。

続いて[検索]ボタンをクリックすると、該当箇所が表示されます。次に[すべて置換]ボタンをクリックします。これで、行頭禁則が設定されました。

2.行末禁則文字の処理

行末禁則文字」というのは「行の末尾に来てはいけない文字」という意味ですが、実は「次の文字と分割してはいけない」という「分割禁止」になります。括弧類の起しがそうですが、その文字に「no break(区切りなし)」を設定するのではありません。その次の文字になります。ですから正規表現では後読みを使わなければなりません。書式としては

(?<=[括弧類の起し]).

です。最後のピリオドに該当する文字に「no break(区切りなし)」が設定されるので、ピリオドを忘れないようにしてください。私の常用パターンの場合は検索文字列が

(?<=[\(<\[{‘“〈《「『【〔〝〳〴〽([{「]).

となります。

あとは同様に[検索]、[すべて置換]ボタンをクリックするのですが、例題が悪かった。行頭禁則の処理を行った時点で行末禁則がなくなってしまったので、最初の状態から行末禁則の処理を行った結果を見てください。

3.余計な連結の解消

Affinityではどうも括弧類の受けなどに対しては、次の文字との分割禁止が設定されているようです(最初の図の青い丸)。私のリストにある行頭禁則文字のうち、次のものが該当します。

!"),.:;>?]}’”〉》」』】〕〟!),.?]}。」、・

解消する方法を色々考えましたAffinity Suiteには「幅ゼロのスペース」というのがあるので、これを挿入してみることにしました。ただし、カンマとピリオドは数字の間に入る場合には分割禁止なので除外します。この辺が判断の難しいところですが、とりあえずやってみて、不都合があればまた変えましょう。

正規表現の書式としては、検索欄は挿入箇所の前後を括弧で括って、

(括弧類の受けなどが連続)(括弧類の受けなど以外)

([!"\):;>\?\]}’”〉》」』】〕〟!),.?]}。」、・]+)([^!"\):;>\?\]}’”〉》」』】〕〟!),.?]}。」、・])

置換欄は

最初の括弧の中身 幅ゼロのスペース 2番目の括弧の中身

\1\x{200B}\2

となります。「幅ゼロのスペース」はパネル内の虫メガネアイコンから入力することもできますが、Unicodeが「200B」でしたので、そのままコード指定にしています。また、置換の設定(歯車アイコン)から「フォーマットをリセット」をクリックしておいてください。そうしないと先に設定した「区切りなし」のチェックが残っていて意味がなくなります。

最初の状態での実行結果が次の図です。青い上付きのVのようなものが「幅ゼロのスペース」になります。

4.分離禁止文字

例題にはありませんが、それ以外に分離禁止文字もあります。いわゆる二倍ダーシ(—)、三点リーダー(…)、二点リーダー(‥)の連続などです。これらは2行にまたがってはいけない、かつ、間もあけてはいけない(つまりどんな状況においてもベタ組)というものです。これも設定しておかなければ、と試そうとしましたが、なんと、なんと、なんと、最初から分割禁止になっているではありませんか。これはラッキーでした。

結果

以上、3つの置換を実行するとこうなります。

どうです? だいぶもやもや感がなくなったと思いませんか?

たった3回の置換で禁則処理ができるんですよ。もちろん機能として持っている方がいいんですが、それほど手間ではないので、これを機に触ってみてはどうでしょう。安いしね!

次は連続する約物の文字幅を整えます。


7月27日 追記

4.分離禁止文字」のところの補足です。

用語で「分割禁止」と「分離禁止」がありますが、この2つは似ている言葉ですが意味が違いますので注意してください。

分割禁止

単に、2行に分かれてはいけない

分離禁止

分割禁止であって、かつ間をあけてはいけない。禁則処理を行って1行の文字数が少なくなると、均等配置の場合は文字も間を等間隔にあけますが、分離禁止の場合はあけてはいけません。ベタ組にします。欧文の単語と同じ扱いです。

 

分離禁止というのは歴史的背景から、「2つの活字で1つの文字を表す」というものになります。倍角の文字ということです。そして、例示した3例(ダーシ、二点リーダー、三点リーダー)については、最初から分割禁止になっていますが、分離禁止にはなっていません(間があいてしまいます)。カーニングを設定するなど何らかの対策が必要です(まだこれで決まりという手法は見つかっていません。見つかれば追記します)。

実は私は分離禁止の文字は、もう2種類しか知りません。折角なので挙げておきます。

大返し

U+3033とU+3035の組み合わせ、U+3034とU+3035の組み合わせ

今ではほとんど使いませんが、言葉を繰り返すときに用います。青空文庫では

/\:二倍の踊り字(「く」を縦に長くしたような形の繰り返し記号)
(例)いろ/\
*濁点付きの二倍の踊り字は「/″\」

で表記しています(シフJISにないため)が、本来はこの文字コードを使用すべきです。

これは縦組み専用の文字で、横組み字形はありません。とりあえPublisherで入力してみたところ、分割禁止になっていません。Affinity Suiteでは縦組機能はありませんので、もし縦組機能が付くようなことがあれば分離禁止にしなければなりません。

オングストローム

Unicodeには入っていないはず)CID11885とCID11897の組み合わせ、CID11969とCID11981の組み合わせ

新聞などで、単位のカタカナを組み文字にする場合がありますが(㍍など)、これは活字2つを使うものです。活字としては「オントロ」と「グスーム」に分かれます。詳しくは「オントロ・グスームの記憶」を見てください。

Affinityソフトウェアではうまいことに分割禁止になっています。というか、この辺りCIDコードの文字全て分割禁止になっているので、実はまずい挙動です。

の2種の文字を見ると分離禁止文字というのは、ベタ組でなければならないということがよくわかると思います。

 

さらに。個人的な意見ですが、顔文字(face mark, emoticon)も分離禁止にすべきだと思っています。例) :-) (^-^)/ (≧▽≦) ('◇')ゞ

ラテン文字だけだと分離禁止になるんですがね。(実装は無理です。バリエーションがありすぎorz)


8月23日 修正

ロケール正規表現」としていたところを「正規表現」に変更しました。「ロケール正規表現」の場合、意図していない文字が検索対象として引っかかることがあったためです。

また「オントロ・グスームの記憶」のリンクを追加しました。