Mal-entendido sobre yunit em pstricks, ou um bug, ou extrema imprecisão?

Mal-entendido sobre yunit em pstricks, ou um bug, ou extrema imprecisão?

Alimentando latexcom

\documentclass{article}
\pagestyle{empty}
\usepackage{pstricks}
\begin{document}
{1:
\begin{pspicture}(-.1,-1)(.1,5)
  \psline(0,0)(0,5)
\end{pspicture}}
{$10^{-4}$: \psset{yunit=.0001}%
\begin{pspicture}(-.1,-10000)(.1,50000)
  \psline(0,0)(0,50000)
\end{pspicture}}
{$10^{-5}$: \psset{yunit=.00001}%
\begin{pspicture}(-.1,-100000)(.1,500000)
  \psline(0,0)(0,500000)
\end{pspicture}}
{$10^{-6}$: \psset{yunit=.000001}%
\begin{pspicture}(-.1,-1000000)(.1,5000000)
  \psline(0,0)(0,5000000)
\end{pspicture}}
\end{document}

em seguida, aplicar dvipsao arquivo DVI resultante e abrir o arquivo Postscript resultante gvdeve mostrar, no meu entendimento, quatro segmentos de linha verticais de 5 cm de comprimento cujo ponto mais baixo está 1 cm acima da linha de base. No entanto, obtemos apenas três segmentos de reta, e eles variam tanto em comprimento quanto no ponto mais baixo:

saída de látex-dvips-gv

LaTeX com PSTricks é realmenteentãoimpreciso ou há um bug (por exemplo, um overflow/underflow silencioso) escondido em algum lugar? O log e o console não nos avisam.

Responder1

TeX usa aritmética de ponto fixo e \psset{yunit=.000001}%é salvo como um registro de dimensão interno, \psyunit=0.000001cmo que equivale a defini-lo como 0pt. O resultado final é que o final pspicturetem altura 0pt (e as alturas de todos eles são essencialmente arbitrárias dependendo apenas do erro de arredondamento)

\tracingall\psset{yunit=.0001}\tracingnone

mostra

\psyunit=\dimen166
...
{into \dimen166=0.00304pt}

então yunitjá está no limite dos valores tex razoáveis, sua configuração final

\tracingall\psset{yunit=.000001}\tracingnone

mostra

{into \dimen166=0.0pt}

então o yunitestá definido como 0pt.

Responder2

Faça todos os cálculos no nível PS e deixe a caixa TeX (pspicture) na unidade compatível com TeX:

\DocumentMetadata{}
\documentclass{article}
\pagestyle{empty}
\usepackage{pstricks}
\def\myLine(#1,#2)(#3,#4){%
  \psline(#1,#2)(!#3 #4 yunit mul)}

\begin{document}
{1:
    \begin{pspicture}(-.1,-1)(.1,5)
        \psline(0,0)(0,5)
\end{pspicture}}
{$10^{-4}$: \pstVerb{/yunit 0.0001 def}%
    \begin{pspicture}(-.1,-1)(.1,5)
        \myLine(0,0)(0,50000)
\end{pspicture}}
{$10^{-5}$: \pstVerb{/yunit 0.00001 def}%
    \begin{pspicture}(-.1,-1)(.1,5)
        \myLine(0,0)(0,500000)
\end{pspicture}}
{$10^{-6}$: \pstVerb{/yunit 0.000001 def}%
    \begin{pspicture}(-.1,-1)(.1,5)
        \myLine(0,0)(0,5000000)
\end{pspicture}}
\end{document}

insira a descrição da imagem aqui

informação relacionada