![LuaTeX グリフ ノード: 合字の構成要素を見つける方法](https://rvso.com/image/461885/LuaTeX%20%E3%82%B0%E3%83%AA%E3%83%95%20%E3%83%8E%E3%83%BC%E3%83%89%3A%20%E5%90%88%E5%AD%97%E3%81%AE%E6%A7%8B%E6%88%90%E8%A6%81%E7%B4%A0%E3%82%92%E8%A6%8B%E3%81%A4%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95.png)
luatex
合字を表すグリフ ノードには、 「合字コンポーネントを指す」はずのcomponents
type フィールドがありますnode
。このリンクを使用してコンポーネントを取得する方法がわかりません。ご協力いただければ幸いです。
固定コード (U+FB00 から U+FB04) を持つ「標準」合字 ff、fi、fl、ffi、ffl の場合、問題を解決する表を作成するのは簡単ですが、ct、ft などのあまり一般的ではない合字の場合はどうでしょうか。
答え1
これはノードリストの先頭なので、(ffの場合)2つのfを持つhboxがあるように見えます。
\documentclass{article}
\begin{document}
\setbox0\hbox{fish diff --- abc}
\directlua{
glyphn=node.id('glyph')
h=tex.getbox(0)
print('\string\n=====')
for n in node.traverse_id(glyphn,h.list) do
if (n.components) then
print(n.char .. ' ' .. utf8.char(n.char))
for nn in node.traverse_id(glyphn,n.components) do
print('>> ' .. nn.char .. ' ' .. utf8.char(nn.char) )
end
end
end
print('\string\n=====')
}
\end{document}
プリント:
=====
64257 fi
>> 102 f
>> 105 i
64256 ff
>> 102 f
>> 102 f
8212 —
>> 45 -
>> 45 -
>> 45 -
=====
の構成要素のグリフ番号を示しfi
、ff
---
数字だけでなく文字の印刷も追加しました。非Unicodeスロットを使用した合字では意味不明な印刷になりますが、単純なケースでは読みやすくなります。