调用pdflatex的简单包装

pdflatex的Python项目详细描述


概述

这是一个简单的模块,以一种简单和干净的方式执行pdflatex。 默认情况下,pdflatex命令行实用程序会生成大量输出,并可以创建许多文件。

实例化

pdflatex类可以直接实例化,也可以通过帮助程序来实例化:

  • 来自_texfile(文件名)
  • 来自二进制字符串(binstr,jobname)
  • 来自_jinja2_template(jinja2_template,jobname=none,**render_kwargs)

jobname是可用于创建有效文件名的任何字符串;

示例:

在下面的所有示例中,文件系统中没有文件, 除非使用keep_pdf_filekeep_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个结果:

  1. 二进制字符串中的pdf文件;
  2. pdflatex生成的日志文件为text;
  3. 带有pdflatex执行结果的subprocess.completeprocess的实例。

另外,create_pdf需要几个参数:

  1. keep_pdf_file:可选布尔值。默认为false。如果为真,则保留PDF文件。它的位置和名称取决于-output directory和-jobname参数的值。它还派生自tex文件名或jinja2模板文件名(如果未给定参数);
  2. 保存日志文件:同样的事情,对于日志文件。
  3. 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()

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java组织。springframework。jdbc。CannotGetJdbcConnectionException:无法获取JDBC连接;   java构造函数(int,int,string)未定义;在LWJGL中创建显示   java每当我调用一个函数时,静态函数是否会在类中自动被调用?   java如何为deck类toString方法编写函数   java分析堆使用JUnit JavaFx的内容   JavaJSF2+RichFaces在托管bean中设置变量时遇到问题   java Twitter API无法更新包含圆括号的状态   java Lucene LongField错误   Java正则表达式匹配零次或一次   通过linux中的java代码从windows共享使用数据的文件系统   java Android试图在不使用移动网络的情况下向自己发送虚假短信   Android ListView中的java增长堆   java CheckStyle检查未被忽略   数组java随机选取一个类/对象   java使用Jackson仅使用规范类型字符串反序列化JSON   使用两种编程语言生成的java UUID?   case equals方法中的java hashCode方法支持wildchar