pstricks の yunit の誤解、バグ、または極度の不正確さでしょうか?

pstricks の yunit の誤解、バグ、または極度の不正確さでしょうか?

給餌latex

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

次に、dvips結果の DVI ファイルに適用し、結果の Postscript ファイルを開くとgv、私の理解では、最低点がベースラインから 1 cm 上にある 5 cm の長さの垂直線分が 4 つ表示されるはずです。ただし、表示される線分は 3 つだけで、長さと最低点の両方が異なります。

latex-dvips-gvの出力

PSTricksを使ったLaTeXは本当にそれで不正確ですか、それともどこかにバグ(例えば、サイレントオーバーフロー/アンダーフロー)が隠れているのでしょうか?ログとコンソールは警告しません。

答え1

TeX は固定小数点演算を使用し、\psset{yunit=.000001}%内部の寸法レジスタとして保存されます。\psyunit=0.000001cmこれは 0pt に設定するのと同じです。最終結果は、最終的なpspicture高さが 0pt になります (すべての高さは、丸め誤差に応じて基本的に任意です)。

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

ショー

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

yunitすでに妥当なTex値の限界に達しているので、最終的な設定は

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

ショー

{into \dimen166=0.0pt}

したがって、はyunit0pt に設定されます。

答え2

すべての計算を PS レベルで実行し、TeX ボックス (pspicture) を 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}

ここに画像の説明を入力してください

関連情報