今年,我所在的领域有一个大型会议,与欧洲足球锦标赛同期举行。幸运的是,我的演讲与任何比赛都不重叠,但如果将来发生这种情况,我想知道是否可以在演示文稿中加入beamer
一些 JavaScript 魔法,从互联网上获取实时结果并将其显示在底部栏中。
我研究过并看过一些在 TeX 中嵌入 JS 的示例,但一切似乎都只是在打开文档或提交 PDF 表单时执行一些简单操作的函数。具体来说,我现在的问题是:
我可以在 PDF 内部运行 AJAX 请求吗,或者安全限制是否太严格?
如何嵌入每隔 X 秒或者每次显示新幻灯片时调用一次的代码?
哪些软件包可以使我的编程工作更加轻松?
答案1
套餐media9
为可选套餐。
此示例显示了我在网络上找到的基于 Flash 的 RSS 阅读器中的最新 FIFA 新闻。它嵌入在 Beamer 演示文稿中每张幻灯片的页脚中。但它似乎不会更新内容。但是,当移动到下一张演示文稿幻灯片时,它会重新加载(包含更新的内容)(需要 Acrobat Reader)。
\documentclass{beamer}
\usepackage{media9}
\setbeamertemplate{footline}{
\includemedia[
width=\paperwidth,height=0.1\linewidth,
activate=pageopen, deactivate=pageclose,
flashvars={rss=http://www.fifa.com/rss/index.xml},
url
]{}{http://rsstool.sanriotown.com/rssReader.swf}%
}
\begin{document}
\begin{frame}{Frame title}
Please concentrate on the slide content!
\end{frame}
\end{document}
↗另一个例子,使用SlideShow.swf
(也media9
)显示从网络加载的生活图像。
答案2
一种选择是使用 Lua 来获取数据当文件被编译时。然后,设置一个批处理脚本,每 30 秒左右重新编译一次 TeX 文件,并使用自动刷新 pdf 文件的 pdf 阅读器。
这是一个示例(在 ConTeXt 中),它从网络服务器获取特定位置的当前日期和时间,解析返回的 XML 文件,并显示结果。
\enabledirectives[schemes.threshold=10] % Don't cache downloaded file for more than 10 sec
% I use earth tools as an example, which returns data in XML format.
\startluacode
thirddata = thirddata or {}
thirddata.url = "http://www.earthtools.org/timezone-1.1/40.71417/-74.00639"
function thirddata.getcurrenttime()
-- Fetch remote url and store it in a file. ConTeXt automatically caches the
-- file for a duration given by `schemes.threshold`
local filename = resolvers.getreadfilename("loc",".", thirddata.url)
-- Read the file for data
local xmldata = xml.load (filename)
-- Parse XML data.to find localtime
local time = xml.text(xmldata, "xml://timezone/localtime")
print("DEBIG:", time)
return time
end
\stopluacode
\def\getCurrentTime{\ctxlua{context(thirddata.getcurrenttime())}}
\starttext
The current time is New York is \getCurrentTime.
\stoptext
当然,如果您正在运行批处理脚本来编译文件,您也可以使用您选择的任何编程语言来获取数据,但这有什么乐趣呢?