2013-08-23 99 views
2

我正在編寫一個C++程序,它必須自動生成一些數據供學生在綜合練習中使用。我已經將這些數據導出到.tex文件,並且還希望C++程序能夠自動編譯這些tex文件。從C++程序編譯LaTeX文件

通常我會做編譯命令行TEX文件如下:

$ latex file.tex 
$ latex file.tex 
$ dvipdf file.dvi 

於是,我在做我的C以下++代碼(目錄和文件名都是字符串):

//Move to the location where I created the files 
string mycommand = "cd "; 
mycommand += directory; 
system(mycommand.c_str()); 
//Compile latex 
mycommand = "latex " + filename + "_main.tex"; 
system(mycommand.c_str()); 
system(mycommand.c_str()); 
//Create .pdf 
mycommand = "dvipdf " + filename + "_main.dvi"; 
system(mycommand.c_str()); 

然後產生的終端輸出的以下錯誤消息:

sh: latex: command not found 
sh: latex: command not found 
sh: dvipdf: command not found 

我已經在網上搜索,但我沒有找到解決這個問題的方法,但我相信它很可能是非常簡單的。

我工作的OSX和安裝乳膠以下版本:

pdfTeX 3.1415926-2.4-1.40.13 (TeX Live 2012) 
kpathsea version 6.1.0 

所有幫助是非常感謝!

+3

夥計,'人2 chdir' ... –

+0

你是什麼意思?我很抱歉,但對於像這樣的事情我很缺乏經驗...... –

回答

1

首先,程序latexdvipdf的路徑需要在您的PATH環境變量中。

其次,通過system調用shell的調用是完全獨立的(實際上每次都啓動一個新的shell實例)。所以如果你在一個目錄切換,這不會影響其他目錄。開關,而不是你的程序的當前目錄通過:

chdir(directory.c_str()) 

您在文件的開頭需要爲這個

#include <cunistd> 
using namespace std; 

請注意,system調用命令行取決於輸入參數可以很容易地利用運行任意命令如果參數(你的情況下文件名)沒有仔細檢查。由於您沒有引號,因此如果有例如,程序就會失敗。文件名中的空格。

+0

感謝您的幫助。我不知道自己做錯了什麼,但是你讓我走上正軌! 爲了改變目錄,我不得不包括,但這很容易找到。 安全問題現在不會成爲問題,因爲我將是唯一有權訪問該程序的人,但很好知道 - 我將爲未來的軟件記住它。 對於像我這樣的傻瓜來說,更改PATH變量是這樣完成的: PATH = $ PATH:/ usr/texbin 其中usr/texbin是可執行文件的位置。 –