Bertrand Benjamin
a911b98520
All checks were successful
continuous-integration/drone/push Build is passing
|
||
---|---|---|
bopytex | ||
documentation | ||
example | ||
test | ||
.drone.yml | ||
.gitignore | ||
.pre-commit-config.yaml | ||
Dockerfile.simple | ||
Dockerfile.usecase | ||
Makefile | ||
MANIFEST.in | ||
poetry.lock | ||
pyproject.toml | ||
README.md | ||
requirements.txt | ||
setup.py | ||
tox.ini |
Bopytex
Bopytex is a command line tool which embed python into latex. It uses jinja2 to do so with a modified environnement to match with latex syntax.
Installing
Bopytex depends on texlive
and textlive-extra-utils
(for latexmk and pdfjoin)
Install and update using pip
pip install -U bopytex
Simple example
% save this as tpl_simple.tex
\documentclass[12pt]{article}
\title{Bopytex example -- {{ number }}}
\begin{document}
\maketitle
%- set a = 10
%- set n = 2
We have two variables
\begin{itemize}
\item a: \Var{a}
\item n: \Var{n}
\end{itemize}
%# We can use blocks
\begin{itemize}
%- for i in n
\item \Var{a}
%- endfor
\end{itemize}
\end{document}
The following command produces the joined_example.pdf document
$ bopytex tpl_simple.tex
How I use it
I build this program to produce individual exams subjects for each of my student with the correction associated. I write a template, and bopytex build subject and correction.
To produce formulas and values, I use an another tool I an developing: mapytex <https://git.opytex.org/lafrite/Mapytex
. I am importing it through bopytex_config.py
.
# bopytex_config.py
from mapytex import Expression
random.seed(0) # Controlling the seed allows to make subject reproductible
direct_access = {
"Expression": Expression,
}
Every variables, objects or function inside this file will be available inside the template.
% tpl_example.tpl
\documentclass[12pt]{article}
\title{Bopytex with Mapytex example -- \Var{ subject.name }}
\begin{document}
\maketitle
%- set e = Expression.random("{a} + {b}")
\Var{e}
\Var{e.simplify()}
\section{Variables}
\subsection{subject}
\begin{itemize}
%- for k,v in subject.items()
\item
\begin{verbatim}
\Var{k}: \Var{v}
\end{verbatim}
%- endfor
\end{itemize}
\subsection{options}
\begin{itemize}
%- for k,v in options.items()
\item
\begin{verbatim}
\Var{k}: \Var{v}
\end{verbatim}
%- endfor
\end{itemize}
\end{document}
Information about my students are stored in a csv file (here students.csv
)
"Name","Age","Email","fraction level","calculus level"
"Spike Tucker","22","s.tucker@randatmail.com","7","3"
"Martin Payne","21","m.payne@randatmail.com","7","3"
"Kimberly Baker","20","k.baker@randatmail.com","1","8"
"Emma Bailey","29","e.bailey@randatmail.com","2","5"
"Nicholas Taylor","28","n.taylor@randatmail.com","3","3"
Then I can produce a subject for each of my student
$ bopytex tpl_simple.tex -s students.csv -c bopytex_config.py
Running examples
I build two examples base of the simple example and how I use it. They are playable through dockerfiles with make commands.
For the simple example
make docker-simple
For how I use it
make docker-usecase