1

我问了一个相关的问题:检查是否安装了程序

但是在我在所有三个系统上为自己测试解决方案之前,我会避免回答。我可以让 pandoc 在 Windows 机器上的 R 中工作,但在 linux 上,我从 R 终端得到每个方法的这个错误/响应:

1:

> system('pandoc -v')
sh: 1: pandoc: not found

2:

> myPaths <- c("pandoc", 
+              "~/.cabal/bin/pandoc", 
+              "~/Library/Haskell/bin/pandoc", 
+              "C:\\PROGRA~1\\Pandoc\\bin\\pandoc") 

> Sys.which(myPaths)
                           pandoc               ~/.cabal/bin/pandoc 
                               ""   "/home/tyler/.cabal/bin/pandoc" 
     ~/Library/Haskell/bin/pandoc C:\\PROGRA~1\\Pandoc\\bin\\pandoc 
                               ""                                "" 

3:

> Sys.which("pandoc")
pandoc 
"" 

你可能认为我没有安装 pandoc 并且在路径上,但我相信我有。从干净的终端会话:

> tyler@trinker ~ $ echo $PATH
> /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/tyler/.cabal/bin

tyler@trinker ~ $ pandoc -v
pandoc 1.10.1
Compiled with citeproc-hs 0.3.7, texmath 0.6.1.3, highlighting-kate 0.5.3.6.
Syntax highlighting is supported for the following languages:
    Actionscript, Ada, Alert, Alert_indent, Apache, Asn1, Asp, Awk, Bash,
    Bibtex, Boo, C, Changelog, Clojure, Cmake, Coffee, Coldfusion, Commonlisp,
    Cpp, Cs, Css, Curry, D, Diff, Djangotemplate, Doxygen, Doxygenlua, Dtd,
    Eiffel, Email, Erlang, Fortran, Fsharp, Gnuassembler, Go, Haskell, Haxe,
    Html, Ini, Java, Javadoc, Javascript, Json, Jsp, Julia, Latex, Lex,
    LiterateCurry, LiterateHaskell, Lua, Makefile, Mandoc, Matlab, Maxima,
    Metafont, Mips, Modula2, Modula3, Monobasic, Nasm, Noweb, Objectivec,
    Objectivecpp, Ocaml, Octave, Pascal, Perl, Php, Pike, Postscript, Prolog,
    Python, R, Relaxngcompact, Rhtml, Ruby, Scala, Scheme, Sci, Sed, Sgml, Sql,
    SqlMysql, SqlPostgresql, Tcl, Texinfo, Verilog, Vhdl, Xml, Xorg, Xslt, Xul,
    Yacc, Yaml
Copyright (C) 2006-2013 John MacFarlane
Web:  http://johnmacfarlane.net/pandoc
This is free software; see the source for copying conditions.  There is no
warranty, not even for merchantability or fitness for a particular purpose.

如何让 Linux Mint 上的 R 识别 pandoc?(我是 Linux 新手)

4

2 回答 2

4

我也有这个问题。我也通过 cabal 安装了 pandoc。如果你通过 apt-get 安装应该没有问题。如果我从终端启动 R,我没有问题,但尝试从 RStudio 中检测 pandoc 会遇到一些麻烦。原因是 RStudio 不会读取您的 bash 环境变量,因此如果您修改 .bashrc 中的路径,RStudio 将不会检测到这一点。一种解决方案是改为通过 .profile 修改路径。

将此添加到 .profile 文件的底部并删除 .bashrc 文件中的路径修改,您应该能够从 R 中识别 pandoc。

if [ -d "$HOME/.cabal/bin" ] ; then
    PATH="$PATH:$HOME/.cabal/bin"
fi
于 2013-02-20T02:03:25.453 回答
3

这就是我的想法。我去掉了你html5函数中的所有其他东西,只是为了看看它会返回什么,并让你大致了解我的思维过程:

首先,创建一个函数来确定 Pandoc 的安装位置。如果匹配多个位置(在您的情况下很可能是“pandoc”和“~/.cabal/bin/pandoc”,如果它正确检测到路径),它将只选择第一个选项。

wheresPandoc <- function() {
  myPaths <- c("pandoc", 
               "~/.cabal/bin/pandoc", 
               "~/Library/Haskell/bin", 
               "C:\\PROGRA~1\\Pandoc\\bin\\pandoc.exe")
  temp <- Sys.which(myPaths)
  temp <- names(temp[temp != ""])[1]
  if (is.na(temp)) stop("Pandoc not installed in one of the typical locations")
  else temp
}

单独运行该函数如下所示:

wheresPandoc()
# [1] "~/.cabal/bin/pandoc"

所以,你可以在你的html5函数中使用它的输出来构造你的system“动作”。

html5 <- function(in.file = NULL, out.file = NULL) {
  action <- paste0(wheresPandoc(), 
                   " -s -S -i -t dzslides --mathjax ", 
                   in.file, " -o ", out.file)
  action
}

html5(in.file = "this.txt", out.file = "that.html")
# [1] "~/.cabal/bin/pandoc -s -S -i -t dzslides --mathjax this.txt -o that.html"

这可能会使事情变得过于复杂,但如果您认为您的用户精通技术或在有趣的位置安装程序(并记住他们安装程序的位置)的用户类型,您可以考虑更改wheresPandoc为类似以下内容。我已经注释掉了典型的阴谋集团位置,所以你可以看到它是如何工作的。

wheresPandoc <- function() {
  myPaths <- c("pandoc", 
  #            "~/.cabal/bin/pandoc", 
               "~/Library/Haskell/bin", 
               "C:\\PROGRA~1\\Pandoc\\bin\\pandoc.exe")
  temp <- Sys.which(myPaths)
  temp <- names(temp[temp != ""])[1]
  if (is.na(temp)) {
    ans <- readline("Pandoc not installed in one of the typical locations.\n 
                    Do you know where Pandoc is installed? (y/n) ")
    if (ans == "y") temp <- readline("Enter the (unquoted) path to Pandoc: ")
    else if (ans == "n") stop("Pandoc not installed or not found.")
  } 
  temp
}

在我的系统上,运行它看起来像这样。对于第一个问题,我回答“y”,然后它要求我指定 Pandoc 的未引用路径并使用它来构建您的system调用。

> html5(in.file = "this.txt", out.file = "that.html")
Pandoc not installed in one of the typical locations.

Do you know where Pandoc is installed? (y/n) y
Enter the (unquoted) path to Pandoc: ~/.cabal/install/pandoc
[1] "~/.cabal/install/pandoc -s -S -i -t dzslides --mathjax this.txt -o that.html"

我认识的大多数普通用户如果看到这样的问题就会直接关闭,但我认识的大多数 R 用户都比较注重技术,所以他们可能不会被它吓到。

于 2013-02-20T03:16:31.400 回答