第一的

第一的

我制作了一个动画(在 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)处理对我来说也很奇怪。将来会改变吗?可能不会!DA

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.pdfanimategraphics两次使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}

相关内容