我制作了一个动画(在 Beamer 演示文稿中使用 animate-package 的 animateinline),其中包含一个带有 4 个点的 \psline。这些点是用“postscript math”计算的。我只想包含一次计算,所以我使用了几个 postscript定义命令在所有其他点中重复使用后记计算的结果。我在后记文件中找到了 4 个点,但顺序相反,所以我必须把计算和定义-命令进入最后 4 个点。一切正常,但我的问题是:
1.)我可以在将来的更新中依赖这个反向顺序吗?或者
2.) 有没有更优雅的方式来包含 \psline 的 4 个点中使用的 postscript 计算和 def 命令?
3.) 是否可以在 pspicture 中打印计算值(例如最小代码示例中的“UL”)?
在最小代码示例中,“UL”、“UR”和“xposi”是重用的值,“anzl”和“anzr”是计算的临时定义:
\documentclass{beamer}
\usepackage[svgnames,pdf]{pstricks}
\usepackage{pst-plot}
\usepackage{fp}
\usepackage{animate}
\setbeamertemplate{navigation symbols}{}
\usetheme{CambridgeUS}
\usecolortheme{dolphin}
\newcommand\dceininz[4]{
\begin{pspicture}(-0.7,-1.2)(5.8,1.7)%
\psaxes[ticks=y,labels=y,labelsep=2pt,dy=1,Dy=#2]{->}(0,0)(-0.5,-1.0)(5.5,1.6)[$z$,0][$u/V$,270]
\FPset\time{#1}
\FPdiv\time\time{5.0}
\FPclip\time\time
\rput[b](2.5,-0.9){$t=\time\tau$}
\psline[linecolor=black!40](! 0 #4\space 1 add #3\space 1 sub mul #3\space #4\space mul 1 sub div 1 #3\space sub div)%
(! 5 #4\space 1 add #3\space 1 sub mul #3\space #4\space mul 1 sub div 1 #3\space sub div)
% THIS IS THE PSLINE WITH 4 POINTS
\psline[linewidth=2pt,linecolor=blue](! 0 UL)(! xposi UL)(! xposi UR)%%
(! /anzl #1\space 10 div floor 2 mul def /anzr #1\space 5 add 10 div floor 2 mul 1 sub def %
/UL 0 def 0 1 anzl {dup #3\space exch 2 idiv exp exch #4\space exch 1 add 2 idiv exp mul /UL exch UL add def} for %
/UR 0 def 0 1 anzr {dup #3\space exch 2 idiv exp exch #4\space exch 1 add 2 idiv exp mul /UR exch UR add def} for #1\space 5 div floor cvi 0 eq {/UR 0 def} {} ifelse %
/xposi #1\space #1\space 5 div floor 5 mul sub #1\space cvi 10 mod 5 lt {} {5 exch sub} ifelse def 5 UR)
\psline(5,-0.1)(5,0.1)
\rput[t](5,-0.15){$z$}
\end{pspicture}%
}
\begin{document}
\begin{frame}{Minimum Example: transmission line with dc excitation}
\begin{columns}
\begin{column}[t]{128mm}
\begin{center}
\psset{xunit=0.8}
\begin{animateinline}[poster=0,controls={play,step,stop}]{10}%
\multiframe{101}{ntmpi=0.00+0.5}{\dceininz{\ntmpi}{8}{-0.6}{0.6}}%
\end{animateinline}
\end{center}
\end{column}
\end{columns}
\end{frame}
\end{document}
我正在使用“latex.exe”->“dvips.exe -T 363pt,273pt”-> Acrobat ps2pdf
提前致谢,弗里茨
答案1
1.)我可以在将来的更新中依赖这个反向顺序吗?或者
无论传入的更新如何,PostScript 计算始终以逆波兰表示法表示。
中的 PostScript 代码从 到 的\psline(A)(B)(C)(D)
处理对我来说也很奇怪。将来会改变吗?可能不会!D
A
2.) 有没有更优雅的方式来包含 \psline 的 4 个点中使用的 postscript 计算和 def 命令?
我尝试过重构您的原始代码。将常用的 PostScript 常量放入\pstVerb
。不要忘记添加尾随百分号以删除不需要的空格。
3.) 是否可以在 pspicture 中打印计算值(例如最小代码示例中的“UL”)?
PostScript 值无法打印。但是如果你想打印它,还有另一个技巧。定义一个 TeX 宏,例如\def\UL{\psCalculate{}}
,然后你可以用 打印它\rput(...,...){\UL}
。
我的建议:将内容与生成图形的代码分开。
第一的
创建一个新的 TeX 输入文件,名称graph.tex
如下。
% graph.tex
\documentclass[pstricks,border=12pt,12pt]{standalone}
\usepackage{pst-plot,pst-calculate}
\sisetup
{
round-integer-to-decimal,% optional
round-mode=places,
round-precision=1
}
\newcommand\atom[4]{
\begin{pspicture}(-0.7,-1.2)(5.8,1.7)%
\psaxes[ticks=y,labels=y,labelsep=2pt,dy=1,Dy=#2]{->}%
(0,0)(-0.5,-1.1)(5.5,1.6)[$z$,0][$u/V$,180]
\pstVerb
{%
/one #1 def /two #2 def /three #3 def /four #4 def
/anzl one 10 div floor 2 mul def
/anzr one 5 add 10 div floor 2 mul 1 sub def
/tmp four 1 add 1 three four mul sub div def
}%
\psline[linecolor=black!40](!0 tmp)(!5 tmp)
% THIS IS THE PSLINE WITH 4 POINTS
\psline[linewidth=1pt,linecolor=blue]
(!0 UL)(!xposi UL)(!xposi UR)%
(! /UL 0 def
0 1 anzl
{dup three exch 2 idiv exp exch four exch 1 add 2 idiv exp mul
/UL exch UL add def
} for
/UR 0 def
0 1 anzr
{dup three exch 2 idiv exp exch four exch 1 add 2 idiv exp mul
/UR exch UR add def
} for
one 5 div floor cvi 0 eq {/UR 0 def} {} ifelse
/xposi one dup 5 div floor 5 mul sub
one cvi 10 mod 5 lt {} {5 exch sub} ifelse
def
5 UR
)
\psline(5,-0.1)(5,0.1)
\rput[b](2.5,-0.9){$t=\psCalculate{#1/5}\tau$}
\rput[t](5,-0.15){$z$}
\end{pspicture}}
\begin{document}
\multido{\n=0.00+0.50}{101}{\atom{\n}{8}{-0.6}{0.6}}
\end{document}
使用构建流程对其进行编译latex-dvips-ps2pdf
。现在您有一个名为的多页 PDF graph.pdf
。每页代表动画的一帧。
第二
从您的主 TeX 输入文件(即用于生成演示文稿的文件beamer
)中导入以下内容。编译graph.pdf
它animategraphics
两次使pdflatex
动画作品!
\documentclass{beamer}
\usepackage{animate}
\setbeamertemplate{navigation symbols}{}
\usetheme{CambridgeUS}
\usecolortheme{dolphin}
\begin{document}
\begin{frame}{Minimum Example: transmission line with dc excitation}
\begin{columns}
\begin{column}[t]{128mm}
\begin{center}
\animategraphics[controls,loop,autoplay,scale=1.5]{5}{graph}{}{}
\end{center}
\end{column}
\end{columns}
\end{frame}
\end{document}
关于的解释animategraphics
:
\animategraphics[palindrome,controls,loop,autoplay,scale=<scale>]{<frame rate>}{"<diagram filename>"}{}{}
答案2
将点定义为自己的宏:
\documentclass{beamer}
\usepackage[svgnames]{pstricks}
\usepackage{pst-plot}
\usepackage{fp}
\usepackage{animate}
\setbeamertemplate{navigation symbols}{}
\usetheme{CambridgeUS}
\usecolortheme{dolphin}
\def\getCoor#1#2#3#4{
/anzl #1\space 10 div floor 2 mul def /anzr #1\space 5 add 10 div floor 2 mul 1 sub def
/UL 0 def 0 1 anzl {dup #3\space exch 2 idiv exp exch #4\space exch 1 add 2 idiv exp mul /UL
exch UL add def} for
/UR 0 def 0 1 anzr {dup #3\space exch 2 idiv exp exch #4\space exch 1 add 2 idiv exp mul
/UR exch UR add def} for #1\space 5 div floor cvi 0 eq {/UR 0 def} {} ifelse
/xposi #1\space #1\space 5 div floor 5 mul sub #1\space cvi 10 mod 5 lt {} {5 exch sub}
ifelse def 5 UR }
\newcommand\dceininz[4]{%
\begin{pspicture}(-0.7,-1.2)(5.8,1.7)
\psaxes[ticks=y,labels=y,labelsep=2pt,dy=1,Dy=#2]{->}(0,0)(-0.5,-1.0)(5.5,1.6)[$z$,0][$u/V$,270]
\FPset\time{#1}
\FPdiv\time\time{5.0}
\FPclip\time\time
\rput[b](2.5,-0.9){$t=\time\tau$}
\psline[linecolor=black!40]%
(! 0 #4\space 1 add #3\space 1 sub mul #3\space #4\space mul 1 sub div 1 #3\space sub div)%
(! 5 #4\space 1 add #3\space 1 sub mul #3\space #4\space mul 1 sub div 1 #3\space sub div)
\psline[linewidth=2pt,linecolor=blue](! 0 UL)(! xposi UL)(! xposi UR)(! \getCoor{#1}{#2}{#3}{#4})
\psline(5,-0.1)(5,0.1)
\rput[t](5,-0.15){$z$}
\end{pspicture}%
}
\begin{document}
\begin{frame}{Minimum Example: transmission line with dc excitation}
\begin{columns}
\begin{column}[t]{128mm}
\begin{center}
\psset{xunit=0.8}
\begin{animateinline}[poster=0,controls={play,step,stop}]{10}%
\multiframe{101}{ntmpi=0.00+0.5}{\dceininz{\ntmpi}{8}{-0.6}{0.6}}%
\end{animateinline}
\end{center}
\end{column}
\end{columns}
\end{frame}
\end{document}