编辑 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.which
和 Sys.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名称转换为长名称。
我已经阅读了下面列出的几个问题:
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,但不知道该怎么做。
我发现
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.which
和 Sys.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名称转换为长名称。