我想在Linux 机器上的文档.swf
中拥有一个 flash 文件 () ,使用 pdfLaTeX 和 Evince。beamer
有没有办法创建运行外部播放器的文件的链接,或者更好的是,是否可以将其嵌入到我的演示文稿中?
对于第一个选项,我尝试了
\href{run:/usr/bin/gnash /tmp/test.swf}{test}
这给了我错误
Failed to open "/usr/bin/gnash /tmp/test.swf"
Error stating file '/usr/bin/gnash /tmp/test.swf': No such file or directory.
(然而一\href{run:/usr/bin/gnash}{test}
开始只是咬牙切齿)。
我知道flashmovie
包。但是我想使用 Evince 作为 PDF 查看器,而不是 Adobe Reader。
编辑:
最后我只使用了\href{run:/tmp/test.swf}
。我认为如果您通过 Evince 打开它,则打开文件的正确应用程序.swf
是由 选择的gnome-open
。如果您使用,okular
我猜是kde-open
。为了避免这些打开程序可能出现的配置问题并拥有更多控制权,我认为最好有一种方法可以指定应该打开我的文件的应用程序(在我的情况下gnash
),就像我在上面的问题中尝试的那样。所以如果有任何想法...
答案1
这实际上与 PDF 渲染器有关,而不是 TeX。我没有gnash
安装,也没有任何 flash 文件,但我用以下文件进行了测试:
\documentclass{article}
\usepackage{hyperref}
\begin{document}
\href{run:firefox http://www.math.ntnu.no/}{launch}
\href{http://www.math.ntnu.no/}{launch}
\end{document}
然后evince
第二个链接按预期打开了我部门的主页,但第一个链接出现了错误:
Error stating file `/path/to/directory/where/I/launched/evince/firefox http:/www.math.ntnu.no': No such file or directory
因此显然evince
是试图在其当前目录中启动一个名为firefox http://www.math.ntnu.no/
(嗯,模数消失斜杠)的程序。
然而,当我使用我常用的 PDF 阅读器尝试此操作时xpdf
,单击链接时显示:
About to execute the command: firefox http://www.math.ntnu.no/ &
并询问我是否真的想这样做。如果我点击“确定”,我就会得到我期望的结果。这个实验表明,观众在做某事时有一定的自由度。
查看生成的 PDF 文件,我看到以下内容:
4 0 obj
<</Border[0 0 1]/Subtype/Link/C[0 .7 .7]/A<</F(firefox http://www.math.ntnu.no/)/S/Launch>>/Type/Annot/Rect[147.716 656.239 178.213 665.15]/H/I>>
endobj
5 0 obj
<</Border[0 0 1]/Subtype/Link/C[0 1 1]/A<</URI(http://www.math.ntnu.no/)/Type/Action/S/URI>>/Type/Annot/Rect[179.541 656.239 210.038 665.15]/H/I>>
endobj
(请注意斜线是应该的)。因此,run:
指令会转换为Launch
动作,http:
指令也会转换为URI
动作。
查看 PDF 规范(或者至少,Adobe 的免费副本)我学到了比我想要的更多的关于 PDF 内部的知识,包括启动操作。这些内容在第 12.6.4.5 节(p422,内部编号,p430,外部)中有详细说明。有趣的是,其中有些部分带有“尚未定义”的标签。虽然我不认为这些与此相关(因为它们指的是特定于操作系统功能很少,但这些功能并未使用),我认为这意味着这里的规范可能会随着不寻常用例的出现而进行修订。(在阅读有关 Windows 程序名称中空格的行为后立即看到这一点,这是一个有趣的对比。)
因此,我的推论(仅此而已)是,PDF 查看器在遇到“启动”操作时所做的操作完全取决于该查看器。不幸的是,这包括是否将字符串视为单个命令名称或将其分解。实际上,我怀疑问题在于是否将其作为open
带引号的字符串传递给相关命令(或可能是 shell)。
为了避免这种情况,我建议编写一个小脚本来调用程序上的 Flash 查看器。类似这样的脚本:
!# /bin/sh
/usr/bin/gnash test.swf
然后从文件中调用它。
通过一些\write
技巧,您甚至可以tex
创建该文件本身。