当我尝试从Java编译下面的Latex文档时,我的pdflatex运行崩溃:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows}
\begin{document}
\pagestyle{empty}
%
\tikzstyle{int}=[draw, fill=blue!20, minimum size=2em]
\tikzstyle{init} = [pin edge={to-,thin,black}]
\begin{tikzpicture}[node distance=2.5cm,auto,>=latex']
\node [int, pin={[init]above:$v_0$}] (a) {$\frac{1}{s}$};
\node (b) [left of=a,node distance=2cm, coordinate] {a};
\node [int, pin={[init]above:$p_0$}] (c) [right of=a] {$\frac{1}{s}$};
\node [coordinate] (end) [right of=c, node distance=2cm]{};
\path[->] (b) edge node {$a$} (a);
\path[->] (a) edge node {$v$} (c);
\draw[->] (c) edge node {$p$} (end) ;
\end{tikzpicture}
\end{document}
pdflatex不仅会产生一些错误,而且还会冻结。甚至在未将引号引起来之前,日志文件就会在中间被切断(我认为始终在同一位置)。
我使用以下Java命令执行pdflatex:
Runtime.getRuntime().exec(command);
p.waitFor();
执行的命令是:
"C:\Program Files\MiKTeX 2.9\miktex\bin\x64\pdflatex.exe" -output-directory "C:\Eig\Lehre\Info2\ImagesTemp" "C:\Eig\Lehre\Info2\ImagesTemp\graph.tex"
在命令行中手动执行命令效果很好!另外,当我在乳胶文档中不包含tikz时,Java执行效果很好。这对我来说似乎很奇怪-是否有错误或我缺少什么?
我在Windows上使用Miktex 2.9和Java 8,我已经在不同的Windows版本上尝试过它。
最佳答案
此问题可能是由于未捕获进程的输出引起的。您需要读取子进程写入标准输出和标准错误的每个字节,否则系统缓冲区将填满,并且该进程在下一次尝试写入内容时将阻塞。
这是一个相关的问题:Capturing stdout when calling Runtime.exec
指向http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html以获得更多信息。