LuaTeX で補助私用領域の文字を使いたい

LuaTeX で補助私用領域の文字を使いたい

- ひとみ さん の投稿
返信数: 3
当方 macOS Catalina で TeX Live 2020 を使っています。

にしき的フォント [1] に含まれる、補助私用領域(U+F0000 以降)の文字を
LuaLaTeX で用いようと思ったのですが、見当違いなグリフが表示され、うまく
いきません [2]。補助私用領域に文字が含まれるフォントを、にしき的フォント
以外に知らないので、フォントの問題なのかそうでないかの切り分けができない
のですが、この現象に対して、どのように対処すればよろしいでしょうか。

[1] http://hwm3.gyao.ne.jp/shiroi-niwatori/nishiki-teki.htm

[2] Twitter への投稿で申し訳ありませんが、
https://twitter.com/CareleSmith9/status/1274878014107422720
ひとみ さん への返信

Re: LuaTeX で補助私用領域の文字を使いたい

- Z. R. の投稿

解決策ではありませんが……。

あくまで自分の推測ですが、luaotfloadでは
「既定でUnicode文字に結びついていないグリフ(異体字とか)」
を、U+F0000以降の符号位置に“便宜的に”割り当てて処理をしているような気がしtます。例えば、IPAex明朝で(存在しないはずの)U+F0000以降の文字を出力させると、半角字形や縦書き字形が出てきます。

\documentclass{article}
\usepackage{fontspec}
\setmainfont{IPAexMincho}
\begin{document}
\symbol{"F0001}\symbol{"F0002}\symbol{"F0003}\symbol{"F0004}%
\symbol{"F0005}\symbol{"F0006}\symbol{"F0007}\symbol{"F0008}%
\symbol{"F0010}\symbol{"F0020}\symbol{"F0030}\symbol{"F0040}%
\symbol{"F0080}\symbol{"F0100}\symbol{"F0180}\symbol{"F0200}%
\end{document}
ひとみ さん への返信

Re: LuaTeX で補助私用領域の文字を使いたい

- 北川 弘典 の投稿
にしき的フォントでしか試していませんが……,

====
\documentclass{article}
\usepackage{fontspec}
\usepackage{luacode}
\begin{luacode*}
  my = my or {}
  function my.pua(n)
    local t, c = font.getfont(font.current()), 0
    if t and t.shared and t.shared.rawdata and t.shared.rawdata.descriptions then
      for i,v in pairs(t.shared.rawdata.descriptions) do
        if not v.name and v.unicode==n then c=i; break end
      end
    end
    tex.sprint(tostring(c))
  end
\end{luacode*}
\def\PUACHAR#1{\char\directlua{my.pua(\the\numexpr#1)}}

\setmainfont{Nishiki-teki}
\begin{document}

\PUACHAR{"F0000} \PUACHAR{"F0001} \PUACHAR{"F00A5} \PUACHAR{"F00B3} \PUACHAR{"F012B}
\end{document}
====

% ...shared.rawdata.descriptions[c] は luaotfload が符号位置 c に割り当てたグリフ
% の情報を格納するテーブルですが,この中の unicode エントリを見るとそのグリフの
% 元々の Unicode 符号位置がわかるようです.
% ただ,例えば notdef も「にしき的フォント」の U+F0000 も unicode エントリの値は
% 0xF0000 なので,よくわかりません(上で書いている name の有無では怪しい?)…….
北川 弘典 への返信

Re: LuaTeX で補助私用領域の文字を使いたい

- ひとみ さん の投稿
ZR 様、北川様

返信ありがとうございます。

うまくいかなかった理由は理解できましたし、北川さんの
\PUACHAR で得たい出力を得ることができました。

確かに、LuaTeX-ja の資料 [1] に、Unicode にデフォルト
で存在しない文字は U+F0000 以降に移動されると書いて
ありますね。(果たして、もとから U+F0000 以降に存在
していた文字も含めて移動させるのは、期待されている
動作なのかはよくわかりませんが)

[1] https://ja.osdn.net/projects/luatex-ja/wiki/%E8%B3%87%E6%96%99-luaotfload%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6