gpt4 book ai didi

r - 使用 knitr 在 PDF 中制作动画,不仅支持 Adob​​e Reader

转载 作者:行者123 更新时间:2023-12-04 09:42:26 25 4
gpt4 key购买 nike

Knitr 有一个相当简洁的动画功能,它可以通过 FFMPEG 和 WebM 在 Markdown 和 HTML 中生成动画,在 PDF 中使用 animate LaTeX 包生成动画。但是,后者对 PDF 的支持仅限于 Adob​​e Reader(可能还有 PDF XChangeViewer)。我正在考虑实现我自己的动画功能,该功能将从一系列情节中生成 MP4 视频,并使用 LaTeX 包 media9 嵌入视频。这有更广泛的支持,包括 Okular 和至少一个 iOS PDF 阅读器。在 knitr 或另一个包中是否已经有另一种方法可以做到这一点?如果实现得好,似乎具有普遍适用性。

请注意,我已经发布了一个使用rgl 的动画示例作为对this question 的回答。 .它在 Adob​​e Reader 中运行良好,但依赖于脚本支持。

最佳答案

我有一些工作可以将一系列 png 转换为 mp4,然后使用 media9 包将其嵌入。它在 Windows 上的 Adob​​e Reader 中播放良好,但由于某种原因不适用于运行在 Linux Mate 上的 Okular。话虽如此,我试过的任何其他 pdf 也没有嵌入电影,所以这似乎是读者方面的问题。

这是.Rnw:

\documentclass{article}
\usepackage{media9}
\usepackage{graphicx, xcolor}

<< label = setup, include = FALSE>>=
library("rgl")
library("car")
library("knitr")
hook_rgl_spin_mp4 <- function(before, options, envir) {
if (!before) {
par3d(windowRect = 100 + options$dpi *
c(0, 0, options$fig.width,
options$fig.height))
if (!is.null(options$spin3d.axis)) {
spin3d.axis <- options$spin3d.axis
} else {
spin3d.axis <- c(0, 0, 1)
}
if (!is.null(options$spin3d.rpm)) {
spin3d.rpm <- options$spin3d.rpm
} else {
spin3d.rpm <- c(0, 0, 1)
}
spinFunc <- spin3d(axis = spin3d.axis, rpm = spin3d.rpm)
for(i in 1:options$fig.num) {
par3d(spinFunc(i * options$interval))
Sys.sleep(0.05)
rgl.snapshot(fig_path(".png", number = i), fmt = "png")
}
system(paste0('ffmpeg -y -r 10 -i "', sub("-1\\.", "-%d\\.", fig_path(".png", number = 1)),
'" -pix_fmt yuv420p "', vid_path <- fig_path(".mp4", number = 1), '"'))
options$fig.num <- 0
options$fig.show <- "hide"
paste0("\\includemedia[width=", options$out.width, ",height=", options$out.height,
",activate=pageopen,addresource=",
vid_path, ",flashvars={source=", vid_path, "}]{}{VPlayer.swf}")
}
}
knit_hooks$set(rgl = hook_rgl_spin_mp4)
@
\begin{document}

<< label=rgl1, rgl=TRUE, fig.show='animate', fig.width=5, fig.height=5, out.width='.6\\linewidth', out.height='.6\\linewidth', dev='png', fig.num = 40, interval=0.1, spin3d.axis=c(0, 0, 1), spin3d.rpm=20, results='asis'>>=
scatter3d(prestige ~ income + education, data=Duncan)
@

\end{document}

注意它必须有 results='asis' 才能工作,否则一切都在钩子(Hook)中完成。

关于r - 使用 knitr 在 PDF 中制作动画,不仅支持 Adob​​e Reader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31187561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com