LuaLaTeX: Calcule o comprimento em Lua

LuaLaTeX: Calcule o comprimento em Lua

Peço desculpas se esta é uma pergunta de iniciante, mas acho extremamente difícil encontrar uma solução para o meu problema de Lua usando pesquisas on-line e navegando em manuais de referência.

Gostaria de calcular um comprimento: dividir \linewidthpor \baselineskip, pegar floore, finalmente, multiplicar por \baselineskip. O resultado deve ser retornado em pt.

Já falhei em entrar \baselineskipem Lua para poder fazer um cálculo com ela:

\documentclass{article}
\begin{document}
\begin{enumerate}
\item Linewidth works this way: \directlua{tex.sprint(tex.dimen['linewidth'] / 65536)tex.sprint('pt')}
\item and this way: \directlua{tex.sprint(tex.dimen.linewidth / 65536)tex.sprint('pt')}
\item \directlua{tex.sprint(tex.dimen['baselineskip'])}
\item \directlua{tex.print(tex.skip['baselineskip'].width)}
\item \directlua{tex.print(tex.skip['baselineskip'].stretch)}
\item \directlua{tex.sprint(tex.baselineskip)}
\end{enumerate}
\end{document}

Portanto, as questões são: Como faço para entrar \baselineskipem Lua e como posso calcular e gerar o comprimento que descrevi acima.

Se alguém conhecer um guia "real" para iniciantes do LuaLaTeX que também discuta esses problemas, eu apreciaria uma dica. Obrigado!


Solução

Com a ajuda das respostas abaixo, o comprimento acima pode ser calculado como:

\directlua{tex.sprint(math.floor(tex.dimen.linewidth / tex.baselineskip.width)
    * tex.baselineskip.width  / tex.sp('1pt') ..'pt')}

Responder1

Você pode usar tex.baselineskipem Lua para obter o baselineskip, mas um skip é um objeto userdata Lua (já que possui componentes de estiramento e redução, bem como um comprimento natural), portanto, você não pode usá-lo diretamente em expressões aritméticas in-line de Lua com/

\documentclass{article}

\begin{document}

\directlua{
print('baseline is '  ..tex.baselineskip.width)
}
\end{document}

produz saída terminal:

baseline is 786432

informação relacionada