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 директория
Запишете изходните файлове в директория вместо в текущата директория. Първо потърсете входните файлове в директорията, по нормалния път за търсене.

Следователно ще трябва да модифицирате своя код на 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