Изменить переменную среды Windows

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

Установить путь к 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 Files (x86) \ Intel \ TXE Components \ iCLS \; C: \ Программные файлы \ 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 Server \ Clie nt 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 \ мое имя \ 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 \ my name \ 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 \ my name \ Desktop \ adb + - + платформа + инструменты + v28.0.1 "


person NelsonGon    schedule 28.02.2020    source источник
comment
C:\\PROGRA~1\\MIKTEX~1.9\\miktex\\bin\\x64, вероятно, находится в вашей переменной PATH Windows. В этом случае вам необходимо удалить его.   -  person Stéphane Laurent    schedule 28.02.2020
comment
@ StéphaneLaurent Спасибо, я просмотрел PATH (отредактировал выше), но не нашел. Как мне его лучше всего найти?   -  person NelsonGon    schedule 28.02.2020
comment
Переменная PATH содержит несколько папок, а не файлы. Измените "latex" на "miktex" в вашей команде R, и вы должны его найти. Чтобы удалить его, перейдите в меню «Пуск» Windows и укажите путь к поиску. Вы должны найти что-то вроде Редактировать переменные среды. В windows 10 это очень чисто. Затем вам нужно удалить эту папку из переменной PATH.   -  person Stéphane Laurent    schedule 28.02.2020
comment
К сожалению, единственная переменная, которую я вижу, - это все еще MikTeX 2.9 в переменных среды Windows.   -  person NelsonGon    schedule 28.02.2020
comment
Хм ... может быть, в файле Renviron изменена переменная R PATH? Перейдите в папку, содержащую вашу установку R, и найдите файл Renviron (я думаю, что он находится в папке etc). Откройте его (это текстовый файл) и проверьте.   -  person Stéphane Laurent    schedule 28.02.2020
comment
Я только что создал файл Renviron.site и указал туда путь, но он все равно не сработал. В настоящее время изучаю удаление через оболочку (возможно, 1.9 где-то спрятана).   -  person NelsonGon    schedule 28.02.2020
comment
Не могли бы вы включить в свой пост результат Sys.getenv("PATH").   -  person Stéphane Laurent    schedule 28.02.2020
comment
Добавил в пост.   -  person NelsonGon    schedule 28.02.2020


Ответы (1)


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 в длинное.

person Yihui Xie    schedule 28.02.2020
comment
К сожалению, с тех пор я начал knitr вязать, поэтому я, возможно, никогда не узнаю, в чем была настоящая проблема (я просто помню, что это было связано с pdflatex ошибкой и возвратом этого пути в сообщении об ошибке). Все равно спасибо. - person NelsonGon; 29.02.2020