Как преобразовать спецификацию склеивания, например '\parfillskip=0pt plus 1fil', в узел склеивания LuaTeX

Как преобразовать спецификацию склеивания, например '\parfillskip=0pt plus 1fil', в узел склеивания LuaTeX

Я пытаюсь создать связующий узел, который можно назначить внутреннему параметру tex.parfillskip.

В Plain TeX связующее звено для \parfillskipназначается как \parfillskip=0pt plus 1fil. Выгрузка значений в Lua(TeX):

print("width: " .. tex.parfillskip.width)
print("stretch: " .. tex.parfillskip.stretch)
print("shrink: " .. tex.parfillskip.shrink)
print("stretch_order: " .. tex.parfillskip.stretch_order)
print("shrink_order: " .. tex.parfillskip.shrink_order)

приводит к такому выводу:

width: 0
stretch: 65536
shrink: 0
stretch_order: 2
shrink_order: 0

Итак, мои вопросы:

  • Как преобразовать значение 1filв stretchкомпонент спецификации клея. Это так же просто, как умножить на 65536(как это выглядит из дампа)?
  • Как определить значение stretch_order? Кажется, это немного произвольно. Значение выше — 2, но stretch_orderзначение для tex.topskip0. Как определить, что нужно поместить в этот компонент для спецификации клея.

решение1

LuaTeX ввел дополнительную степень бесконечного клея: вы можете иметь fi, fil, fillи filll. Так что настройки типа

\parfillskip=0pt plus 1pt
\parfillskip=0pt plus 1fi
\parfillskip=0pt plus 1fil
\parfillskip=0pt plus 1fill
\parfillskip=0pt plus 1filll

будут иметь порядки растяжения 0, 1, 2, 3, 4 соответственно.

Действительно

{\directlua{tex.setglue("parfillskip",65536,65536,65536,1,1)}\showthe\parfillskip}

остановлюсь на

> 1.0pt plus 1.0fi minus 1.0fi.

Единицы измерения указаны в баллах, поэтому, чтобы получить 1, <unit>вам нужно 65536, что бы <unit>вы ни выбрали из приведенных выше.

Связанный контент