Asciidoctor PDFの日本語ワードラップが改善された

2019/10/08

8/31にリリースされた v1.5.0 Beta 3 でAsciidoctor PDFの日本語ワードラップが改善されました。デフォルトでは適用されないようになっていて、 :scripts: cjk を設定 (attribute) に追加すると有効になります。

Release v1.5.0 Beta 3のリリースノートにある

if value of scripts attribute is cjk, break lines between any two CJK characters (except punctuation) (#1206)

がワードラップの改善ですね。

対応内容はと言うと、chloerei/asciidoctor-pdf-cjkfuka/asciidoctor-pdf-linewrap-ja と同じく、いい感じの場所に zero-width space を挿入するというアプローチになっています。

https://github.com/asciidoctor/asciidoctor-pdf/issues/1206#issuecomment-520311699 によると

  • Prawnの改行ロジックにパッチを当てようと思ったけど override するのが難しすぎた
  • zero-width space を挿入するアプローチは最良ではないけどシンプルなので採用した
  • 将来的にはPrawn側で修正されるのがベター

ってことのようですね。自分が asciidoctor-pdf-linewrap-ja を作ったときとおんなじ結論。

zero-width space の挿入判定は

string = string.gsub %r/(?=[\u3000\u30a0-\u30ff\u3040-\u309f\p{Han}\uff00-\uffef])/, ZeroWidthSpace

となっています。

  • \u3000 is the ideographic space character
  • \u30a0-\u30ff is Hirgana (\p{Hiragana} is incomplete)
  • \u3040-\u309f is Katakana
  • \p{Han} are the unified CJK ideographs
  • \uff00-\uffef are half-width and full-width CJK forms

とのこと。 asciidoctor-pdf-cjk と同じようなルールです。

今までも asciidoctor-pdf-cjk を使えばできていたことが標準でできるようになっただけ、と言えばそれまでですが、標準でできることに意味があるかなあ、と。これで少なくとも asciidoctor-pdf-cjk はお役御免かと思います。

ちょっと試した感じだと、一応 asciidoctor-pdf-linewrap-ja のほうがベターなケースは残っているみたい。せっかくなので細々とメンテ続けていこうかな。




関連(するかもしれない)記事


おススメ