我有我的 TeX 文件(仅firstExample.tex
在我的文件夹内)文档,我想将其转换为 PDF 并在应用程序中显示它。
\documentclass[11pt]{article}
\begin{document}
this is only a test
$$(x+1)$$
\end{document}
我这样做:
string filename = @"C:\inetpub\wwwroot\MyApp\Application\Temp\firstExample.tex";
Process p1 = new Process();
p1.StartInfo.FileName = @"C:\Program Files\MiKTeX 2.9\miktex\bin\x64\pdflatex.exe";
p1.StartInfo.Arguments = filename;
p1.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
p1.StartInfo.RedirectStandardOutput = true;
p1.StartInfo.UseShellExecute = false;
p1.Start();
var output = p1.StandardOutput.ReadToEnd();
p1.WaitForExit();
但输出返回:
"This is pdfTeX, Version 3.1415926-2.4-1.40.13 (MiKTeX 2.9 64-bit)
entering extended mode !
I can't write on file `firstExample.log'
Please type another transcript file name: "
而不是预期的 PDF
答案1
该答案已经过测试并且按预期工作。
步骤 1:创建批处理文件
为了避免重新编译 C# 源代码以与要使用的 (La)TeX 编译器同步,创建批处理文件会很方便。批处理文件在后台执行 (La)TeX 编译器。将批处理文件保存在任何位置,并将 PATH 系统变量设置为批处理位置。但为了简单起见,您可以将其保存在 LaTeX 输入文件所在的目录中。
最简单的批次可能如下
rem batch.bat
rem %1 represents the file name with no extension.
pdflatex -shell-escape %1
步骤 2:创建 C# 代码并编译
最简单的例子如下:
using System.Diagnostics;
class MyApp
{
public static void Main(string[] args)
{
Process p1 = new Process();
p1.StartInfo.FileName = "batch.bat";
p1.StartInfo.Arguments = args[0];
p1.StartInfo.UseShellExecute = false;
p1.Start();
p1.WaitForExit();
}
}
使用 C# 编译器编译它以获取MyApp.exe
示例。将其保存在特定目录中并设置PATH
系统变量以指向它。但为了简单起见,您可以将其保存在 LaTeX 输入文件所在的目录中。
步骤 3:创建测试 LaTeX 输入文件
在具有读写权限的目录中创建并保存以下 LaTeX 输入文件。
% test.tex
\documentclass[preview,border=12pt,12pt]{standalone}
\begin{document}
Hello World
\end{document}
第四步:尝试一下
MyApp.exe
需要一个参数,即没有扩展名的 TeX 输入文件名。
从命令提示符下,执行MyApp.exe test
。
第五步:投票支持这个答案!
答案2
这将是对 OP 评论的回复,但需要格式化(可能还有长度)。
创建一个包含以下内容的文件,并将其命名为hw.tex
\documentclass{article}
\begin{document}
Hello World
\end{document}
在命令行中,在保存该文件的文件夹中,键入pdflatex hw
。这样可以吗?
然后移动hw.tex
到c:\
,然后跑pdflatex c:/hw
。这真的是一个斜杠即使在 Windows 上也是如此。事实上,这可能是你的错误。