調査・試験用ブランチ vert_vrt2 を作りました.
LuaTeX-ja の縦組用和文フォントでは何もしないと vert, vrt2 が両方オンになります
commit e65feac では「縦組用和文フォントで vert, vrt2 の有効・無効を明示的に指定しない場合,vrt2 feature があればそれを,なければ vert を有効にする」という仕様にしてみました. test/test51a-vert_vrt2.{tex,pdf} が例です.
ただ,luaotfload に与えるフォント指定と実際に有効になる feature が違うという状況(以前は luaotfload に渡す前に '+vert;+vrt2 を付加していた)なので,何か問題が出ないか心配です.
commit 0f0921ce(vert_vrt2 ブランチ)で次のような処理にしてみました.vert or vrt2 が(明示的または暗黙のうちに)有効になっている場合に発動します.
vert feature の適用範囲外にある文字について, * 「和文フォントへの置換」時に,U+2025 -> U+FE30 のように,Unicode の - Vertical Forms (U+FE10--U+FE1F) - CJK Compatibility Forms の一部 (U+FE30--U+FE44) へマッピングできるものは置き換える * 「JAcharの位置補正」時に,UTF#50 で R or Tr と指定されており, かつ vert feature による置き換え先が定義されていないグリフは 90度回転状態にする * 例えば,小塚明朝では U=205A と U+FE30 が同一のグリフを用いることになっている. この場合 UTR#50 では U+2052 は R,U+FE30 は U となっているが, 「回転しない」方を優先.チケット #34941 の U+2014 については1つめの * の処理で, また MogaMincho における矢印の向きについては2つめの * の処理でそれぞれ向きが変わります(ただ,矢印の横線がベースラインとちょっとずれています). リポジトリ内の test/test51a-vert_vrt2.pdf を参照して下さい.
(Unicode 10.0 では UAX #50 という名称に変わったのですね.まだ古いデータ (revision 17) を参照していました)
commit 0f0921ce では不十分な場合があったので,562df6e9 で修正しました.
具体的には,luatexja-preset で HG フォントを措定した場合など,vert feature が現在の (script,language) では適用されない状況でも無理やり vert を適用させることにしました.
vert feature が現在の (script,language) では適用されない状況でも
もう一つの例として,Windows 7 付属の SimHei (simhei.ttf) を挙げておきます.
20170904.0 を出したので,ひとまず完了とします.
#37531 で縦組時の原点位置情報を使えるようになったため,いろいろ試してみたら再び気になったので,再オープンします.
LuaTeX-ja で縦組用の字形を得る処理は,次の 5 ステップです.
以上により,
標準では例えば和文扱いの β や Å は横組時から 90 度回転された横倒しの状態で組まれる……(a)
ことになります.β については 4. によりますが,Å については Adobe-Japan1-6 に横倒しになったグリフが準備されており,vrt2 でそれが使われるためです.
一方,LuaTeX-ja では同じ文字,例えば β, Å を和文扱いにも欧文扱いにもすることができます. 「β-conversion」のように欧文の単語の一部として組む場合には欧文扱いとしますから,
わざわざ和文扱いとした場合は,横倒しにはせずに正立させる……(b)
方が自然のように感じます.また,参考までに upTeX + dvipdfmx で β, Å を和文扱いで組んだ場合も正立しています.
現状よくわからなくて悩んでいるのは次の 2 つです:
doraTeX さんの twitter (https://twitter.com/doraTeX/status/892922512564142080) にある話題ですが,
を実行すると,左矢印が物理的には右向き,上矢印が下向き,……となります.LuaTeX-ja の縦組用和文フォントでは何もしないと vert, vrt2 が両方オンになります (\tfont\VT=IPAexMincho:+vert;jfm=ujisvのように明示的に vert や vrt2 feature を指定すれば,この「自動で両方オンとなる」機能は無効になります).ZR さんの投稿 (https://twitter.com/zr_tex8r/status/892960245558919168) にあるとおり,二重に適用されるのはよろしくないようです.
さて,今回の場合,LuaTeX-ja のデフォルトの明朝(IPAex明朝)には vrt2 はないようです. しかし,LuaTeX-ja では vert と vrt2 の少なくとも片方がオンになっている場合,font feature の適用前に「縦書き用字形のグリフが『容易』に見つかればそれに置換する」という処理をしているので,これが悪さをしているかもしれません(あとで調べます).