我可以让 write18 将命令行发送到 Cygwin bash 而不是 Windows 命令解释器吗?

我可以让 write18 将命令行发送到 Cygwin bash 而不是 Windows 命令解释器吗?

我使用的是 Windows 7、Cygwin (CYGWIN_NT-6.6-WOW64) 和 MiKTeX 2.9。我正在尝试编译我一个朋友的文档,他编写了一个特定的文档类文件 (.cls),该类能够从文档 LaTeX 源 (.tex) 运行 Python 代码并将其输出包含在文档中(可能与 Python 代码一起)。我想(在某种意义上,我需要)使用该类编写自己的文档。

我的朋友使用 Linux 工作,我尝试使用从 Cygwin 终端编译他的文档pdflatex --enable-write18 thedocumentfile.tex(实际上,我的命令行是)。如果我在 Cygwin 设置中PATH=.:$PATH pdflatex --enable-write18 thedocumentfile.tex搜索软件包,我只会找到未安装的软件包,所以我猜是在名为的 MiKTeX 2.9 软件包中调用 latex-to-PDF 编译器版本。我想这就是我想要的,只需在我的计算机上安装一个 LaTeX 发行版(MiKTeX)。latextexlive-collectionpdflatexmiktex-pdftex-base-2.9

但是编译失败,因为作为参数传递的命令行\write18被编写为由 进行解释bash,但我的编译尝试将它们发送到 Windows 命令解释器。

我不知道是否可以指示我的编译器不要将命令行传递给 Windows 解释器,而是传递给bashCygwin 的 shell。我希望可以。有人知道怎么做吗?

答案1

用道德禁令来回避这个问题:将复杂的 shell 脚本嵌入到 Tex 文档中从根本上来说不可移植。更好的方法是使用\write18系统调用来调用程序(如果需要,还可以带参数),这将被 bash 或 Windows 命令 shell 调用解释为相同的内容。

您也许可以鼓励您的朋友将他的类文件重构为几个 shell 脚本加上通过普通系统调用调用这些脚本的类文件。

什么是系统调用

它们是 shell 脚本的“原子”,在 Unix/C 中,使用system()C 函数调用,该函数包含在大多数脚本语言(如 Python)中。它可能有开关或参数,但不包含控制结构、管道或 IO 重定向运算符之类的东西。

相关内容