编辑Windows环境变量

问题描述 投票:0回答:1

我已阅读下面列出的几个问题:

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-errorhttps://tex.stackexchange.com/questions/429706/rstudio-not-detecting-miktexhttps://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 Components \ 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 \ Cl方向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 +-+平台+工具+ v28.0.1“

r r-markdown knitr pdflatex miktex
1个回答
0
投票

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

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

如果确实需要长名称,则可以调用normalizePath()将8.3的短名称转换为长名称。

© www.soinside.com 2019 - 2024. All rights reserved.