Füttern latex
mit
\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 dvips
auf 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:
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.000001cm
was dem Setzen auf 0pt entspricht. Das Endergebnis ist, dass das Endergebnis pspicture
eine 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 yunit
bereits an der Grenze sinnvoller Tex-Werte, Ihre endgültige Einstellung
\tracingall\psset{yunit=.000001}\tracingnone
zeigt an
{into \dimen166=0.0pt}
daher yunit
wird 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}