jtex
uses nunjucks
, which is a javascript port of Jinja templating language with the modifications
to allow easy reading and syntax highlighting with .
The nunjucks
ecosystem is compatible with jinja
templates, and they are modified with custom rules.
Syntax¶
customized | standard jinja2 | |
---|---|---|
Statements | [# #] | {% %} |
Expressions | [- -] | {{ }} |
Comments | %# #% | {# #} |
Line Comment | %% | ## |
Statements can be if-blocks or for-loops, a minimal freeform example illustrating these would be:
\documentclass{article}
\begin{document}
\section{Famous People}
%% Print a list of famous people defined in the context dictionary
\begin{itemize}
[# for person in famous_people #]
\item [-person.name-], [-person.job-] [# if person.email #]([-person.email-])[# endif #]
[# endfor #]
\end{itemize}
\end{document}
Other environment differences¶
In addition to the custom syntax we also set the following options:
Option | jtex | Default | Description |
---|---|---|---|
trim_blocks | true | false | First newline after a block is removed |
autoescape | false | true | HTML autoescaping feature is disabled |
jinja
provide a whole host of tags, expressions and filters at global scope.
Filters¶
Some of the main filters used in the templates,
are, for example, join
, title
, or trim
.
template.tex
\keywords{[- doc.keywords | join(", ") -]}
output.tex
\keywords{Keyword1, keyword2}
Controlling Whitespace¶
Jinja allows you to strip all leading or trailing whitespace by adding a minus sign (-) to the start or end block or a variable. See nunjucks docs for more information.
The following expression will ensure that a template block, that may be templated over many lines in the template,
will only show up on a single line in the exported LaTeX.
In this case the syntax is [#-
for blocks and [--
for variables.
[#- if parts.acknowledgments -#]
\section*{Acknowledgments}
[- parts.acknowledgments -]
[#- endif -#]
This can also be used for inline variables that will have the final output only exist on a single line in the final export.
Expressions¶
Note that even though the template is being rendered from a javascript environment,
expressions and comparisons
are Python-like. That is, they follow and
over &&
as well as not
over !
.