2017-07-13 10 views
0

現在、LaTeXソースコードを含むテキストファイルを自動的に生成するJavaプロジェクトに取り組んでいます。これらのファイルは、既知のディレクトリにあるハードドライブに書き込まれます。直接LaTeXのソースをpdfにコンパイルする代わりに、私はRuntime.getRunTime().exec()を使いたいと思う。ディレクトリを変更してLaTeXソースをコンパイルするためのJavaランタイムコマンド

私は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ファイルを実行するときに3つの引数exec()コマンドを使用して、より問題に実行してしまいました。これを修正するには、pdflatexという余分な引数を使用し、絶対パスのみを使用する次のコマンドを呼び出します。

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

答えて

1

オペレータ&&は、シェルによって拡張されています。 Runtime.execはこの演算子を展開せず、コマンドラインの残りの部分を引数としてcdコマンドを実行しようとします。したがって、pdflatexコマンドは決して実行されません。

pdflatexを特定の作業ディレクトリで実行する場合は、three-argument versionRuntime.execとしてください。

+0

したがって、私は '&& 'やその他の演算子をどのように編集すればよいですか?私はこの種のものに非常に精通して申し訳ありません。 –

+0

@ k.krol.27、[この回答](https://stackoverflow.com/a/4884715/391161)を見てください。 – merlin2011

+0

私は数分前に笑を見つけました。ありがとう、私は今働いている! –

関連する問題