Problema estranho envolvendo pstricks, dvi->ps->pdf toolchain e a combinação de letras rt

Problema estranho envolvendo pstricks, dvi->ps->pdf toolchain e a combinação de letras rt

Este é um bug extremamente estranho [Editar], não é um bug, o problema estava no meu código.

Passei 1 hora reduzindo isso para um pequeno exemplo funcional, não consigo descobrir se é mínimo.

Configuração: versão mais recente do Ubuntu, .tex padrão atualizado. Arquivo:

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

Sintomas: Isso não compila corretamente com o conjunto de ferramentas dvi->ps-pdf. Compila com pdflatex. O problema está na combinação de letras rt. Se você alterar rt para rt ou qualquer outra combinação de letras, o problema desaparecerá. Esta é a coisa mais estranha que já vi no látex (será que é a forma como as letras rt são processadas?)

Não tenho certeza de quão reproduzível esse problema é. Informe-me se você tiver o mesmo problema em sua máquina!


[Editar]O problema foi resolvido. O problema foi identificado corretamente por Herbert: O que acontece é que t é usado como uma variável interna e minha redefinição de t atrapalha alguma coisa. A solução proposta por Herbert também foi a correta: preciso definir um dicionário local no qual avalio a variável t, e depois abrir o dicionário. Estou postando uma versão corrigida do slide.

Devo admitir que não foi um bug, mas uma manifestação da minha falta de conhecimento do pós-escrito.


[Editar]@cfr: não, seu exemplo mínimo não aborda o mesmo problema que meu exemplo. No meu exemplo, se você remover a imagem ps, o slide será compilado perfeitamente com as letras rt. O rt-bug aparece apenas se você usar o pspicture.


@Herbert: sim, acredito que o problema esteja no uso da letra t em mais de um lugar, combinado com o uso do \pstVerb para redefinir a letra t. No entanto, preciso atribuir valores à letra t para avaliar minha função. Existe uma maneira de fazer isso sem usar \pstVerb?


[Editar] @cfr: O erro que recebi foi no executável ps2pdf. O relatório de erros é assim:

Processo iniciado: ps2pdf "pstricksProblem".ps

Erro: /invalidrestore em --restore-- Pilha de operandos: (r) 0,4 --nostringval-- --nostringval-- Pilha de execução: %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-- Pilha de dicionário : --dict:1175/1684(ro)(G)-- --dict:1/20(G)-- --dict:163/200(L)-- --dict:189/300(L) -- O modo de alocação atual é local A posição atual do arquivo é 133316 GPL Ghostscript 9.10: Erro irrecuperável, código de saída 1

Processo encerrado com erro(s)


[Editar] Como as pessoas perguntaram, o slide original fica assim:

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

[Editar] A variável que uso se chama t, porque estou passando a função

3t sub

como argumento para uma função que chama \parametricplot, e o nome da variável em uso para parametricplot é t. Se desejar, estou criando uma função cujo argumento é uma função. Claro, minha configuração depende inteiramente da suposição de que a variável “t” é uma variável local. Que este seja o caso é apoiado pelo fato de que o slide acima funciona quando as letras r e t estão separadas. Qual é o papel das letras r e t lado a lado, entretanto, é algo que não consigo descobrir.

[Editar] Versão final corrigida do slide. A correção seguiu o conselho de Herbert (muito obrigado!) e uma pequena leitura da documentação pós-escrito.

\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

Responder1

Não está absolutamente claro para mim o que você deseja mostrar. Como já disse té usado internamente por beamere também como variável by \psparametricplot. É perigoso redefini-lo.Diga-nos o que você quer mostrare podemos dar uma ajuda útil. No entanto, aqui está o seu exemplo:

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

E a visão do último slide:

insira a descrição da imagem aqui

informação relacionada