Re: Eliminare pt dall’espansione di \the

#76073
OldClaudio
Partecipante
    Up
    0
    Down
    ::


    Non è vero che \dimexpr divida solo per numeri interi, anzi esegue l’operazione a*b/c nell’ordine conservando il risultato parziale della moltiplicazione in un registro a 64 bit, per cui non ci sono pericoli di overflow, almeno nella moltiplicazione.

    Ma se devi calcolare il rapporto di due lunghezze a e c, metti usi per b la lungezza \p@ (che è una lunghezza di 1pt, e assegni il risultato di \dimexr a una dimensione. Credo di avere gia provato a metter \dimexpr come argomento di \the e mi pare di ricordare di non avere avuto bisogno di disturbare un registro temporaneo; mi pare di ricordare di aver eseguito cose del tipo [tt]\strip@pt\dimexpr a*b/c\relax[/tt] senza nessun problema. Il vantoggio è che tutte le operazioni eseguite da \dimexpr sono eseguite nei registri della cpu e non richiedono conversioni da e per cs di LaTeX.

    Ricorda solo che \dimexpr arrotonda il risultato all’intero più vicino, mentre \divide semplicemente tronca, ma non è necessario ricorrere a \divide. Io lo facevo anni fa, quando le estensioni di eTeX non erano ancora incorporate dentro pdftex e xetex. luatex non ne ha bisogno perché sa fare i calcoli con lua. Avevo implementato con i comandi tradizionali di TeX la “long division” estraendo una cifra alla volta del quoziente, calcolando il resto, moltiplicando per 10 e ricominciando. Funzionava benissimo, ma ovviamente richiedeva di lavorare con gli scaled points e gestire il separatore decimale a parte. Tikz e pgfplots, con la loro libreria matematica non esistevano ancora…:wink:

    Go to top