Странная проблема с pstricks, dvi->ps->pdf toolchain и комбинацией букв rt

Странная проблема с pstricks, dvi->ps->pdf toolchain и комбинацией букв rt

Это крайне странная ошибка [Изменить] это не ошибка, проблема была в моем коде.

Я потратил 1 час, чтобы довести это до небольшого рабочего примера, не могу понять, является ли он минимальным.

Настройка: Ubuntu последней версии, стандартный обновленный .tex. Файл:

\documentclass{beamer}
\usepackage[english]{babel}
\usepackage[latin1]{inputenc}
\usepackage{times}
\usepackage{pst-plot}
\usepackage{pst-math}
\newcommand{\polarWedge}[3]{%
\pstVerb{%
/t #1 def%
}%
}%
\begin{document}
\begin{frame}
\begin{pspicture*}(-3,-1)(1.5,2.3)%
\polarWedge{0}{1}{t 2 div 1 add}%
\end{pspicture*}
rt
\end{frame}
\end{document}

Симптомы: Это не компилируется должным образом с помощью dvi->ps-pdf toolchain. Компилируется с помощью pdflatex. Проблема в комбинации букв rt. Если изменить rt на rt или на любую другую комбинацию букв, проблема исчезает. Это самая странная вещь, которую я когда-либо видел в latex (может быть, дело в способе обработки букв rt?)

Я не уверен, насколько воспроизводима эта проблема. Пожалуйста, дайте мне знать, если на вашем компьютере возникнет та же проблема!


[Изменить]Теперь проблема решена. Проблема была правильно определена Гербертом: происходит то, что t используется как внутренняя переменная, и мое переопределение t что-то портит. Решение, предложенное Гербертом, также было правильным: мне нужно определить локальный словарь, в котором я оцениваю переменную t, а затем извлекаю словарь. Я публикую исправленную версию слайда.

Должен признать, что это не ошибка, а проявление моего незнания PostScript.


[Edit]@cfr: нет, ваш минимальный пример не решает ту же проблему, что и мой пример. В моем примере, если вы удалите pspicture, слайд будет отлично компилироваться с буквами rt. Ошибка rt проявляется только если вы используете pspicture.


@Herbert: да, я действительно считаю, что проблема заключается в том, что буква t используется более чем в одном месте, в сочетании с использованием \pstVerb для переопределения буквы t. Однако мне нужно присвоить значения букве t, чтобы оценить мою функцию. Есть ли способ сделать это без использования \pstVerb?


[Изменить] @cfr: Ошибка, которую я получил, была из исполняемого файла ps2pdf. Отчет об ошибке выглядит так:

Процесс запущен: ps2pdf "pstricksProblem".ps

Ошибка: /invalidrestore в --restore-- Стек операнда: (r) 0.4 --nostringval-- --nostringval-- Стек выполнения: %interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push 1916 1 3 %oparray_pop 1915 1 3 %oparray_pop 1899 1 3 %oparray_pop 1787 1 3 %oparray_pop --nostringval-- %errorexec_pop .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- 1839 3 4 %oparray_pop --nostringval-- 1823 3 4 %oparray_pop --nostringval-- Стек словаря: --dict:1175/1684(ro)(G)-- --dict:1/20(G)-- --dict:163/200(L)-- --dict:189/300(L)-- Текущий режим выделения памяти — локальный Текущая позиция файла — 133316 GPL Ghostscript 9.10: Неустранимая ошибка, код выхода 1

Процесс завершен с ошибкой(ями)


[Изменить] Поскольку люди просили, оригинальный слайд выглядит так:

\documentclass{beamer}
\usepackage{etex}
\usepackage[english]{babel}
\usepackage[latin1]{inputenc}
\usepackage{times}
\usepackage{auto-pst-pdf}
\usepackage{pst-plot}
\usepackage{pst-math}
\newcommand{\polarWedge}[3]{%
\pstVerb{%
/t #1 def%
/firstX #1 57.29578 mul cos #3 mul def%
/firstY #1 57.29578 mul sin #3 mul def%
}%
\pstVerb{%
/t #2 def%
/secondX #2 57.29578 mul cos #3 mul def%
/secondY #2 57.29578 mul sin #3 mul def%
}%
\pscustom[fillcolor=cyan, fillstyle=solid, linecolor=blue]{%
\psline(0,0)(! firstX firstY)(! secondX secondY)(0,0)%
}%
}%
\newcommand{\drawPolar}[4]{%
\parametricplot[#4]{#1}{#2}{#3 t 57.29578 mul cos mul #3 t 57.29578 mul sin mul}%
}

\begin{document}
\begin{frame}
\begin{pspicture*}(-3,-1)(3.5,3.3)%
\uncover<2->{%
\polarWedge{0}{0.05}{3 t sub}%
}%
\uncover<3->{%
\polarWedge{0.05}{0.1}{3 t sub}%
}%
\uncover<4->{%
\polarWedge{0.1}{0.15}{3 t sub}%
}%
\uncover<5->{%
\polarWedge{0.15}{0.2}{3 t sub}%
}%
\uncover<6->{%
\polarWedge{0.2}{0.25}{3 t sub}%
}%
\uncover<7->{%
\polarWedge{0.25}{0.3}{3 t sub}%
}%
\uncover<8->{%
\polarWedge{0.3}{0.35}{3 t sub}%
}%
\uncover<9->{%
\polarWedge{0.35}{0.4}{3 t sub}%
}%
\drawPolar{0}{2.5}{3 t sub}{linecolor=red, plotpoints=1000}%
\end{pspicture*}
\uncover<1-10>{}
rt
\end{frame}
\end{document}

[Изменить] Переменная, которую я использую, называется t, потому что я передаю функцию

3 т суб

как аргумент функции, которая вызывает \parametricplot, а имя переменной, используемой для parametricplot, — t. Если хотите, я создаю функцию, аргументом которой является функция. Конечно, моя настройка полностью основана на предположении, что переменная «t» является локальной переменной. То, что это так, подтверждается тем фактом, что приведенный выше слайд работает, когда буквы r и t разделены. Однако, какова роль букв r и t, расположенных рядом, я не могу понять.

[Правка] Окончательная исправленная версия слайда. Исправление последовало за советом Герберта (большое спасибо!) и небольшим чтением документации PostScript.

\documentclass{beamer}
\usepackage{etex}
\usepackage[english]{babel}
\usepackage[latin1]{inputenc}
\usepackage{times}
\usepackage{auto-pst-pdf}
\usepackage{pst-plot}
\usepackage{pst-math}
\newcommand{\polarWedge}[3]{%
\pstVerb{%
/firstX  1 dict begin /t #1 def #1 57.29578 mul cos #3 mul end def%
/firstY  1 dict begin /t #1 def #1 57.29578 mul sin #3 mul end def%
/secondX 1 dict begin /t #2 def #2 57.29578 mul cos #3 mul end def%
/secondY 1 dict begin /t #2 def #2 57.29578 mul sin #3 mul end def%
}%
\pscustom[fillcolor=cyan, fillstyle=solid, linecolor=blue]{%
\psline(0,0)(! firstX firstY)(! secondX secondY)(0,0)%
}%
}%
\newcommand{\drawPolar}[4]{%
\parametricplot[#4]{#1}{#2}{#3 t 57.29578 mul cos mul #3 t 57.29578 mul sin mul}%
}

\begin{document}
\begin{frame}
\begin{pspicture*}(-3,-1)(3.5,3.3)%
\uncover<2->{%
\polarWedge{0}{0.05}{3 t sub}%
}%
\uncover<3->{%
\polarWedge{0.05}{0.1}{3 t sub}%
}%
\uncover<4->{%
\polarWedge{0.1}{0.15}{3 t sub}%
}%
\uncover<5->{%
\polarWedge{0.15}{0.2}{3 t sub}%
}%
\uncover<6->{%
\polarWedge{0.2}{0.25}{3 t sub}%
}%
\uncover<7->{%
\polarWedge{0.25}{0.3}{3 t sub}%
}%
\uncover<8->{%
\polarWedge{0.3}{0.35}{3 t sub}%
}%
\uncover<9->{%
\polarWedge{0.35}{0.4}{3 t sub}%
}%
\drawPolar{0}{2.5}{3 t sub}{linecolor=red, plotpoints=1000}%
\end{pspicture*}
\uncover<1-10>{}
\end{frame}
\end{document}

-Тодор Милев

решение1

Мне совершенно не ясно, что вы хотите показать. Как я уже сказал, tиспользуется внутренне beamerи также как переменная \psparametricplot. Переопределять его опасно.Расскажите нам, что вы хотите показатьи мы можем оказать полезную помощь. Однако, вот ваш пример:

\documentclass{beamer}
\usepackage{etex}
\usepackage{pst-plot}
\usepackage{pst-math}
\newcommand\polarWedge[3]{%
  \pstVerb{/t #1 def}
  \pscustom[fillcolor=cyan,fillstyle=solid,linecolor=blue,linewidth=0.2pt]{
    \psline(0,0)(! #1 COS #3 mul #1 SIN #3 mul)
    \parametricplot{#1}{#2}{#3 t COS mul #3 t SIN mul}
    \closepath}}
\newcommand\drawPolar[4]{%
  \parametricplot[#4]{#1}{#2}{#3 t COS mul #3 t SIN mul}%
}

\begin{document}
\begin{frame}
\begin{pspicture*}(-3,-1)(3.5,3.3)%
\multido{\iA=2+1,\rA=0.00+0.05,\rB=0.05+0.05}{16}{%
  \uncover<\iA->{\polarWedge{\rA}{\rB}{3 t sub}}}%
\drawPolar{0}{2.5}{3 t sub}{linecolor=red, plotpoints=100}%
\end{pspicture*}

rt
\end{frame}
\end{document}

И вид последнего слайда:

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

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