涉及 pstricks、dvi->ps->pdf 工具鏈和字母組合 rt 的奇怪問題

涉及 pstricks、dvi->ps->pdf 工具鏈和字母組合 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 工具鏈無法正確編譯。使用 pdflatex 編譯。問題在於字母組合 rt。如果將 rt 改為 rt 或任何其他字母組合,問題就會消失。這是我在 Latex 中見過的最奇怪的事情(這可能是 rt 字母的處理方式嗎?)

我不確定這個問題的重現性如何,如果您的機器上遇到相同的問題,請告訴我!


[編輯]此問題現已解決。 Herbert 正確地識別了這個問題:發生的情況是 t 被用作內部變量,而我對 t 的重新定義弄亂了一些東西。 Herbert 提出的解決方案也是正確的:我需要定義一個本地字典,在其中評估變數 t,然後彈出該字典。我正在發布幻燈片的更正版本。

我必須承認這不是一個錯誤,而是我缺乏後記知識的表現。


[編輯]@cfr:不,你的最小範例沒有解決與我的範例相同的問題。在我的範例中,如果刪除 ppicture,投影片將可以正常編譯並帶有字母 rt。只有當您使用 pspicture 時,rt-bug 才會出現。


@Herbert:是的,我確實認為問題在於字母 t 在多個地方使用,並結合使用 \pstVerb 來重新定義字母 t。但是,我確實需要為字母 t 賦值來評估我的函數。有沒有辦法在不使用 \pstVerb 的情況下做到這一點?


[編輯] @cfr:我得到的錯誤來自 ps2pdf 執行檔。錯誤報告如下所示:

進程開始:ps2pdf“pstricksProblem”.ps

錯誤:/invalidrestore in --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 178% runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- 1839 3 4 %oparray_pop --nostringval-- 1823 3 4 %oparray_pop --nostringval--pop 字典堆疊: --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 並排的作用是什麼,我無法弄清楚。

[編輯] 投影片的最終更正版本。根據赫伯特的建議(非常感謝!)和閱讀一些後記文件進行了更正。

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

最後一張投影片的檢視:

在此輸入影像描述

相關內容