喂养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 和 PSTricks 真的所以不精确,还是有 bug(例如,静默溢出/下溢)隐藏在某个地方?日志和控制台没有警告我们。
答案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}