Skip to main content

TempLatex

codecov

A jinja2 dialect for latex templating in python.

Quick Start

pip install templatex
from templatex import Environment
from jinja2 import FileSystemLoader

env = Environment(loader=FileSystemLoader('./template_folder'))
template = env.get_template("chapter.latex")
print(template.render(the="variables", go="here"))

Why not the default jinja2?

jinja2's default escape works great for HTML but is not user-friendly for latex because latex heavily uses curly brackets {} .

For example, if you want to produce the following latex code:

x = \frac{b}{c}

Where b and c will be replaced by an actual number, for example: {"b": 42, "c": 3}.

The jinja2 version will be:

from jinja2 import Template

template = """
x = \\frac{{{ b }}}{{"{"}}{{ c }}{{"}"}}
"""
# {{"}"}} will render to }

data = {
    'a': 13,
    'b': 42,
    'c': 3
}

j2_template = Template(template)
print(j2_template.render(data))

You will notice that because both latex and jinja2 heavily rely on {}, the template string will be populated with {}, make it hard to read and modify.

In templatex, we can write the following code:

from templatex import Template

template = """
x = \\frac{@= b =@}{@= c =@}
"""

data = {
    'a': 13,
    'b': 42,
    'c': 3
}

j2_template = Template(template)
print(j2_template.render(data))

What this package changes

Changed Default Jinja2 configuration.

Template changes jinja2's default configuration to the following:

Enviroment(
    loader,
    trim_blocks=True,
    block_start_string='@@',
    block_end_string='@@',
    variable_start_string='@=',
    variable_end_string='=@',
    autoescape=False,
    comment_start_string='\#{',
    comment_end_string='}',
    line_statement_prefix='%%',
    line_comment_prefix='%#',
)

As a result, you only need to adopt the following syntax:

  • variable render: @= var_name =@
  • block logic: @@ for my_item in my_collection @@
  • comment: \#{ your comment }

Add a latex escape filter

Jinja2, by default, will perform auto HTML escaping on rendered variables, but I couldn't figure out how to change its default escape filter implementation. As a result, we disabled this feature and provided a latex escape filter so template authors can manually escape string variables as needed.

For example:

When rendering @= my_var =@, and if my_var="$5.0", the resulting latex code cannot be compiled due to the unescaped $ character. You can use @= my_var | escape_latex =@, where the escape_latex filter will escape $ character to valid latex: \$.

Other features

Since this is still the same jinja2 engine at its core, users should refer to the jinja2 site for documentation on other features.

Inspiration

I adopted the solution from this answer on stackoverflow, and added some modifications.

Metadata

Release files for templatex 0.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for templatex 0.0.2
File Size Uploaded
templatex-0.0.2.tar.gz 4.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for templatex 0.0.2
File Interpreter ABI Platform
templatex-0.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 8.9 kB

Release files / templatex-0.0.2.tar.gz

Download URL templatex-0.0.2.tar.gz
Size 4.8 kB
Tags Source
SHA-256 checksum
How to use checksums
6ee31d1cba503d66bdc58af9bf182901353943fb59717b154d2b4f49a40fd793
BLAKE2b-256 checksum
How to use checksums
b17b18ef04d0ff3ccc695b8f310e4aae1e6bc86d3e61d8569e81f96864313184
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.8.16

Release files / templatex-0.0.2-py3-none-any.whl

Download URL templatex-0.0.2-py3-none-any.whl
Size 4.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0b47c135e4fbe6e24786aa13f3232545e457cc30f72c7fae3463077921694ff2
BLAKE2b-256 checksum
How to use checksums
8db6b89349638abf75f67f393437b9642a032a973a3e220492bcd284b2343f0c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.8.16

Release history Release notifications | RSS feed

This release

0.0.2 This release

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page