编辑 Windows 环境变量

Edit Windows environmental variable

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

Set path to miktex for pdflatex 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,但不知道该怎么做。

我发现 这表明我实际上已经设置了正确的 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\Client SDK\ODBC0\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server0\Tools\Binn\;C:\Program Files\Microsoft SQL Server0\Tools\Binn\;C:\Program Files\Microsoft SQL Server0\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\my name\AppData\Local\Programs\Python\Python37\;C:\Users\my name\AppData\Local\Microsoft\WindowsApps;C:\Users\my name\AppData\Local\Programs\Python\Python37-32;E:\jdk-12_windows-x64_bin;C:\Users\my name\AppData\Local\Microsoft\WindowsApps;C:\Users\my name\Desktop\adb+-+platform+tools+v28.0.1"

C:\PROGRA~1\MIKTEX~1.9 并不意味着字面上的 MiKTeX v1.9。这是一个8.3 filename。因为字符串 MiKTeX 2 包含一个 "special character"(即 space),它被转换为 MIKTEX~1.9 部分仍然保留为 "extension", 所以 MiKTeX 2.9 变成了 MIKTEX~1.9, 这在这种情况下确实令人困惑).

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

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