用于更改目录的Java运行时命令&编译LaTeX源不起作用

时间:2017-07-13 17:36:54

标签: java terminal pdflatex

我目前正在开发一个java项目,该项目使用LaTeX源代码自动生成文本文件。这些文件将写入知道目录中的硬盘驱动器。我不想自己手动将LaTeX源代码编译成pdf,而是想使用Runtime.getRunTime().exec()

我下载并安装了BasicTeX。我知道它运作正常。我可以在新的终端窗口中调用以下内容,正确生成pdf而没有错误。像这样:

Kyles-MacBook-Pro:~ kylekrol$ cd Documents/folder/Report
Kyles-MacBook-Pro:Report kylekrol$ pdflatex latexDocument.txt

所以我只是在程序关闭之前尝试使用以下代码来编译pdf:

private static void compileLatexMac(String path) {
    String s = null;
    try {
        System.out.println("cd " + path.substring(0, path.length() - 1) + " && pdflatex latexDocument.txt");

        Process p = Runtime.getRuntime().exec("cd " + path.substring(0, path.length() - 1) + " && pdflatex latexDocument.txt");
        BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
        BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));

        System.out.println("outputs:");
        while ((s = stdInput.readLine()) != null) {
            System.out.println(s);
        }

        System.out.println("errors:");
        while ((s = stdError.readLine()) != null) {
            System.out.println(s);
        }
    } catch (Exception e) {
        e.printStackTrace();
        System.exit(-1);
    }
}

当我运行这个时,我得到的是以下内容,没有pdf或日志文件。

cd /Users/kylekrol/Documents/folder/Report && pdflatex latexDocument.txt
outputs:
errors:

我不确定该怎么做或者为什么它不起作用 - 特别是因为我可以从终端呼叫cd /Users/kylekrol/Documents/folder/Report && pdflatex latexDocument.txt并且它按照需要运行。

如果有人能指出我在这里缺少的东西那就太好了。谢谢!

当通过双击运行jar文件时,我最终使用三个参数exec()命令遇到了更多问题。我通过调用以下命令来修复此问题,该命令使用额外的pdflatex参数并且只使用绝对路径。

Runtime.getRuntime().exec("pdflatex -output-directory=" + path.substring(0, path.length() - 1) + " " + path + "latexDocument.txt");

1 个答案:

答案 0 :(得分:1)

操作符&&由shell扩展。 Runtime.exec不会扩展此运算符,只是尝试以命令行的其余部分作为参数执行cd命令。因此,您的pdflatex命令永远不会运行。

如果您想使用特定的工作目录运行pdflatex,请使用Runtime.exec的{​​{3}}。