如何讓 WSL 使用 Git-Bash 執行 `latexmk` 指令?

如何讓 WSL 使用 Git-Bash 執行 `latexmk` 指令?

問題: 可以打電話嗎Git-Bash發出命令世界SL?詳細的上下文位於兩個分隔線之間。 (這個問題末尾附加了簡單的解決方案.)


我使用別名來編譯我的所有*.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 風格的路徑(這又很耗時)。

一個簡單的解決方案是以某種方式從 WSL 呼叫 Git-Bash,從而將lmk命令作為命令列參數傳遞給 Git-Bash?


除了細節之外,總體來說,Git-Bash我可以直接從 WSL 呼叫一些可執行檔嗎?如果是這樣,如何告訴我想運行以下“東西”的 WSL?在我的機器上,我可以找到Git-Bash作為:"C:\Program Files\Git\git-bash.exe"。我嘗試轉到/mnt/c/Program\ Files/Git/git-bash.exeWSL,它只打開了一個獨立的 Git Bash 視窗。

在此輸入影像描述


使用 zsh + GitBash 的單行解決方案

我使用WSL 作為預設 shell,以下是我定義的可從 WSL 命令列直接呼叫的zsh函數:lmk TexFilename.tex

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 編譯文件,就像在 Windows 上使用本機 MikTeX 編譯器一樣。這非常適合我目前的 GVIM + Sumatra 設置,其中向前和向後搜尋都功能齊全。


更簡單的解決方案:latexmk透過 PowerShell託管

詳情請參閱這個答案以下。

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

並且,main.tex使用簡單的命令在任何地方編譯文件,例如在 WSL 上的 Tmux 會話窗格中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"

那麼,這是如何運作的呢?--之後的選項按wsl.exe原樣傳遞剩餘的命令行。然後wslpath將Windows風格(反斜線)路徑轉換為WSL/Unix風格(正斜線),即C:\變成/mnt/c(預設)。其餘的都是選項git-bash.exe這裡是其中一些。如需進一步閱讀,請參閱WSL 與 Windows 的互通性

答案2

Git-bash根本沒有必要執著。原始貼文中的基本要求是*.tex在 Windows 電腦上使用本機 MikTeX編譯文件。任何有權PATH存取可執行檔的命令 shelllatexmk都可以完成工作。

問題是Git-bashgit-bash.exe視窗總是在新視窗中的自己的模擬器中啟動,從而無法與 Tmux 一起使用。我現在認為沒有必要使用 Git-Bash 進行生產。再見了,我的一個老朋友:)。儘管如此,git從其運行安裝程序下載頁面仍然是我自訂 Windows 機器時要做的第一件事。它提供了Windows 上git.exe所需的功能。gvim.exe

*.tex使用 Native MikTeX編譯檔案的實用方法( latexmk

Windows 上還有其他可用的命令 shell,並且所有命令均可用於 WSL。例如:powershell.exe應在託管 WSL 會話的相同模擬器中開啟 PowerShell,從而可以「latexmk在 WSL 中託管編譯過程」。這打開了透過 Tmux 託管多個「後台編譯器」的大門。

latexmk使用本機 Windows 10 安裝從 MikTeX呼叫的一行命令:

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

用法:將長行命令指派給 WSL 中使用的 shell 的別名,例如:

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

然後,從本機目錄中main.tex發出命令lmk main.tex以連續模式編譯 LaTeX 文件。命令後面的標誌集latexmk也將啟用向後/向前搜尋。

相關內容