我已阅读以下几个问题:
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.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组件\ 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“
答案 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的短名称转换为长名称。