【问题标题】:Compile Latex from Prolog从 Prolog 编译 Latex
【发布时间】:2015-05-07 14:27:26
【问题描述】:

我编写了一个 Prolog 谓词来生成一个 Latex 文件,我正在寻找一种能够在 Prolog 中自动编译这样一个文件的方法,以返回相关的 PDF 文件。我找到了 shell 谓词 (http://www.swi-prolog.org/pldoc/man?predicate=shell/2),但我不知道如何使其正常工作。

如果有任何相关性,我在 Mac 中使用 SWI-Prolog 7.1.33。

提前致谢!

【问题讨论】:

  • 您在 Bash shell(例如 Terminal.app 中)中使用什么命令从 LaTeX 文件编译和生成 PDF?如果您使用与shell/2 谓词的第一个参数相同的命令,会出现什么错误?
  • 我使用“pdflatex file.tex”。当我输入 shell('pdflatex file.tex', E)。它返回 E=127 (我不明白它的意思),它既不生成 pdf 文件也不生成日志文件。
  • 错误 127,假设是 Bash shell,意思是“找不到命令”。对于由shell/2 谓词启动的shell,可能在PATH 上找不到pdflatex 命令。尝试使用完整的绝对路径调用pdflatex 命令。
  • 效果很好,谢谢!

标签: shell prolog latex


【解决方案1】:

执行 shell 命令的传统谓词是system/1,适用于类 Unix 和 MS-Windows 系统。比如

?- system('echo a').

在类 Unix 系统中写入 a

【讨论】:

  • 取决于 Prolog 系统。 B-Prolog 和 ECLiPSe 确实提供了一个 system/1 谓词。 CxProlog 使用os_run/1 谓词。精益 Prolog 使用system/4。 Quintus Prolog 使用unix/1。 Qu-Prolog 使用os/1。但是现在大多数系统都提供shell/1-2 谓词。
  • @PauloMoura 感谢更新:我不确定在 Yap 中也使用的 system/1 是否在 SWI 中可用,这就是我使用 traditional 的原因在我的回答中。
  • 根据我的经验,shell/1-2 是目前最便携的解决方案(使用 POSIX 系统时;Windows 有点棘手,因为您可能会或可能不会在 cmd shell 上运行您的命令) .但不是万能的。此外,正如您所指出的,某些系统还提供了 system/1 谓词,可能是为了与旧代码兼容。
  • 奇怪的是没有 ISO 谓词。
  • ISO 标准甚至没有指定查阅/编译 Prolog 文本的方法。
猜你喜欢
  • 2017-09-28
  • 1970-01-01
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多