Expl3 calcula a proporção da dimensão como int/decimal

Expl3 calcula a proporção da dimensão como int/decimal

Tenho que calcular a proporção de duas dimensões e exibi-la (possivelmente como o valor int arredondado).

Não sei como produzir o melhor MWE, mas aqui está um exemplo:

\documentclass{article}
\usepackage{expl3}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\test}{}{%

\dim_ratio:nn{\columnwidth}{\textheight}

}
\ExplSyntaxOff
\begin{document}
\test

\end{document}

Saídas:

22609920/36044800

E agora estou preso, pois não sei como calcular a proporção, nem consigo configurá-la para uma variável de ponto flutuante, por exemplo, via

\fp_new:N\l_my_fp
\fp_set:Non\l_my_fp{\dim_ratio:nn{\columnwidth}{\textheight}}

Desde que recebo um erro:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ./Senza-titolo.tex:13: Erro LaTeX: "kernel/misused-fp" ! ! Um ponto flutuante com valor '0,6272727272727273' foi mal utilizado. ! ! Veja a documentação do LaTeX3 para mais informações. ! ! Para ajuda imediata digite H . !................................................

Responder1

Há mais de uma maneira, eu acho.

Se você quiser ter uma forma expansível, \fp_eval:n {\dim_ratio:nn{}{}}(encurtada) é o suficiente, você não precisa \NewDocumentCommanddisso então.

\documentclass{article}
%\usepackage{expl3}
\usepackage{xparse}

\ExplSyntaxOn

 \fp_new:N \l_moriambar_ratio_fp 

 % Expandable: 

\cs_new:Npn \calctheratio #1#2 {%
  \fp_eval:n {\dim_ratio:nn{\columnwidth}{\textheight}}
}  


\NewDocumentCommand{\test}{}{%


\fp_set:Nn \l_moriambar_ratio_fp  {\dim_ratio:nn{\columnwidth}{\textheight}}

\fp_use:N \l_moriambar_ratio_fp


}
\ExplSyntaxOff
\begin{document}
\test

\calctheratio{\columnwidth}{\textwidth}

\end{document}

insira a descrição da imagem aqui

Responder2

Não há nenhuma necessidade expl3aqui.

\documentclass{article}

\makeatletter
\def\test{%
  \strip@pt\dimexpr\columnwidth/\strip@pt\textheight\relax}
\makeatother

\begin{document}

\test

\end{document}

Melhor ainda: use LuaTeX!

\documentclass{article}
\begin{document}

\directlua{
  tex.sprint(tex.getdimen("columnwidth")/tex.getdimen("textheight"))
}

\end{document}

informação relacionada