注意事项:
- 我必须使用
beamer
文档类来创建分步教程。 - 我必须使用
preview
包装来修剪外面的所有东西pspicture
。 - 使用
standalone
文档类是不可能的,因为我们无法满足上述两个要求。 - 我必须定义在 TeX 和 PostScript 世界中都可用的常量。
- 常量声明不能太冗长。单个声明必须同时在两个世界中提供一个常量。
我做了什么:
- 我在 David Carlisle 的帮助下定义了一个宏,
\const[]{}{}
用于同时在 TeX 和 PostScript 世界中定义一个常量。请参阅下面的 MWE 了解详细信息。
梅威瑟:
\documentclass{beamer}
\usepackage[nomessages]{fp}
\newcommand\const[3][6]{%
\edef\temporary{trunc(#3}%
\expandafter\FPeval\csname#2\expandafter\endcsname
\expandafter{\temporary:#1)}%
\pstVerb{/#2 \csname#2\endcsname\space def}%
}
\usepackage{pst-node}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{pspicture}
\PreviewBorder=12pt
\const{Major}{3}% semi major
\const{Minor}{2}% semi minor
\begin{document}
\begin{frame}
\begin{pspicture}[showgrid](-\Major,-\Minor)(\Major,\Minor)
\pause
\psellipse(0,0)(!Major Minor)% produces GhostScript errors
%\psellipse(0,0)(!\Major\space \Minor)
\end{pspicture}
\end{frame}
\end{document}
问题:
使用 GhostScript 进行编译失败,因为 PostScript 世界中的所有常量都被丢弃了preview
。
失败的解决方案:
移动
\const{Major}{3}% semi major \const{Minor}{2}% semi minor
从序言到正文
pspicture
\begin{frame} \begin{pspicture}[showgrid](-\Major,-\Minor)(\Major,\Minor) \const{Major}{3}% semi major \const{Minor}{2}% semi minor \pause \psellipse(0,0)(!Major Minor)% produces GhostScript errors %\psellipse(0,0)(!\Major\space \Minor) \end{pspicture} \end{frame}
是不可能的,因为 TeX 世界中的常量必须是可访问的
\begin{pspicture}[showgrid](-\Major,-\Minor)(\Major,\Minor)
。
糟糕的解决方案:
使用
\psellipse(0,0)(!\Major\space \Minor)
而不是\psellipse(0,0)(!Major Minor)
会使 RPN 表达式变得神秘。使用
\pstheader
不方便,因为我必须手动为每个世界声明一个常量。
有前途的想法:
编辑\const[]{}{}
实现以创建一个新的头文件(如果不存在)并将每个 PostScript 常量附加到头文件。稍后可以使用\pstheader{}
宏加载此头文件。
问题:
如何防止预览在完成我的场景时丢弃我在序言中定义的 PostScript 常量?
答案1
您可以保存您的 ps 定义并将其注入 pspicture 中:
\documentclass{beamer}
\usepackage[nomessages]{fp}
\newcommand\const[3][3]{%
\edef\temporary{round(#3}%
\expandafter\FPeval\csname#2\expandafter\endcsname
\expandafter{\temporary:#1)}%
\edef\pspicturedefs{\pspicturedefs
\noexpand\pstVerb{/#2 \csname#2\endcsname\space def}}%
}
\usepackage{pst-node}
\def\pspicturedefs{}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{pspicture}
\PreviewBorder=12pt
\const{Major}{3}% semi major
\const{Minor}{2}% semi minor
\begin{document}
\begin{frame}
\begin{pspicture}[showgrid](-\Major,-\Minor)(\Major,\Minor)
\pspicturedefs
\pause
\psellipse(0,0)(!Major Minor)% produces GhostScript errors
%\psellipse(0,0)(!\Major\space \Minor)
\end{pspicture}
\end{frame}
\end{document}