103 lines
2.2 KiB
Markdown
103 lines
2.2 KiB
Markdown
# Bopytex
|
|
|
|
[![Build Status](https://drone.opytex.org/api/badges/lafrite/Bopytex/status.svg)](https://drone.opytex.org/lafrite/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
|
|
|
|
Install and update using [pip](https://pip.pypa.io/en/stable/quickstart/)
|
|
|
|
pip install -U bopytex
|
|
|
|
## Simple example
|
|
|
|
``` latex
|
|
% 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}
|
|
|
|
```
|
|
|
|
To create a version a this document type this
|
|
|
|
``` bash
|
|
$ 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`.
|
|
|
|
``` python
|
|
# bopytex_config.py
|
|
from mapytex import Expression
|
|
from random import random
|
|
|
|
direct_access = {
|
|
"Expression": Expression,
|
|
"random": random
|
|
}
|
|
```
|
|
|
|
Every variables, objects or function inside this file will be available inside the template.
|
|
|
|
``` latex
|
|
% 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()}
|
|
|
|
\end{document}
|
|
```
|
|
|
|
Information about my students are stored in a csv file (here `students.csv`)
|
|
|
|
``` 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
|
|
|
|
``` bash
|
|
$ bopytex tpl_simple.tex -s students.csv -c bopytex_config.py
|
|
```
|