對 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,根據我的理解,應該顯示四個垂直的 5 厘米長的線段,其最低點在基線上方 1 厘米。然而,我們只得到三個線段,它們的長度和最低點都不同:

Latex-dvips-gv 的輸出

LaTeX 與 PSTricks 真的嗎所以不精確,或是否有隱藏在任何地方的錯誤(例如,無聲溢出/下溢)?日誌和控制台不會警告我們。

答案1

TeX 使用定點運算並\psset{yunit=.000001}%儲存為內部 dimen 暫存器,\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}

所以yunit設定為 0pt。

答案2

在 PS-Level 上進行所有計算,並讓 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}

在此輸入影像描述

相關內容