Ticket #39513

ALtFontで指定した絵文字フォントでゼロ幅接合子による合字がうまく組まれない

Date d'ouverture: 2019-08-27 15:13 Dernière mise à jour: 2019-09-26 19:38

Rapporteur:
Propriétaire:
(Aucun)
Type:
État:
Atteints
Composant:
(Aucun)
Jalon:
(Aucun)
Priorité:
1 - le plus bas
Sévérité:
1 - le plus bas
Résolution:
Aucun
Fichier:
4

Détails

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}

関係アプリのバージョンなどは下記の通りです。

$ tlmgr info luatex luatexja harftex
package:     luatex
category:    TLCore
shortdesc:   The LuaTeX engine
longdesc:    LuaTeX is an extended version of pdfTeX using Lua as an embedded scripting language. The LuaTeX project's main objective is to provide an open and configurable variant of TeX while at the same time offering downward compatibility. LuaTeX uses Unicode (as UTF-8) as its default input encoding, and is able to use modern (OpenType) fonts (for both text and mathematics). It should be noted that LuaTeX is still under development; its specification has been declared stable, but absolute stability may not in practice be assumed. Source code is available from ctan:/systems/texlive/Source/.
installed:   Yes
revision:    50602
sizes:       run: 149k, bin: 12977k
relocatable: No
cat-date:    2018-12-31 06:11:12 +0100
cat-license: gpl2
cat-topics:  engine
cat-contact-bugs: http://lists.tug.org/tex-k
cat-contact-home: http://luatex.org
cat-contact-support: http://lists.tug.org/luatex
cat-contact-repository: https://tug.org/svn/texlive/trunk/Build/source/texk/web2c/luatexdir
collection:  collection-basic

package:     luatexja
category:    Package
shortdesc:   Typeset Japanese with Lua(La)TeX
longdesc:    The package offers support for typesetting Japanese documents with LuaTeX. Either of the Plain and LaTeX2e formats may be used with the package.
installed:   Yes
revision:    51584
sizes:       src: 485k, run: 1769k
relocatable: No
cat-version: 20190708.0
cat-date:    2019-07-08 10:23:58 +0200
cat-license: bsd
cat-topics:  japanese luatex class
cat-contact-home: https://osdn.net/projects/luatex-ja/wiki/FrontPage(en)
cat-contact-repository: https://osdn.net/projects/luatex-ja/scm/git/luatexja/
cat-contact-bugs: https://osdn.net/projects/luatex-ja/ticket/
collection:  collection-langjapanese

package:     harftex
category:    Package
installed:   Yes
revision:    225
sizes:       run: 69k, bin: 5601k
relocatable: No
collection:  collection-contrib

Ticket History (3/11 Histories)

2019-08-27 15:13 Updated by: emojifreak
  • New Ticket "ALtFontで指定した絵文字フォントでゼロ幅接合子による合字がうまく組まれない" created
2019-08-27 16:37 Updated by: emojifreak
Commentaire

また、関連する話題としてゼロ幅接合子200Dや異字体セレクタFE0Fは現在JAcharであると思われますが絵文字がALcharであることと矛盾するような気もします。絵文字と異字体セレクタFE0Fなどは同じクラスにあるのが自然に思われるため

(Edited, 2019-08-27 16:38 Updated by: emojifreak)
2019-08-27 19:16 Updated by: h7k
Commentaire

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 によるカラー絵文字の出力処理が先に行われたのでしょう.

2019-08-27 20:35 Updated by: emojifreak
Commentaire

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らしくて重複は幸いないようです…

2019-08-27 20:51 Updated by: h7k
Commentaire

異字体セレクタFE0FもALcharになりますでしょうか?

U+FE00--U+FE0F は既に ALchar になっているはずです(少なくとも開発版では). 「 👩‍❤️‍💋‍👨」がそのままでうまくいかなかったのは「❤」(U+2764) が JAchar 扱いされているためです.

(Edited, 2019-08-27 20:53 Updated by: h7k)
2019-08-27 21:28 Updated by: emojifreak
Commentaire

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

2019-09-26 19:38 Updated by: h7k
  • État Update from Ouvert to Atteints

Attachment File List

  • emoji1.pdf(20KB)
    • 最初のlatexファイルからできるPDF
  • emoji2.pdf(124KB)
    • 2番目のlatexファイルからできるPDF
  • emoji3.pdf(126KB)
    • 3番目のlatexファイルからできるPDF
  • emoji7.pdf(123KB)
    • emoji7.pdf 絵文字をALcharにしても現行のluatexjaではうまく組めない例

Modifier

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Connexion