Metadata-Version: 2.1
Name: texsurgery
Version: 0.3.2
Summary: Replace some commands and environments within a TeX document by evaluating code inside a jupyter kernel
Home-page: https://framagit.org/pang/texsurgery
Author: Pablo Angulo
Author-email: pablo.angulo@upm.es
License: UNKNOWN
Description: # TexSurgery
        
        Replaces some commands and environments within a TeX document by evaluating code inside a jupyter kernel.
        
        Much like [sagetex](https://github.com/sagemath/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:
        
        ~~~~~~~~~~python
        >>> from texsurgery.texsurgery import TexSurgery
        >>> tex = open('tests/test_find.tex').read()
        >>> 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[_nargs=2]')
        [('questionmultx', [('\\AMCnumericChoices',
          ['\\eval{8+a}', 'digits=2,sign=false,scoreexact=3'])]
        )]
        ~~~~~~~~~~
        
        
        ## Example
        
        Start with this LaTeX code:
        
        ~~~~~~~~~~latex
        % 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:
        ~~~~~~~~~~python
        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:
        
        ~~~~~~~~~~latex
        % 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}
        ~~~~~~~~~~
        
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.6
Description-Content-Type: text/markdown
