Seltsames Problem mit pstricks, dvi->ps->pdf-Toolchain und der Buchstabenkombination rt

Seltsames Problem mit pstricks, dvi->ps->pdf-Toolchain und der Buchstabenkombination rt

Das ist ein äußerst seltsamer Fehler. [Bearbeiten] Es ist kein Fehler, das Problem lag in meinem Code.

Ich habe eine Stunde damit verbracht, dies auf ein kleines, funktionierendes Beispiel zu reduzieren und kann nicht herausfinden, ob es minimal ist.

Eingerichtet: Ubuntu neueste Version, standardmäßig aktualisierte .tex-Datei:

\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}

Symptome: Dies wird mit der Toolchain dvi->ps-pdf nicht richtig kompiliert. Kompiliert mit pdflatex. Das Problem liegt an der Buchstabenkombination rt. Wenn Sie rt in rt oder eine andere Buchstabenkombination ändern, verschwindet das Problem. Das ist das Seltsamste, was ich je in Latex gesehen habe (könnte es an der Art liegen, wie die Buchstaben rt verarbeitet werden?)

Ich bin nicht sicher, wie reproduzierbar dieses Problem ist. Bitte lassen Sie es mich wissen, wenn bei Ihrem Computer dasselbe Problem auftritt.


[Bearbeiten] Das Problem ist nun gelöst. Herbert hat das Problem richtig erkannt: Was passiert, ist, dass t als interne Variable verwendet wird und meine Neudefinition von t etwas durcheinander bringt. Die von Herbert vorgeschlagene Lösung war auch die richtige: Ich muss ein lokales Wörterbuch definieren, in dem ich die Variable t auswerte und dann das Wörterbuch herausnehme. Ich poste eine korrigierte Version der Folie.

Ich muss zugeben, dass es sich hierbei nicht um einen Fehler handelte, sondern um einen Ausdruck meiner mangelnden Postscript-Kenntnisse.


[Bearbeiten]@cfr: Nein, Ihr Minimalbeispiel behandelt nicht dasselbe Problem wie mein Beispiel. Wenn Sie in meinem Beispiel das PSPicture entfernen, wird die Folie mit den Buchstaben rt problemlos kompiliert. Der RT-Bug tritt nur auf, wenn Sie das PSPicture verwenden.


@Herbert: ja, ich glaube, das Problem liegt darin, dass der Buchstabe t an mehr als einer Stelle verwendet wird, kombiniert mit der Verwendung von \pstVerb, um den Buchstaben t neu zu definieren. Ich muss dem Buchstaben t jedoch Werte zuweisen, um meine Funktion auszuwerten. Gibt es eine Möglichkeit, dies zu tun, ohne \pstVerb zu verwenden?


[Bearbeiten] @cfr: Der Fehler, den ich bekam, kam von der ausführbaren Datei ps2pdf. Der Fehlerbericht sieht folgendermaßen aus:

Prozess gestartet: ps2pdf "pstricksProblem".ps

Fehler: /invalidrestore in --restore-- Operandenstapel: (r) 0,4 --nostringval-- --nostringval-- Ausführungsstapel: %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-- Wörterbuchstapel: --dict:1175/1684(ro)(G)-- --dict:1/20(G)-- --dict:163/200(L)-- --dict:189/300(L)-- Aktueller Zuordnungsmodus ist lokal Aktuelle Dateiposition ist 133316 GPL Ghostscript 9.10: Nicht behebbarer Fehler, Exitcode 1

Prozess mit Fehler(n) beendet


[Bearbeiten] Da Leute danach gefragt haben, sieht die Originalfolie so aus:

\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}

[Bearbeiten] Die Variable, die ich verwende, heißt t, weil ich die Funktion übergebe

3 t Unter

als Argument für eine Funktion, die \parametricplot aufruft, und der für parametricplot verwendete Variablenname ist t. Wenn Sie möchten, erstelle ich eine Funktion, deren Argument eine Funktion ist. Natürlich basiert mein Setup vollständig auf der Annahme, dass die Variable „t“ eine lokale Variable ist. Dass dies der Fall ist, wird durch die Tatsache unterstützt, dass die obige Folie funktioniert, wenn die Buchstaben r und t getrennt sind. Welche Rolle es jedoch spielt, dass die Buchstaben r und t nebeneinander stehen, kann ich nicht herausfinden.

[Bearbeiten] Endgültige korrigierte Version der Folie. Die Korrektur erfolgte auf Grundlage von Herberts Rat (vielen Dank!) und einer kurzen Lektüre der Postscript-Dokumentation.

\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}

-Todor Milev

Antwort1

Mir ist absolut nicht klar, was du zeigen willst. Wie ich schon sagte, twird es intern von beamerund auch als Variable von verwendet \psparametricplot. Es ist gefährlich, es neu zu definieren.Sagen Sie uns, was Sie zeigen möchtenund wir können eine nützliche Hilfe geben. Hier ist jedoch Ihr Beispiel:

\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}

Und die Ansicht der letzten Folie:

Bildbeschreibung hier eingeben

verwandte Informationen