Missverständnis von yunit in pstricks, oder ein Fehler, oder extreme Ungenauigkeit?

Missverständnis von yunit in pstricks, oder ein Fehler, oder extreme Ungenauigkeit?

Füttern latexmit

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

Wenn man dies dann dvipsauf die resultierende DVI-Datei anwendet und die resultierende Postscript-Datei öffnet gv, sollten meines Wissens vier vertikale 5 cm lange Liniensegmente angezeigt werden, deren niedrigster Punkt 1 cm über der Grundlinie liegt. Wir erhalten jedoch nur drei Liniensegmente, die sich sowohl in der Länge als auch im niedrigsten Punkt unterscheiden:

Ausgabe von latex-dvips-gv

Ist LaTeX mit PSTricks wirklichAlsoungenau, oder versteckt sich irgendwo ein Bug (z.B. ein stiller Überlauf/Unterlauf)? Das Log und die Konsole warnen uns nicht.

Antwort1

TeX verwendet Festkommaarithmetik und \psset{yunit=.000001}%speichert diese als internes Dimensionsregister, \psyunit=0.000001cmwas dem Setzen auf 0pt entspricht. Das Endergebnis ist, dass das Endergebnis pspictureeine Höhe von 0pt hat (und die Höhen aller Werte sind im Wesentlichen beliebig und hängen nur vom Rundungsfehler ab).

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

zeigt an

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

ist also yunitbereits an der Grenze sinnvoller Tex-Werte, Ihre endgültige Einstellung

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

zeigt an

{into \dimen166=0.0pt}

daher yunitwird es auf 0pt eingestellt.

Antwort2

Führen Sie alle Berechnungen auf PS-Ebene durch und lassen Sie die TeX-Box (pspicture) in der TeX-freundlichen Unit:

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

Bildbeschreibung hier eingeben

verwandte Informationen