调用pdflatex的简单包装
pdflatex的Python项目详细描述
概述
这是一个简单的模块,以一种简单和干净的方式执行pdflatex。 默认情况下,pdflatex命令行实用程序会生成大量输出,并可以创建许多文件。
实例化
pdflatex类可以直接实例化,也可以通过帮助程序来实例化:
- 来自_texfile(文件名)
- 来自二进制字符串(binstr,jobname)
- 来自_jinja2_template(jinja2_template,jobname=none,**render_kwargs)
jobname是可用于创建有效文件名的任何字符串;
示例:
在下面的所有示例中,文件系统中没有文件, 除非使用keep_pdf_file和keep_log_file参数请求 到create_pdf方法。
从.tex文件创建pdf
from pdflatex import PDFLaTeX
pdfl = PDFLaTeX.from_texfile('my_file.tex')
pdf, log, completed_process = pdfl.create_pdf(keep_pdf_file=True, keep_log_file=True)
函数create_pdf返回3个结果:
- 二进制字符串中的pdf文件;
- pdflatex生成的日志文件为text;
- 带有pdflatex执行结果的subprocess.completeprocess的实例。
另外,create_pdf需要几个参数:
- keep_pdf_file:可选布尔值。默认为false。如果为真,则保留PDF文件。它的位置和名称取决于-output directory和-jobname参数的值。它还派生自tex文件名或jinja2模板文件名(如果未给定参数);
- 保存日志文件:同样的事情,对于日志文件。
- env:执行pdflatex的默认env映射。你可能想跳过这个。
从jinja2模板创建pdf
import os
import pdflatex
import jinja2
env = pdflatex.JINJA2_ENV
env['loader'] = jinja2.FileSystemLoader(os.path.abspath('.'))
env = jinja2.Environment(**env)
template = env.get_template('jinja.tex')
pdfl = pdflatex.PDFLaTeX.from_jinja2_template(template, data='Hello world!')
pdf, log, cp = pdfl.create_pdf()
不言而喻,只要注意pdflatex包含一个字典 Jinja2_env提供了一个环境参数建议,供您使用 Jinja2和乳胶。IT OS定义为:
JINJA2_ENV = {'block_start_string': '\BLOCK{',
'block_end_string': '}',
'variable_start_string': '\VAR{',
'variable_end_string': '}',
'comment_start_string': '\#{',
'comment_end_string': '}',
'line_statement_prefix': '%%',
'line_comment_prefix': '%#',
'trim_blocks': True,
'autoescape': False }
从二进制字符串创建pdf文件:
import pdflatex
with open('my_file.tex', 'rb') as f:
pdfl = pdflatex.PDFLaTeX.from_binarystring(f.read(), 'my_file')
pdf, log, cp = pdfl.create_pdf()