我正在尝试编译 TikZ 图形knitr
。我正在使用可用的示例here https://github.com/yihui/knitr-examples/blob/master/058-engine-tikz.Rmd。我专门尝试从 Rstudio 编织。
我从“R Markdown”选项卡获得的输出如下:
processing file: test.Rmd
Invalid Parameter - /test_files
Quitting from lines 16-31 (test.Rmd)
Error in (knit_engines$get(options$engine))(options) :
problems with `convert`; probably not installed?
Calls: <Anonymous> ... process_group.block -> call_block -> block_exec -> in_dir -> <Anonymous>
Execution halted
据易辉表示here https://github.com/yihui/knitr-examples/issues/38,我需要安装 ImageMagick 才能通过运行 TikZ 代码knitr
并且需要在我的 PATH 变量中列出 ImageMagick(我运行的是 Windows 7)。我已经安装了 ImageMagick,并且我相信我已经在 PATH 变量中正确指定了目录。我得到以下输出Sys.getenv("PATH")
[1] "C:\\Program Files\\R\\R-3.0.2\\bin\\x64;C:\\Program Files\\ImageMagick-6.8.9-Q16;C:\\Program Files\\Microsoft HPC Pack 2008 R2\\Bin\\;C:\\Program Files (x86)\\AMD APP\\bin\\x86_64;C:\\Program Files (x86)\\AMD APP\\bin\\x86;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;c:\\Program Files (x86)\\Microsoft SQL Server\\100\\Tools\\Binn\\;c:\\Program Files\\Microsoft SQL Server\\100\\Tools\\Binn\\;c:\\Program Files\\Microsoft SQL Server\\100\\DTS\\Binn\\;c:\\Program Files (x86)\\Microsoft SQL Server\\100\\Tools\\Binn\\VSShell\\Common7\\IDE\\;c:\\Program Files (x86)\\Microsoft SQL Server\\100\\DTS\\Binn\\;C:\\Program Files\\MiKTeX 2.9\\miktex\\bin\\x64\\;C:\\Program Files (x86)\\Microsoft Visual Studio 9.0\\Common7\\IDE\\PrivateAssemblies\\;c:\\Program Files (x86)\\ATI Technologies\\ATI.ACE\\Core-Static;C:\\PDF\\xpdfbin-win-3.03\\bin64;C:\\Program Files\\Microsoft SQL Server\\110\\DTS\\Binn\\;C:\\Program Files (x86)\\Microsoft SQL Server\\110\\Tools\\Binn\\;C:\\Program Files\\Microsoft SQL Server\\110\\Tools\\Binn\\;C:\\Program Files (x86)\\Microsoft SQL Server\\110\\Tools\\Binn\\ManagementStudio\\;C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\Common7\\IDE\\PrivateAssemblies\\;C:\\Program Files (x86)\\Microsoft SQL Server\\110\\DTS\\Binn\\;C:\\Program Files (x86)\\Windows Kits\\8.1\\Windows Performance Toolkit\\;C:\\Program Files\\SlikSvn\\bin;C:\\Program Files (x86)\\QuickTime\\QTSystem\\;C:\\Program Files\\nodejs\\;C:\\Program Files (x86)\\Google\\Google Apps Sync\\;C:\\Program Files (x86)\\Google\\Google Apps Migration\\;C:\\Program Files (x86)\\Microsoft Visual Studio 11.0\\Common7\\IDE\\PrivateAssemblies\\;C:\\Program Files\\ImageMagick-6.8.9-Q16;C:\\Users\\mienkoja\\AppData\\Local\\Pandoc\\;C:\\Program Files (x86)\\Google\\google_appengine\\;C:\\Users\\mienkoja\\AppData\\Roaming\\MiKTeX\\2.9\\miktex\\bin\\x64\\;C:\\Users\\mienkoja\\AppData\\Roaming\\npm"
如你看到的,C:\\Program Files\\ImageMagick-6.8.9-Q16;
在我的目录列表中是第二个,顺序似乎并不重要 - 我尝试将其移动到列表中的不同位置并得到相同的结果。
我还尝试以管理员身份运行 RStudio(我在用户和系统 PATH 变量中都指定了 ImageMagick),但仍然收到相同的错误消息。
TikZ 本身似乎也运行良好,因为我可以从 Rnw 文件或命令行将相同的代码编译为 PDF。
有没有人有任何其他想法为什么knitr
鉴于我的上述设置,是否要退出?
UPDATE
这似乎是与 ImageMagick 相关的 Windows 问题。当我尝试运行 r-blogger 条目中的示例 4 时,我意识到了这一点here http://www.r-bloggers.com/animate-gif-images-in-r-imagemagick/.
当我跑步时system("convert -delay 40 *.png example_4.gif")
从该示例的末尾,我收到以下警告消息:
Invalid Parameter - 40
Warning message:
running command 'convert -delay 40 *.png example_4.gif' had status 4
这似乎是一个问题,因为 Windows 在 System32 目录(也在 PATH 变量中)中有一个名为convert.exe
。如更详细描述的here http://savage.net.au/ImageMagick/html/install-convert.html,windows 文件是 Windows 系统实用程序,用于将 FAT 卷转换为 NTFS。我已尝试了引用链接中的所有建议(即重新排序 PATH 变量中的列表、重命名文件(Windows 显然不允许)以及编辑注册表(用户和本地计算机))。 Windows 似乎(以某种方式)优先考虑位于 System32 目录中的文件。
我还尝试使用 R 中的手动重定向 PATH 变量Sys.setenv()
功能。跑步system("where convert", intern=TRUE)
产生以下输出:
[1] "C:\\Program Files\\ImageMagick-6.8.9-Q16\\convert.exe" "C:\\Windows\\System32\\convert.exe"
第一个路径是正确的目录。第二条路径是上面引用的 Windows 系统函数。因此,我手动设置 PATH 变量如下:Sys.setenv(PATH=system("where convert", intern=TRUE)[1])
.
当我尝试编织时,我似乎超越了convert
错误。现在我在 R Markdown 控制台中收到以下错误:
error in texi2dvi(file = file, pdf = true, clean = clean, quiet = quiet, :
pdflatex is not available
这实际上是有道理的,因为我重置了 PATH 变量并且没有指定路径pdflatex.exe
- only convert.exe
。因此,我添加了路径pdflatex.exe
使用Sys.setenv()
函数如下:Sys.setenv(PATH=paste(Sys.getenv("PATH"),"C:\\Program Files\\MiKTeX 2.9\\miktex\\bin\\x64",sep=";"))
。随后调用Sys.getenv("PATH")
产生以下输出:
[1] "C:\\Program Files\\ImageMagick-6.8.9-Q16\\convert.exe;C:\\Program Files\\MiKTeX 2.9\\miktex\\bin\\x64"
因此,PATH 变量似乎具有所有必需的信息:convert.exe
和路径pdflatex.exe
。但是,在 PATH 变量中指定了两个目录后,我现在再次收到原始错误消息:
processing file: test.Rmd
Invalid Parameter - /test_files
Quitting from lines 16-31 (test.Rmd)
Error in (knit_engines$get(options$engine))(options) :
problems with `convert`; probably not installed?
Calls: <Anonymous> ... process_group.block -> call_block -> block_exec -> in_dir -> <Anonymous>
Execution halted
顺便说一句,继续上面的 r-blogger 示例,我可以在系统命令中完全指定路径,如下所示:system('"C:\\Program Files\\ImageMagick-6.8.9-Q16\\convert.exe" -delay 40 *.png example_4.gif')
。这将转换示例中的文件,不会出现警告或错误。但是,我无法(据我所知)手动指定路径convert.exe
for knitr
.
任何其他建议将不胜感激。