检测并处理通过 Python 中的 os.system 调用生成的 LaTeX 警告/错误

发布于 2024-11-25 19:44:34 字数 624 浏览 1 评论 0原文

我编写了一个 python 脚本来自动将 Sweave/LaTeX 文档转换为 PDF。这是最重要的部分:

os.system("""echo "Sweave('%s.Rnw')" | R --vanilla --quiet"""%topic)

seq = ['p','b','p','b','p','p']
for op in seq: 
    if op is 'p':
        os.system('pdflatex %s'%topic)
    if op is 'b':
        os.system('bibtex %s'%topic)
    if op is 'l':
        os.system('latex %s'%topic)

如果没有错误,这会很好用,但如果有 LaTeX 错误,我会被带到 LaTeX 的 CLI,例如,

[10]
! You can't use `macro parameter character #' in vertical mode.
l.625 #

? 

然后我需要手动打破这个错误。有没有一种方法可以让 Python “知道” os.system 调用在 LaTeX 中生成了错误,然后结束此调用但仍然捕获错误文本?

I wrote a python script to automate turning Sweave/LaTeX documents into PDFs. Here's the most important part:

os.system("""echo "Sweave('%s.Rnw')" | R --vanilla --quiet"""%topic)

seq = ['p','b','p','b','p','p']
for op in seq: 
    if op is 'p':
        os.system('pdflatex %s'%topic)
    if op is 'b':
        os.system('bibtex %s'%topic)
    if op is 'l':
        os.system('latex %s'%topic)

This works great if there are no errors, but if there is a LaTeX error, I am brought to the CLI for LaTeX e.g.,

[10]
! You can't use `macro parameter character #' in vertical mode.
l.625 #

? 

I then need to break out of this manually. Is there a way that I can let Python "know" that the os.system call generated an error in LaTeX and then end this call but still capturing the error text?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

莫多说 2024-12-02 19:44:34
  1. 不要使用os.system,而是使用subprocess模块。
  2. pdflatex 有一个 -interaction 开关,您可以使用它将其设置为非交互模式(您可能需要 batchmodenonstopmode< /code> IIRC,但您可以尝试并查看每个选项的作用)。
  1. Don't use os.system, use subprocess module instead.
  2. pdflatex has an -interaction switch that you can use to put it a non-interactive mode (you probably want batchmode or nonstopmode IIRC, but you can experiment and see what each option do).
山川志 2024-12-02 19:44:34

-interaction=nonstopmode 标志传递给 LaTeX。

Pass the -interaction=nonstopmode flag to LaTeX.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文