ALtFontで指定した絵文字フォントでゼロ幅接合子による合字がうまく組まれない
また、関連する話題としてゼロ幅接合子200Dや異字体セレクタFE0Fは現在JAcharであると思われますが絵文字がALcharであることと矛盾するような気もします。絵文字と異字体セレクタFE0Fなどは同じクラスにあるのが自然に思われるため
lualatexで処理すると絵文字の合字が処理されません。
これも,絵文字は欧文扱いにして組んだほうが安全だと思います.
\documentclass{minimal}
\usepackage{luatexja-fontspec}
\ltjdefcharrange{4}{"2600-"27FF}
\newfontface\EMOJI{Segoe UI Emoji}[RawFeature={+dist}]
\begin{document}
\noindent\EMOJI
\ltjgetparameter{jacharrange}{\ltjgetparameter{chartorange}{"200D}}\\
\ltjgetparameter{jacharrange}{\ltjgetparameter{chartorange}{"FE0F}}\\
⛄👪⛄💑⛄日本語\\
⛄👨👩👧👦⛄👩❤💋👨⛄日本語\\
\end{document}
ゼロ幅接合子200Dや異字体セレクタFE0F
ALchar にしようと思います.U+2000--U+206F (General Punctuation) は一律で JAchar としてきましたが,他にも欧文ゴーストとして U+200B を使ったりするのでもう一回考えようと思います.
以下のファイルをharflatex 0.4.1で処理するとカラー版のSegoe UI Emojiの合字が期待通りに出る
実際にはもっと複雑ですが,単純化すると「harfload の処理→ luaotfload の処理→ LuaTeX-ja の処理」の順番になっているようです.harftex は全然調べていませんが,おそらく harfload によるカラー絵文字の出力処理が先に行われたのでしょう.
h7k への返信
ゼロ幅接合子200Dや異字体セレクタFE0F
ALchar にしようと思います.U+2000--U+206F (General Punctuation) は一律で JAchar としてきましたが,他にも欧文ゴーストとして U+200B を使ったりするのでもう一回考えようと思います.
異字体セレクタFE0FもALcharになりますでしょうか?「 👩❤️💋👨」はU+1F469 U+200D U+2764 U+FE0F U+200D U+1F48B U+200D U+1F468ですがその中に異字体セレクタFE0Fが入っているため絵文字一般がALcharならFE0FもALcharでないとうまく組めないと思われます。事実下記のファイルを普通のlualatexで処理すると2行目の絵文字は絵文字1文字の中にあるFE0Fと200DがJAcharになっているためまともに組めません(emoji7.odfとして添付)。luatexjaを使わずにfontspecを読み込めば当然問題なく組めます。
\documentclass{minimal}
\usepackage{luatexja}
\usepackage{luatexja-fontspec}
\begin{document}
\noindent
\fontspec[RawFeature={+dist}]{Segoe UI Emoji}
👪💑日本語\\
👨👩👧👦👩❤️💋👨日本語\\
\end{document}
絵文字に使われる異字体セレクタは https://qiita.com/nonanona/items/b148c212ba7c24942e93 によれば FE0F と FE0E だそうです。 一方漢字の異字体に使われるのはU+E0100 から U+E01EFらしくて重複は幸いないようです…
異字体セレクタFE0FもALcharになりますでしょうか?
U+FE00--U+FE0F は既に ALchar になっているはずです(少なくとも開発版では). 「 👩❤️💋👨」がそのままでうまくいかなかったのは「❤」(U+2764) が JAchar 扱いされているためです.
h7k への返信
異字体セレクタFE0FもALcharになりますでしょうか?
U+FE00--U+FE0F は既に ALchar になっているはずです(少なくとも開発版では).
ご教示ありがとうございます。texliveの7月の版はJacharでしたが以下の最新版ではALcharでした。
revision: 51963 sizes: src: 485k, run: 1773k relocatable: No cat-version: 20190826.0
unicode の絵文字の合字 U+1F469 U+200D U+2764 U+FE0F U+200D U+1F48B U+200D U+1F468 👩❤️💋👨 U+1F468 U+200D U+1F469 U+200D U+1F467 U+200D U+1F466 👨👩👧👦 などをsetmainjfontのオプションのAltFontで指定したときに、lualatexで処理するとうまく合字にならないのにharflatexで処理すると合字になるという現象です。 以下のSegoe UI EmojiはWindows 10に入っているフォントで、合字および可変幅の絵文字フォントを持っています。RawFeature=+distを与えないと絵文字同士の重なりが生じます。
luatexjaではないただのluatexだと下記のファイルから期待通りのPDFが作られます。
\documentclass{minimal} \usepackage{fontspec} \setmainfont[RawFeature={+dist}]{Segoe UI Emoji} %\setmainfont[]{Segoe UI Emoji} \begin{document} \noindent ⛄👪⛄💑⛄\\ ⛄👨👩👧👦⛄👩❤️💋👨⛄ \end{document}以下のファイルをlualatexで処理すると絵文字の合字が処理されません。
\documentclass{minimal} \usepackage{luatexja} \usepackage{luatexja-fontspec} \ltjsetparameter{jacharrange={+4,+8}} \setmainjfont[ AltFont={ {Range={"200D,"2600-"27FF,"FE0F,"1F300-"1FAFF}, Font={Segoe UI Emoji},RawFeature={+dist},YokoFeatures={JFM=prop}}} ]{IPAexMincho} \begin{document} \noindent \ltjgetparameter{jacharrange}{\ltjgetparameter{chartorange}{"200D}}\\ \ltjgetparameter{jacharrange}{\ltjgetparameter{chartorange}{"FE0F}}\\ ⛄👪⛄💑⛄日本語\\ ⛄👨👩👧👦⛄👩❤️💋👨⛄日本語\\ \end{document}しかし、以下のファイルをharflatex 0.4.1で処理するとカラー版のSegoe UI Emojiの合字が期待通りに出る
\RequirePackage{harfload} \documentclass{minimal} \usepackage{luatexja} \usepackage{luatexja-fontspec} \ltjsetparameter{jacharrange={+4,+8}} \setmainjfont[ AltFont={ {Range={"200D,"2600-"27FF,"FE0F,"1F300-"1FAFF}, Font={Segoe UI Emoji},RawFeature={mode=harf,+dist},YokoFeatures={JFM=prop}}} ]{IPAexMincho} \begin{document} \noindent \ltjgetparameter{jacharrange}{\ltjgetparameter{chartorange}{"200D}}\\ \ltjgetparameter{jacharrange}{\ltjgetparameter{chartorange}{"FE0F}}\\ ⛄👪⛄💑⛄日本語\\ ⛄👨👩👧👦⛄👩❤️💋👨⛄日本語\\ \end{document}関係アプリのバージョンなどは下記の通りです。