如何在Heroku上安装LaTeX类?

时间:2017-03-12 01:15:00

标签: django heroku django-templates latex pdflatex

我有一个在Heroku上托管的Django应用程序。在其中,我使用LaTeX编写的视图来动态生成pdf,并安装了Heroku LaTeX buildpack以使其工作。我的LaTeX视图如下。

def pdf(request):
    context = {}
    template = get_template('cv/cv.tex')
    rendered_tpl = template.render(context).encode('utf-8')  
    with tempfile.TemporaryDirectory() as tempdir:
        process = Popen(
            ['pdflatex', '-output-directory', tempdir],
            stdin=PIPE,
            stdout=PIPE,
        )
        out, err = process.communicate(rendered_tpl)
        with open(os.path.join(tempdir, 'texput.pdf'), 'rb') as f:
           pdf = f.read()
    r = HttpResponse(content_type='application/pdf')  
    r.write(pdf)
    return r

当我使用cv.tex中的一个现有文档类(例如\documentclass{article})时,这可以正常工作,但我想使用一个名为res的自定义文档类。通常我认为使用自定义类有两种选择。

  1. 将类文件(本例中为res.cls)放在与.tex文件相同的文件夹中。对我来说,那将是我的应用程序的模板文件夹。我试过这个,但pdflatex找不到类文件。 (大概是因为它没有在模板文件夹中运行,而是在临时目录中运行?是否有办法将类文件复制到临时目录?)

  2. 将类文件放在具有结构localtexmf/tex/latex/res.cls的另一个文件夹中,并使用this question答案中列出的方法使pdflatex了解它。我已尝试使用heroku run bash在Heroku上运行CLI说明,但它无法识别initexmf,并且我不完全确定如何指定相关目录。

  3. 如何判断pdflatex找到哪个类文件?

2 个答案:

答案 0 :(得分:1)

只有2个想法,我不知道它是否会解决你的问题。

首先,尝试将~/texmf文件夹放在initexmf这是Linux系统中的默认本地文件夹中(我对Heroku知之甚少,但它主要是Linux系统,对吧?)。 / p>

其次,我通常使用texhash而不是$ cd /path/to/codeigniter $ composer update ,它可能在您的系统上可用?

答案 1 :(得分:1)

我最终找到another workaround来实现我的目标,但我找到的最直接的解决方案是在运行时更改OBJ = graphics.o chip8.o # calling program "pkg-config" and store result in CFLAGS variable CFLAGS = $(shell pkg-config --cflags glfw3) # calling program "pkg-config" and store result in LDFLAGS variable LDFLAGS = $(shell pkg-config --ldflags glfw3) emulator: $(OBJ) gcc -o emulator $(OBJ) $(LDFLAGS) graphics.o: graphics.c graphics.h gcc $(CFLAGS) -c graphics.c chip8.o: chip8.c chip8.h gcc $(CFLAGS) -c chip8.c clean: rm -f $(OBJ) emulator ,例如......

TEXMFHOME

...如果你有TEXMFHOME=/d pdflatex <filename>.tex

在tex.stackexchange.com上信用转到cfr以获取建议。