什么可能导致 pdflatex/lualatex 停止编译并冻结?

什么可能导致 pdflatex/lualatex 停止编译并冻结?

我正在尝试使用模拟从 ASP.NET Web 应用程序运行 pdflatex 或 lualatex。标准输出和标准错误流正在被重定向,我正在将其内容保存到日志文件中。

问题是,要么pdflatexlualatex创建零大小chart.log文件后停止,要么无法完成编译。我只能从任务管理器中杀死它们。

这就是最终在标准输出日志中的内容:

This is LuaTeX, Version beta-0.76.0-2013062820 (rev 4627) 
 \write18 enabled.
(D:/Project1/Latex/chart.tex

最后一行显示文件名,就是这样。

但是,当我运行相同的命令行,但不使用模拟,而是向 Process 类提供域、用户名和密码时,它运行良好,生成 PDF。不幸的是,模拟强加于我。

为了查看这是否与我的代码有关,或者与 pdflatex/lualatex 有关,我尝试运行一个简单的命令行程序,该程序仅将一些文本输出到 stdout,并且运行良好。然后我尝试运行 7zip 进行压缩chart.tex,它也生成了chart.7z文件。听起来根本原因在pdflatexlualatex程序中的某个地方,除非我遗漏了什么。

程序的调用方式如下:

    Dim p As Process = New Process()

    Try
        p.StartInfo.FileName = ConfigurationManager.AppSettings("PDFLaTeXPath")
        p.StartInfo.WorkingDirectory = "D:\Project1\Latex"
        p.StartInfo.Arguments = " --shell-escape -interaction=nonstopmode D:\Project1\Latex\chart.tex 1>nul 2>nul") ' Tried with and w/o redirecting
        p.StartInfo.UseShellExecute = False
        p.StartInfo.RedirectStandardOutput = True
        p.StartInfo.RedirectStandardError = True

        ImpersonatingContextWrapper.impersonateValidUser( _
            ConfigurationManager.AppSettings("RunAsUser"), _
            ConfigurationManager.AppSettings("RunAsDomain"), _
            ConfigurationManager.AppSettings("RunAsPassword") _
        )

        p.Start()

        Dim output As String = p.StandardOutput.ReadToEnd()
        If Not String.IsNullOrEmpty(output) Then
            My.Computer.FileSystem.WriteAllText("D:\Project1\Latex\stdout.txt", output, True)
            LogEvent(output, EventLogEntryType.Information)
        End If

        Dim errors As String = p.StandardError.ReadToEnd()
        If Not String.IsNullOrEmpty(errors) Then
            My.Computer.FileSystem.WriteAllText("D:\Project1\Latex\stderr.txt", errors, True)
            LogEvent(errors, EventLogEntryType.Warning)
        End If
        p.WaitForExit()
    Catch ex As Exception
        LogEvent("Error running PDFLaTeX compiler: " & ex.Message, EventLogEntryType.Error)
        Return False
    Finally
        ImpersonatingContextWrapper.undoImpersonation()
    End Try

编辑:

感谢 Sean 的评论,很明显,TEX 文件中的某些内容导致了挂断,因为当我给它一个文件

\documentclass{letter}
\begin{document}
abc
\end{document}

它产生了很好的结果。但是当我运行下面的文件时,它挂了:

\documentclass[border=10pt]{standalone}
\begin{document}
abc
\end{document}

因此standalone,我需要能够生成非常大的文档并打印在多页上的类,这是根本原因之一。进一步的实验发现,加载任何包都会导致挂断。MikTex 是否正在尝试再次下载包并等待确认,即使我在已经下载包的自己的帐户下运行它?

答案1

肖恩的评论有助于发现,MikTex 的 lualatex 正在尝试下载这些软件包,即使这些软件包之前已经安装好了。

进入 MikTex 设置(管理)程序并将“询问”更改为“是”以动态安装软件包,然后再次运行编译,解决了挂断问题并生成了一个文件。

相关内容