Как заставить WSL использовать Git-Bash для запуска команды `latexmk`?

Как заставить WSL использовать Git-Bash для запуска команды `latexmk`?

Вопрос: Могу я позвонитьGit-Bashотдать командуВСЛ? Подробные контексты находятся между двумя разделителями. (Простое решение, добавленное в конце этого вопроса.)


Я использую псевдоним для компиляции всех своих *.texдокументов, используяGit-Bashна Windows 10. В моем c:/users/UserName/.bashrc, я сопоставил:

alias lmk='latexmk -pvc -pdf --synctex=1 -src-specials -silent -time -interaction=nonstopmode'

С родным Gvim.exeредактором иGit-Bashэкземпляр, в котором размещена latexmkкоманда, мне больше не нужно беспокоиться об утомительном процессе компиляции.

Однако, когда я даю ту же latexmkкоманду через WSL, я больше не могу выполнять прямой и обратный поиск. Некоторые опции для компилятора будут записывать в PDF (или его файл синтаксиса), сопоставляя все строки в PDF со строками из исходного файла, подробно описанными в путях с поддержкой WSL. Другой способ исправить это: либо полностью перейти в мир WSL, где я использую собственный редактор + средство просмотра PDF (что для меня совершенно ново), либо продолжить отладку в компиляторе и посмотреть, смогу ли я заменить все пути с поддержкой WSL на пути с поддержкой Windows (что, опять же, занимает много времени).

Простым решением было бы каким-то образом вызвать Git-Bash из WSL, передавая lmkкоманды в Git-Bash как аргументы командной строки?


Помимо деталей, в целом, этоGit-Bashкакой-нибудь исполняемый файл, который я могу вызвать напрямую из WSL? Если да, то какрассказыватьWSL, что я хотел бы запустить следующую "штуку"? На моей машине я могу найтиGit-Bashкак: "C:\Program Files\Git\git-bash.exe". Я попытался перейти /mnt/c/Program\ Files/Git/git-bash.exeна WSL, но он любезно открыл только отдельное окно Git Bash.

введите описание изображения здесь


Однострочное решение с использованием zsh + GitBash

Я использую zshWSL в качестве оболочки по умолчанию, и вот функция, которую я определил, чтобы сделать lmk TexFilename.texее доступной для непосредственного вызова из командной строки WSL:

function lmk(){
    "$(wslpath "C:\Program Files\Git\git-bash.exe")" --hide -c "lmk $1"
}
# Note, the `lmk` here is actually alias from Git-Bash, as defined in: c:/users/UserName/.

Следующая строка делает завершение скрытого процесса bash/ perlудобным: выполнение lmk_killприведет к завершению всех запущенных компиляторов (через latexmkperl-скрипт).

alias lmk_kill="powershell.exe kill -n perl"

Подводя итог: с новой zshфункцией я компилирую *.texфайлы из WSL так, как будто использую собственные компиляторы MikTeX в Windows. Это хорошо работает с моими текущими настройками GVIM + Sumatra, где и прямой, и обратный поиск полностью функциональны.


Еще более простое решение: хост latexmkчерез PowerShell

Подробности см.этот ответниже.

alias lmk='powershell.exe -c latexmk -pvc -pdf --synctex=-1 -src-specials -silent -time -interaction=nonstopmode'

И компилируйте main.texфайлы в любом месте, скажем, в панели сеанса Tmux на WSL, используя простую команду lmk main.tex.

решение1

Сначала приведем пример. Пусть простая команда будет touch test.txt.

  • В стиле Windows:
"C:\Program Files\Git\git-bash.exe" --hide -c "touch test.txt"
  • В стиле WSL:
wsl.exe -- "$(wslpath "C:\Program Files\Git\git-bash.exe")" --hide -c "touch test.txt"

Итак, как это работает? --Параметр after wsl.exeпередает оставшуюся командную строку как есть. Затем wslpathпреобразует путь в стиле Windows (обратная косая черта) в стиль WSL/Unix (прямая косая черта), то есть C:\становится /mnt/c(по умолчанию). Остальные параметры — это параметры для git-bash.exe.Здесьнекоторые из них. Для дальнейшего чтения см.Совместимость WSL с Windows.

решение2

Нет необходимости оставаться привязанным Git-bashвообще. Основным требованием в исходном посте было компилировать *.texдокументы с использованием собственного MikTeX на машинах Windows. Любая командная оболочка, имеющая доступ к PATHи, следовательно, latexmkисполняемому файлу, может выполнить работу.

Проблема с Git-bash: git-bash.exeОкно всегда запускается в своем собственном эмуляторе в новом окне, что делает невозможным работу с Tmux. Теперь я не вижу необходимости использовать Git-Bash для производства. Прощай, мой старый друг :). Тем не менее, запуск установщика для gitиз егостраница загрузкивсе еще является первым, что нужно сделать, когда я настраиваю свою машину Windows. Он обеспечивает git.exeто, что нужно для gvim.exeWindows.

Практический способ компиляции *.texфайлов с использованием Native MikTeX ( latexmk)

В Windows доступны и другие командные оболочки, и все они доступны для WSL. Например: powershell.exeдолжен открыть PowerShell в том же эмуляторе, который размещает сеанс WSL, что позволяет «размещать latexmkпроцесс компиляции в WSL». Это открывает дверь для размещения нескольких «фоновых компиляторов» через Tmux.

Однострочная команда для вызова latexmkиз MikTeX с использованием собственной установки Windows 10:

powershell.exe -c latexmk -pvc -pdf --synctex=-1 -src-specials -silent -time -interaction=nonstopmode 

Использование: назначить длинную строку команды псевдониму для оболочки, используемой в WSL, например:

alias lmk='powershell.exe -c latexmk -pvc -pdf --synctex=-1 -src-specials -silent -time -interaction=nonstopmode'

Затем из каталога, в котором main.texнаходится, выполните команду lmk main.texдля компиляции документа LaTeX в непрерывном режиме. Набор флагов, который следует за latexmkкомандой, также включит обратный/прямой поиск.

Связанный контент