当我尝试从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"
在命令行中手动执行命令工作正常!此外,当我在latex文档中不包含tikz时,Java执行正常。这对我来说似乎很奇怪 - 是否有一些错误或者我错过了什么?
我在Windows上使用Miktex 2.9和Java 8,我在不同的Windows版本上尝试过它。
答案 0 :(得分:1)
此问题可能是由于未捕获进程的输出。您需要读取子进程写入标准输出和标准错误的每个字节,否则系统缓冲区将填满,进程将在下次尝试写入时阻塞。
以下是相关问题:Capturing stdout when calling Runtime.exec
有关更多信息,请指向http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html。