You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Bertrand Benjamin 3c39a42562 Fix: correct README according to simple example 4 months ago
bopytex Fix: run pre-commit hooks 4 months ago
documentation Fix: run pre-commit hooks 4 months ago
example Feat: produce joined_example.pdf for the two examples 4 months ago
test Fix: run pre-commit hooks 4 months ago
.drone.yml Fix: add latexmk 4 months ago
.gitignore core: remove tests from .gitignore 8 months ago
.pre-commit-config.yaml Core: add pre-commit config 4 months ago
Dockerfile.simple Feat: move Dockerfile to Dockerfile.simple 4 months ago
Dockerfile.usecase Feat: rename dockerfile from mapytex to usecase 4 months ago
MANIFEST.in spelling and wrong arg 8 years ago
Makefile Feat: produce joined_example.pdf for the two examples 4 months ago
README.md Fix: correct README according to simple example 4 months ago
poetry.lock Core: add pytest in dev-dependencies 4 months ago
pyproject.toml Core: add pytest in dev-dependencies 4 months ago
requirements.txt Feat: Create dockerfile to test in new env 7 months ago
setup.py Feat: dockerfile to test bopytex in new environment 7 months ago
tox.ini Core: add tox for testing 4 months ago

README.md

Bopytex

Build Status

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}

\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}

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