С luatex
узлами глифов, представляющими лигатуру, есть components
поле типа node
, которое должно «указывать на компоненты лигатуры». Я не понимаю, как я могу получить компоненты, используя эту ссылку, любая помощь будет высоко оценена.
Для «стандартных» лигатур ff, fi, fl, ffi, ffl, имеющих фиксированный код (от U+FB00 до U+FB04), легко составить таблицу, решающую эту задачу, но как быть с менее распространенными, такими как ct, ft, …?
решение1
Это голова списка узлов, поэтому выглядит (для ff) так, как будто у вас есть hbox с двумя f
\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-слоты, но это помогает читать простые случаи.