給餌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 つだけで、長さと最低点の両方が異なります。
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}
したがって、はyunit
0pt に設定されます。
答え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}