如何在Heroku上安装LaTeX类?

7

我有一个托管在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的另一个文件夹中,并使用此问题的答案中概述的方法使pdflatex知道它。我尝试在Heroku上使用heroku run bash运行CLI指令,但它无法识别initexmf,而且我不太确定如何指定相关目录。

我如何告诉pdflatex在哪里找到类文件?

2个回答

1

只是两个想法,我不知道它是否能解决你的问题。

首先,尝试将localtexmf文件夹放在~/texmf中,这是Linux系统中默认的本地文件夹(我对Heroku不太了解,但它大多数情况下是Linux系统,对吧?)。

其次,我通常使用texhash而不是使用initexmf,你的系统上可能也有这个命令?


1

我最终找到了另一种解决方法来实现我的目标,但我发现最直接的解决方案是在运行时更改TEXMFHOME,例如...

TEXMFHOME=/d pdflatex <filename>.tex

如果您有/d/tex/latex/res/res.cls,则可以使用此方法。

感谢tex.stackexchange.com上的cfr提供的建议。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接