PDF-файл, созданный из кода латекса, созданного в неправильном каталоге — Python

В настоящее время я пытаюсь написать программу, которая открывает латексный файл, создает PDF-файл с тем же именем и сохраняет его в той же папке, что и латексный файл.
Моя проблема: файл pdf создается в той же папке, что и файл python программы, которую я запускаю, а не в папке, где находится файл латекса - я не могу понять, почему это происходит. Я пытаюсь достичь своей цели в два этапа.
Сначала я использую функцию, которая принимает каталог и название файла латекса, чтобы можно было сгенерировать PDF-файл с тем же именем:

 def getName(self, somestring):                                                    

    if "/" in somestring:
        indexsofslash = [i for i, ltr in enumerate(somestring) if ltr == "/"]
        indexsofdot = [i for i, ltr in enumerate(somestring) if ltr == "."]
        lastindexslash = max(indexsofslash)
        lastindexdot = max(indexsofdot)
        mainName = somestring[lastindexslash + 1:lastindexdot]
        pdfDirectory = somestring[:lastindexslash + 1]
        someothername = pdfDirectory +  mainName
        newname = someothername
    else:
        newname = somestring 
    return newname

После этого я использую эту функцию для создания файла PDF, используя:

def generate_pdf(self):

    name=self.getName(self.fl)      
    f = open('%s.tex'%name,'w')
    tex = self.txt.get(1.0,"end-1c")
    f.write(tex)
    f.close()
    proc=subprocess.Popen(['pdflatex','%s.tex'%name])
    proc.communicate()
    os.startfile('%s.pdf'%name)
    #os.unlink('%s.tex'%name)
    os.unlink('%s.log'%name)
    os.unlink('%s.aux'%name)

*Примечание: когда печатается имя, отображается каталог латексного файла + название файла, т. е. H:/Public/Test/test.

Что происходит: PDF-файл создается в папке, где находится файл Python программы, которую я запускаю, а не в папке, где находится мой файл латекса - что я делаю неправильно?


person rainbowmiha    schedule 29.07.2015    source источник


Ответы (1)


Проблема в том, что по умолчанию pdflatex записывает выходные файлы в текущий рабочий каталог. Чтобы изменить это поведение, вам нужно указать опцию.

Взгляните на man страницу pdflatex:

$ man pdflatex

и найдите -output-directory, и вы увидите:

-output-directory directory
Записывать выходные файлы в каталог вместо текущего каталога. Сначала найдите входные файлы в каталоге, а затем по обычному пути поиска.

Таким образом, вам нужно будет изменить код Python примерно так:

proc=subprocess.Popen(['pdflatex', '-output-directory', pdfDirectory, '%s.tex' % name])

предполагая, что pdfDirectory является вашей целью.

person bagrat    schedule 29.07.2015
comment
Итак, я попытался написать это: proc=subprocess.Popen(['pdflatex','%s.tex'%name,'-output-directory',pdfDirectory]), но он по-прежнему не меняет каталог. Как правильно использовать команду «-output-directory», потому что, очевидно, я делаю это неправильно. pdfDirectory — это каталог файла латекса. - person rainbowmiha; 29.07.2015
comment
Хорошо, я обновил ответ, вам нужно поставить опцию перед вводом tex. Проверьте обновление. - person bagrat; 29.07.2015
comment
Работает отлично. Ваше здоровье! - person rainbowmiha; 29.07.2015