我正在编写一个C ++程序,它必须自动生成一些数据供学生在综合练习中使用。我已经将这些数据导出到.tex文件,并且还希望C ++程序能够自动编译这些tex文件。
通常我会通过执行以下操作从命令行编译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并安装了以下版本的latex:
pdfTeX 3.1415926-2.4-1.40.13 (TeX Live 2012)
kpathsea version 6.1.0
非常感谢所有帮助!
答案 0 :(得分:1)
首先,程序latex
和dvipdf
的路径必须位于PATH
环境变量中。
其次,通过system
调用shell是完全独立的(实际上每次都会启动一个新的shell实例)。因此,如果您将目录切换为一个,这不会影响其他目录。通过以下方式切换程序的当前目录:
chdir(directory.c_str())
你需要这个
#include <cunistd>
using namespace std;
在文件的开头。
请注意,如果未仔细检查参数(在您的情况下是文件名),则可以轻松利用具有命令行的system
调用,具体取决于输入参数,以运行任意命令。由于您没有引号,如果有例如,程序将失败。文件名中的空格。