Кормление 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такнеточно, или где-то скрывается ошибка (например, скрытое переполнение/недополнение)? Журнал и консоль нас не предупреждают.
решение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}