Непонимание yunit в pstricks, или ошибка, или крайняя неточность?

Непонимание yunit в pstricks, или ошибка, или крайняя неточность?

Кормление 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 см выше базовой линии. Однако мы получаем только три отрезка, и они различаются как по длине, так и по самой низкой точке:

выход латекса-dvips-gv

Действительно ли LaTeX с PSTricksтакнеточно, или где-то скрывается ошибка (например, скрытое переполнение/недополнение)? Журнал и консоль нас не предупреждают.

решение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}

введите описание изображения здесь

Связанный контент