Expl3 berechnet das Dimensionsverhältnis als int/decimal

Expl3 berechnet das Dimensionsverhältnis als int/decimal

Ich muss das Verhältnis zweier Dimensionen berechnen und anzeigen (möglicherweise als gerundeten int-Wert).

Ich weiß nicht, wie man das beste MWE produziert, aber hier ist ein Beispiel:

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

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

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

}
\ExplSyntaxOff
\begin{document}
\test

\end{document}

Ausgaben:

22609920/36044800

Und jetzt stecke ich fest, da ich nicht weiß, wie ich das Verhältnis berechnen kann, noch kann ich es auf eine Gleitkommavariable setzen, z. B. über

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

Da bekomme ich eine Fehlermeldung:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ./Senza-titolo.tex:13: LaTeX-Fehler: „kernel/misused-fp“ ! ! Eine Gleitkommazahl mit dem Wert „0,6272727272727273“ wurde falsch verwendet. ! ! Weitere Informationen finden Sie in der LaTeX3-Dokumentation. ! ! Geben Sie für sofortige Hilfe H ein. !..............................................

Antwort1

Es gibt, glaube ich, mehr als einen Weg.

Wenn du einen erweiterbaren Weg haben willst, \fp_eval:n {\dim_ratio:nn{}{}}reicht (verkürzt) aus, \NewDocumentCommanddas brauchst du dann nicht.

\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}

Bildbeschreibung hier eingeben

Antwort2

expl3Das ist hier überhaupt nicht nötig .

\documentclass{article}

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

\begin{document}

\test

\end{document}

Noch besser: Verwenden Sie LuaTeX!

\documentclass{article}
\begin{document}

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

\end{document}

verwandte Informationen