Wie kann ich WSL dazu bringen, Git-Bash zu verwenden, um einen „Latexmk“-Befehl auszuführen?

Wie kann ich WSL dazu bringen, Git-Bash zu verwenden, um einen „Latexmk“-Befehl auszuführen?

Frage: Kann ich anrufenGit-Basheinen Befehl erteilen vonWSL? Detaillierte Kontexte stehen zwischen den beiden Trennlinien. (Einfache Lösung am Ende dieser Frage angehängt.)


Ich verwende ein Pseudonym für die Zusammenstellung aller meiner *.texDokumente.Git-Bashunter Windows 10. In meinem c:/users/UserName/.bashrchabe ich Folgendes zugeordnet:

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

Mit einem nativen Gvim.exeEditor und einemGit-BashInstanz, die den latexmkBefehl hostet, muss ich mich nicht mehr mit dem langwierigen Kompilierungsprozess herumschlagen.

Wenn ich jedoch denselben latexmkBefehl über WSL ausgebe, kann ich keine Vorwärts- und Rückwärtssuche mehr durchführen. Einige Optionen für den Compiler schreiben in das PDF (oder seine Syntaxdatei) und ordnen alle Zeilen im PDF den Zeilen aus der Quelldatei zu, die in WSL-Pfaden aufgeführt sind. Eine andere Möglichkeit, diese Probleme zu beheben, besteht darin, entweder vollständig in die WSL-Welt zu wechseln, wo ich den nativen Editor + PDF-Viewer verwende (was für mich völlig neu ist), oder weiter im Compiler zu debuggen und zu prüfen, ob ich alle WSL-Pfade in Windows-Pfade umwandeln kann (was wiederum zeitaufwändig ist).

Eine einfache Lösung wäre, Git-Bash irgendwie von WSL aus aufzurufen und dabei die lmkBefehle als Befehlszeilenargumente an Git-Bash zu übergeben?


Abgesehen von den Details ist im AllgemeinenGit-Basheine ausführbare Datei, die ich direkt von WSL aus aufrufen kann? Wenn ja, wieerzählenWSL, dass ich das folgende "Ding" ausführen möchte? Auf meiner Maschine finde ichGit-Bashals: "C:\Program Files\Git\git-bash.exe". Ich habe versucht, an WSL weiterzuleiten /mnt/c/Program\ Files/Git/git-bash.exe, und es hat freundlicherweise nur ein eigenständiges Git Bash-Fenster geöffnet.

Bildbeschreibung hier eingeben


Einzeiler-Lösung mit zsh + GitBash

Ich verwende es zshals meine Standard-Shell für WSL und hier ist die Funktion, die ich definiert habe, um sie lmk TexFilename.texdirekt von der WSL-Befehlszeile aus aufrufbar zu machen:

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/.

Die folgende Zeile erleichtert das Beenden des versteckten bash/ perl-Prozesses: allowing lmk_killshall exit all running compilers (via latexmk, einem Perl-Skript).

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

Zusammenfassend: Mit der neuen zshFunktion kompiliere ich *.texDateien aus WSL, als würde ich die nativen MikTeX-Compiler unter Windows verwenden. Dies funktioniert gut mit meinen aktuellen Einstellungen von GVIM + Sumatra, bei denen sowohl die Vorwärts- als auch die Rückwärtssuche voll funktionsfähig sind.


Noch einfachere Lösung: Hosten latexmküber PowerShell

Weitere Einzelheiten finden Sie unterdiese Antwortunten.

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

Und kompilieren Sie main.texDateien überall, beispielsweise in einem Bereich einer Tmux-Sitzung auf WSL, mit einem einfachen Befehl lmk main.tex.

Antwort1

Zunächst ein paar Beispiele. Ein einfacher Befehl wäre touch test.txt.

  • Im Windows-Stil:
"C:\Program Files\Git\git-bash.exe" --hide -c "touch test.txt"
  • Im WSL-Stil:
wsl.exe -- "$(wslpath "C:\Program Files\Git\git-bash.exe")" --hide -c "touch test.txt"

Wie funktioniert das also? Die --Option danach wsl.exeübergibt die verbleibende Befehlszeile so wie sie ist. Dann wslpathwird der Pfad im Windows-Stil (umgekehrter Schrägstrich) in den WSL/Unix-Stil (Schrägstrich) konvertiert, d. h. C:\wird /mnt/c(standardmäßig). Der Rest sind die Optionen für git-bash.exe.Hiersind einige davon. Weitere Informationen finden Sie unterWSL-Interoperabilität mit Windows.

Antwort2

Es besteht Git-bashüberhaupt kein Grund, sich daran zu halten. Die wesentliche Anforderung im ursprünglichen Beitrag war, *.texDokumente mit nativem MikTeX auf Windows-Rechnern zu kompilieren. Jede Befehlsshell, die Zugriff auf PATHund damit auf die latexmkausführbare Datei hat, kann die Aufgabe erledigen.

Das Problem mit Git-bash: Das git-bash.exeFenster startet immer in einem eigenen Emulator in einem neuen Fenster, was die Arbeit mit Tmux unmöglich macht. Ich sehe jetzt keine Notwendigkeit mehr, Git-Bash für die Produktion zu verwenden. Leb wohl, alter Freund von mir :). Trotzdem ist es nicht nötig, das Installationsprogramm von gitseinemDownload-Seiteist immer noch das Erste, was ich mache, wenn ich meinen Windows-Rechner anpasse. Es stellt alles bereit, was für Windows git.exebenötigt wird .gvim.exe

Eine praktische Möglichkeit zum Kompilieren *.texvon Dateien mit Native MikTeX ( latexmk)

Unter Windows sind weitere Befehlsshells verfügbar, und alle sind für WSL verfügbar. Beispiel: powershell.exesoll die PowerShell innerhalb desselben Emulators öffnen, der die WSL-Sitzung hostet, wodurch es möglich wird, „einen latexmkKompiliervorgang innerhalb von WSL zu hosten“. Dies öffnet die Möglichkeit, mehrere „Hintergrundcompiler“ über Tmux zu hosten.

Einzeiliger Befehl zum Aufrufen latexmkvon MikTeX unter Verwendung der nativen Windows 10-Installation:

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

Verwendung: Weisen Sie der langen Befehlszeile einen Alias ​​für die in WSL verwendete Shell zu, etwa:

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

Geben Sie dann aus dem Verzeichnis, in dem sich das Dokument main.texbefindet, den Befehl ein, lmk main.texum das LaTeX-Dokument im kontinuierlichen Modus zu kompilieren. Die auf den Befehl folgenden Flags latexmkermöglichen auch die Rückwärts-/Vorwärtssuche.

verwandte Informationen