Vorrei far calcolare valori dalla funzione \numexpr di pdftex modalità estesa all’interno di comandi pstricks, ma quando il calcolo riguarda valori decimali ricevo l’errore:`! Illegal unit of measure (pt inserted).
` Di seguito riporto il codice di un esempio minimo compilabile che riproduce sul mio sistema (TeX Live 2009) il problema.
`\documentclass[a4paper]{article}
\usepackage{pstricks}\pagestyle{empty}
\psset{unit=1mm}\begin{document}
\psline(\numexpr0.5\relax,0.5)(65.5,38.5)
\end{document}
`Come vedete il calcolo per \numexpr in questo caso è il più semplice possibile, mentre il risultato di:`\number\numexpr0.55555\relax`
è correttamente 0.55555 con il punto decimale.Naturalmente se vengono tolti di mezzo i decimali tutto funziona.
`\documentclass[a4paper]{article}
\usepackage{pstricks}\pagestyle{empty}
\psset{unit=1mm}\begin{document}
\psline(\numexpr5\relax,0.5)(65.5,38.5)
\end{document}`
\numexpr gestisce solo numeri interi. Un \relax termina la lista da dare in pasto a \numexpr ed è ignorato. Questo spiega perché il secondo esempio funziona: l’espansione di “\numexpr 5\relax” è “5”; nel primo esempio, invece, il token “.” che non è espandibile e non fa parte di quelli ammessi dalla sintassi di \numexpr, termina l’espressione e l’espansione finale di “\numexpr0.5\relax” è “0.5\relax” che a PSTricks non va bene.
Se vuoi trattare numeri decimali devi usare \dimexpr, magari in congiunzione con \strip@pt:
`\documentclass[a4paper]{article}
\usepackage{pstricks}
\makeatletter
\let\strippt\strip@pt
\makeatother
\pagestyle{empty}
\psset{unit=1mm}
\begin{document}
\psline(\strippt\dimexpr0.5pt\relax,0.5)(65.5,38.5)
\end{document}`
Adopera i numeri decimali come se fossero numeri puri, ma aggiungendo l’unità di misura “pt”, \strippt si occupa di toglierla.
Ciao
Enrico