编辑Windows环境变量

时间:2020-02-28 16:12:44

标签: r r-markdown knitr pdflatex miktex

我已阅读以下几个问题:

Set path to miktex for pdflatex in R

How can I set the latex path for sweave in R?

https://tex.stackexchange.com/questions/267299/how-to-fix-the-sorry-but-c-miktex-pdftex-exe-did-not-succeed-error https://tex.stackexchange.com/questions/429706/rstudio-not-detecting-miktex https://tex.stackexchange.com/questions/231595/rstudio-cant-find-pdflatex-on-windows-7

上面的列表并没有穷尽我尝试过的所有内容,还包括重新安装RStudio,R和MikTex。

然后我以为我可以编辑路径以删除R不断调用的MikTeX 1.9,但不知道该怎么做。

我发现this function表明我已经为MikTex设置了正确的路径,但是R一直在调用MikTeX 1.9:

Sys.which2 <- function(cmd) {
  stopifnot(length(cmd) == 1)
  if (.Platform$OS.type == "windows") {
    suppressWarnings({
      pathname <- shell(sprintf("where %s 2> NUL", cmd), intern=TRUE)[1]
    })
    if (!is.na(pathname)) return(setNames(pathname, cmd))
  }
  Sys.which(cmd)
}

Sys.whichSys.which2之间的不同输出:


Sys.which2("pdflatex")
                                                       pdflatex 
"C:\\Program Files\\MiKTeX 2.9\\miktex\\bin\\x64\\pdflatex.exe" 

 Sys.which("pdflatex")
                                                  pdflatex 
"C:\\PROGRA~1\\MIKTEX~1.9\\miktex\\bin\\x64\\pdflatex.exe" 


如何最好地解决这个问题?

我的想法是以某种方式找到R在哪里找到此MikTeX 1.9并替换它,但我在系统上找不到它,也不知道Sys.which在幕后正在做什么。

编辑

尝试定位1.9的位置:

stringr::str_detect(unlist(strsplit(Sys.getenv("PATH"),";")),"latex")
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

sys.getenv("PATH"的输出:

“ C:/ Program Files / MiKTeX 2.9 / miktex / bin / x64:C:\ Program Files \ R \ R-3.6.2 \ bin \ x64; C:\ Program Files(x86)\ Common Files \ Oracle \ Java \ javapath; C:\ ProgramData \ Oracle \ Java \ javapath; C:\ Program Files \ copasi.org \ COPASI 4.22.170 \ bin; C:\ Program Files(x86)\ Intel \ TXE Components \ iCLS \; C:\ Program Files \ Intel \ TXE组件\ iCLS \; C:\ WINDOWS \ system32; C:\ WINDOWS; C:\ WINDOWS \ System32 \ Wbem; C:\ WINDOWS \ System32 \ WindowsPowerShell \ v1.0 \; C :\ Users \ Administrator \ AppData \ Local \ Microsoft \ WindowsApps; C:\ Recovery \ OEM \ Backup \; C:\ Program Files \ Intel \ TXE Components \ DAL \; C:\ Program Files(x86)\ Intel \ TXE Components \ DAL \; C:\ Program Files \ Intel \ TXE Components \ IPT \; C:\ Program Files(x86)\ Intel \ TXE Components \ IPT \; C:\ Program Files \ Intel \ WiFi \ bin \; C :\ Program Files \ Common Files \ Intel \ WirelessCommon \; C:\ WINDOWS \ system32; C:\ WINDOWS; C:\ WINDOWS \ System32 \ Wbem; C:\ WINDOWS \ System32 \ WindowsPowerShell \ v1.0 \; C: \ WINDOWS \ System32 \ OpenSSH \; E:\ MATLAB \ runtime \ win64; E:\ MATLAB \ bin; C:\ Program Files \ Git \ cmd; C:\ Program Files \ Microsoft SQL Server \ C原始SDK \ ODBC \ 130 \ Tools \ Binn \; C:\ Program Files(x86)\ Microsoft SQL Server \ 140 \ Tools \ Binn \; C:\ Program Files \ Microsoft SQL Server \ 140 \ Tools \ Binn \; C :\\ Program Files \ Microsoft SQL Server \ 140 \ DTS \ Binn \; C:\ ProgramData \ chocolatey \ bin; C:\ Program Files \ MiKTeX 2.9 \ miktex \ bin \ x64 \; C:\ Users \ my name \ AppData \ Local \ Programs \ Python \ Python38 \ Scripts \; C:\ Users \ my name \ AppData \ Local \ Programs \ Python \ Python38 \; C:\ Users \ my name \ AppData \ Local \ Programs \ Python \ Python36 \ Scripts \; C:\ Users \ my name \ AppData \ Local \ Programs \ Python \ Python36 \; C:\ Users \ my name \ Desktop \ wget-1.20.3-win64; C:\ Users \ my name \ AppData \ Local \ Programs \ Python \ Python37 \ Scripts \; C:\ Users \我的名字\ AppData \ Local \ Programs \ Python \ Python37 \; C:\ Users \我的名字\ AppData \ Local \ Microsoft \ WindowsApps; C:\ Users \我的名字\ AppData \ Local \ Programs \ Python \ Python37-32; E:\ jdk-12_windows-x64_bin; C:\ Users \我的名字\ AppData \ Local \ Microsoft \ WindowsApps; C:\ Users \我的名字\ Desktop \ adb +-+ platform + tools + v28.0.1“

1 个答案:

答案 0 :(得分:1)

C:\\PROGRA~1\\MIKTEX~1.9并不意味着MiKTeX v1.9。它是8.3 filename。由于字符串MiKTeX 2包含一个“特殊字符”(即空格),因此它将转换为MIKTEX~1.9部分仍保留为“扩展名”,因此{{1} }变成MiKTeX 2.9,在这种情况下确实令人困惑。

我觉得您实际上要解决的问题可能是另外一个问题。如果是这样,您可以提出实际问题。据我所知,您的环境变量没有任何问题。

如果您确实需要长名称,可以调用MIKTEX~1.9将8.3的短名称转换为长名称。