macos — Компиляция документа LaTeX из программы на C ++

Я пишу программу на C ++, которая должна автоматически генерировать некоторые данные, которые будут использоваться учащимися в интегрированном упражнении. Я уже экспортировал эти данные в файлы .tex и хотел бы, чтобы программа C ++ могла автоматически компилировать эти текстовые файлы.

Обычно я собираю текстовые файлы из командной строки, выполняя следующие действия:

$ 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

Вся помощь очень ценится!

2

Решение

Во-первых, путь к программам latex а также dvipdf должен быть в вашем PATH переменная окружения.

Во-вторых, вызовы оболочки через system полностью независимы (фактически каждый раз запускается новый экземпляр оболочки). Таким образом, если вы переключаете каталог в одном, это не влияет на другие. Вместо этого переключите текущий каталог вашей программы через:

chdir(directory.c_str())

Тебе нужно для этого

#include <cunistd>
using namespace std;

в начале файла.

Обратите внимание, что system вызовы с командными строками в зависимости от входных параметров могут быть легко использованы для запуска произвольных команд, если параметры (в вашем случае имя файла) не проверены тщательно. Поскольку у вас нет кавычек, программа завершится сбоем, если есть, например, пробелы в имени файла.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]