Re: \numexpr ed i comandi di pstricks

#42364
Up
0
Down
::

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

Go to top