Изменить Windows переменная среды - PullRequest
1 голос
/ 28 февраля 2020

Я прочитал несколько вопросов, перечисленных ниже:

Установить путь к miktex для pdflatex в R

Как мне установить путь латекса для развертки в 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.

Затем я подумал, что мог бы отредактировать путь для удаления MikTeX 1.9, который продолжает вызывать 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 Файлы (x86) \ Intel \ TXE Components \ iCL S \; C: \ Program Files \ Intel \ TXE Components \ iCLS \; C: \ WINDOWS \ system32; C: \ WINDOWS; C: \ WINDOWS \ System32 \ Wbem; C: \ WINDOWS \ System32 \ WindowsPowerShell \ v1.0 \; C: \ Users \ Администратор \ 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 Сервер \ Client SDK \ ODBC \ 130 \ Tools \ Binn \ ; C: \ Program Files (x86) \ Microsoft SQL Сервер \ 140 \ Tools \ Binn \; C: \ Program Files \ Microsoft SQL Сервер \ 140 \ Tools \ Binn \; C : \ Program Files \ Microsoft SQL Сервер \ 140 \ DTS \ Binn \; C: \ ProgramData \ chocolatey \ bin; C: \ Program Files \ MiKTeX 2.9 \ miktex \ bin \ x64 \; C : \ Users \ мое имя \ AppData \ Local \ Programs \ Python \ Python38 \ Scripts \; C: \ Users \ мое имя \ AppData \ Local \ Programs \ Python \ Python38 \; C: \ Users \ мое имя \ AppData \ Local \ Programs \ Python \ Python36 \ Scripts \; C: \ Users \ мое имя \ AppData \ Local \ Programs \ Python \ Python36 \; C: \ Users \ мое имя \ Desktop \ wget-1.20 .3-win64; C: \ Users \ мое имя \ 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 "

1 Ответ

1 голос
/ 29 февраля 2020

C:\\PROGRA~1\\MIKTEX~1.9 не означает буквально MiKTeX v1.9. Это 8.3 имя файла . Поскольку строка MiKTeX 2 содержит «специальный символ» (то есть пробел), она преобразуется в MIKTEX~1 (часть .9 по-прежнему остается «расширением», поэтому MiKTeX 2.9 стал MIKTEX~1.9, что в этом случае это действительно сбивает с толку).

Я чувствую, что проблема, которую вы на самом деле пытаетесь решить, может быть другой. Если это так, вы можете задать актуальный вопрос. Насколько я понимаю, в ваших переменных окружения нет ничего плохого.

Если вам действительно нужно длинное имя, вы можете позвонить normalizePath(), чтобы преобразовать короткое имя 8.3 в длинное имя.

...