问题:我可以打电话吗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 风格的路径(这同样很耗时)。
一个简单的解决方案是,以某种方式从 WSL 调用 Git-Bash,通过将lmk
命令作为命令行参数传递给 Git-Bash?
除了细节之外,一般来说Git 的 Bash我可以直接从 WSL 调用一些可执行文件吗?如果可以,如何告诉我想运行以下“东西”吗?在我的计算机上,我可以找到Git 的 Bash如:"C:\Program Files\Git\git-bash.exe"
。我尝试将其传递/mnt/c/Program\ Files/Git/git-bash.exe
给 WSL,但它只是打开了一个独立的 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
应退出所有正在运行的编译器(通过latexmk
,perl 脚本)。
alias lmk_kill="powershell.exe kill -n perl"
总结一下:使用新zsh
功能,我可以从 WSL 编译*.tex
文件,就像在 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
。原始帖子中的基本要求是在 Windows 机器上使用原生 MikTeX 编译*.tex
文档。任何有权访问PATH
并可latexmk
执行文件的命令 shell 都可以完成这项工作。
问题在于Git-bash
:git-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
还将启用向后/向前搜索。