Skip to main content

Replace some commands and environments within a TeX document by evaluating code inside a jupyter kernel

Project description

TexSurgery

Replaces some commands and environments within a TeX document by evaluating code inside a jupyter kernel.

Much like sagetex, but with the following differences:

  1. sagetex collects all the code using LaTeX and only then runs sage to get the LaTeX output, which definitely works, but this conflicts with some interesting LaTeX packages and is slower than a direct conversion.
  2. TexSurgery works in any language with a jupyter kernel

Installation

python3 -m pip install texsurgery

Testing

The following command will perform some common tests, and specific tests for some of the kernels that are installed:

python3 -m unittest tests

Selectors

New in version 0.1, texsurgery can also gather information using a limited choice of css-style selectors:

>>> from texsurgery.texsurgery import TexSurgery
>>> tex = open('tests/test_find.tex')
>>> TexSurgery(tex).findall('question,questionmultx runsilent')
[('questionmultx', [('runsilent', 'a = randint(1,10)\n')]),
 ('question',
   [('runsilent', 'a = randint(2,10)\nf = sin(a*x)\nfd = f.derivative(x)\n')])]
>>> TexSurgery(tex).findall('question,questionmultx choices \correctchoice')
[('question', [('choices', [('\correctchoice', '$\sage{fd}$')])])]
>>> TexSurgery(tex).findall('questionmultx \AMCnumericChoices[2]')
[('questionmultx', [('\\AMCnumericChoices',
  ['\\eval{8+a}', 'digits=2,sign=false,scoreexact=3'])]
)]

Example

Start with this LaTeX code:

% Any jupyter kernel is available
\usepackage[sagemath]{texsurgery}

% Compatible with any other LaTeX package
\usepackage[bloc,completemulti]{automultiplechoice}

% Example of user macros
\providecommand{\abs}[1]{\lvert#1\rvert}
\newcommand{\R}{\mathbb{R}}

% TexSurgery can replace some \commands before pdflatex runs
\begin{minipage}{.85\linewidth}
Student: {\bf \name \;  \surname},  \quad ID:  {\bf \id}
\end{minipage}

\begin{question}{derivative-sin}
\qvariant{1} \qtags{derivative}
% TexSurgery will run code in a jupyter kernel
\begin{runsilent}
set_random_seed(\seed)
a = randint(2,10)
f = sin(a*x)
fd = f.derivative(x)
\end{runsilent}
% TexSurgery will eval code in a jupyter kernel
% and replace \eval{expr} with the output from the kernel
% \sage{expr} is just an alias for \eval{latex(expr)}
What is the first derivative of $\sage{f}$?
\begin{choices}
  \correctchoice{$\sage{fd}$}
  \wrongchoice{$\sage{fd*a}$}
  \wrongchoice{$\sage{fd + a}$}
\end{choices}
\begin{explain}
\begin{run}
# TexSurgery will run code in the jupyter kernel
# and replace this environment with the full output
\end{run}
\end{explain}
\end{question}

and run this python code:

from texsurgery.texsurgery import TexSurgery
student_vars = dict(name='Fulano', surname='de Tal', seed='1', id='314159')
ts = TexSurgery(tex_source).data_surgery(student_vars).code_surgery()

in order to transform it into this:

% Compatible with any other LaTeX package
\usepackage[bloc,completemulti]{automultiplechoice}

% Example of user macros
\providecommand{\abs}[1]{\lvert#1\rvert}
\newcommand{\R}{\mathbb{R}}

\begin{minipage}{.85\linewidth}
Student: {\bf Fulano \;  de Tal},  \quad ID:  {\bf 314159}
\end{minipage}

\begin{question}{derivative-sin}
\qvariant{1} \qtags{derivative}
What is the first derivative of $\sin\left(7 \, x\right)$?
\begin{choices}
  \correctchoice{$7 \, \cos\left(7 \, x\right)$}
  \wrongchoice{$49 \, \cos\left(7 \, x\right)$}
  \wrongchoice{$7 \, \cos\left(7 \, x\right) + 7$}
\end{choices}
\begin{explain}
\begin{run}
# TexSurgery will run code in the jupyter kernel
# and replace this environment with the full output
\end{run}
\end{explain}
\end{question}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

texsurgery-0.2.0.tar.gz (12.7 kB view details)

Uploaded Source

Built Distribution

texsurgery-0.2.0-py3-none-any.whl (16.4 kB view details)

Uploaded Python 3

File details

Details for the file texsurgery-0.2.0.tar.gz.

File metadata

  • Download URL: texsurgery-0.2.0.tar.gz
  • Upload date:
  • Size: 12.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.22.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.8.5

File hashes

Hashes for texsurgery-0.2.0.tar.gz
Algorithm Hash digest
SHA256 0e9ec816e0ecd1d8dcfcfad5bd262a97057e60bea0eb0e251600b9f7d77e6764
MD5 cf04196780c2bcf2cbe5d7a2271cdfe4
BLAKE2b-256 de3f5aec22df0d1c7c7572ebb235504c72e1fcf593f6893c1d3763bdfcdca257

See more details on using hashes here.

File details

Details for the file texsurgery-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: texsurgery-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 16.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.22.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.8.5

File hashes

Hashes for texsurgery-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fd1f1c8f5a9305174fb414dc350f713db7279cc8e300c47243af6943f833c8e0
MD5 a2e245f4623f07d57e23f8e26b9bece9
BLAKE2b-256 12850690d70d697e61ec4b587aecda30113828cf2f5c8ad3ed67d8bd647b8eaf

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page