Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I've recently learned about PythonTeX (Conference presentation). It's a tool that lets you execute python code in your LaTeX documents. This is useful for, e.g., creating matplotlib figures inside your TeX document.

According to the manual (available at the Github link above), to compile documents, one needs to run latex, run an included python script, then run latex again. Can I set up LyX to execute this all for me?

share|improve this question
    
I had the same issue in the past and i think at that time it was impossible to integrate these tools. Hopefully this has changed and someone will point it out. –  juliohm May 14 '13 at 21:59
1  
This might help a bit: LyX has a module called "Rnw (knitr)" that allows to input code for "R" into LyX / LaTeX via the package knitr. Maybe one can re-use that... –  e-birk May 14 '13 at 23:19
1  
The three-step compile process is very similar to that of SageTeX, so you might use the LyX SageTeX module as a starting point. I imagine it might require only a few modifications. –  G. Poore May 15 '13 at 0:09
    
Thanks for the tip, G. I figured this out by combing through the SageTeX preferences script. –  BenB May 16 '13 at 23:58

2 Answers 2

up vote 2 down vote accepted

Thanks for the pointer, Scott. The process does involve (extensive) use of the converters.

EDIT: Quick and dirty solution follows after step 11.

This assumes you already have PythonTeX installed.

The converter utilities are used to convert one file format to another. Since LyX already has a way to convert from LyX --> Tex --> PDF, we need to convince it that it's doing something else. So we create some extra file types.

Step 1) In LyX, select Tools, then Preferences. Select File Handling. Select File Formats.

Step 2) Select "New". Fill in the fields as follows:

Format: PythonTeXStep1
Shortname: pytexs1
extension: pytexs1extension

Leave everything else alone. Click "save".

Now we create a couple more file types (using the same "File Formats" menu):

Step 3) Select "New". Fill in the fields as follows:

Format: PythonTeXStep2
Shortname: pytexs2
extension: tex

Leave everything else alone. Click "save".

Step 4) Select "New". Fill in the fields as follows:

Format: PythonTeXPDF
Shortname: PyTeXPDF
extension: pdf

Leave everything else alone. Click "save".

Now we need to tell LyX how we want conversions to and from these file types to work:

Step 5) (Under Tools--> Preferences --> File Handling) select "Converters".

Step 6) Change the fields as follows:

From format:  LaTeX(LuaTeX)
To format: PythonTeXStep1
Converter: pdflatex $$i

step 7) Click "Add"

Step 8) Change the fields as follows:

From format: PythonTeXStep1
To format: PythonTeXStep2
Converter: pythontex.py $$i

Step 9) Click "Add"

Step 10) Change the fields as follows:

From format: PythonTeXStep2
To format: PythonTeXPDF
Converter: pdflatex $$i

Step 11) Click "Add".

Now you're ready. Create your file, invoke the pythonTeX commands all you want. When you're ready to export from LyX, go File --> Export --> More Formats & Options, choose "PythonTeXPDF" then "OK".

To test if this is working, a barebones PythonTeX script can be made by, in a new document, hitting Control + L to open up an "ERT" box. In the ERT box, paste:

\begin{pycode}
print('llamas!')
\end{pycode}

Good point again, Scott. Steps 1-11 can be replaced by these steps:

Edit your lyx preference file (By default should be ~/.lyx/preferences) as follows:

In the format section, paste:

\format "PyTeXPDF" "pdf" "PythonTeXPDF" "" "" "" ""
\format "pytexs1" "pytexs1extension" "PythonTeXStep1" "" "" "" ""
\format "PyTeXs2" "tex" "pythonTeXs2" "" "" "" ""

and in the converter section, paste:

\converter "luatex" "pytexs1" "pdflatex $$i" ""
\converter "pytexs1" "PyTeXs2" "pythontex.py $$i" ""
\converter "PyTeXs2" "PyTeXPDF" "pdflatex $$i" ""
share|improve this answer
    
Nice detailed solution, Ben. Note that your new converters are stored in your user preferences file. On Ubuntu, it's ~/.lyx/preferences. This way you don't have to manually add them each time you reinstall LyX or change computers. Also note that e-birk's idea (in the comment to your question) of using knitr is a good one. knitr does support Python as a backend, I believe. –  scottkosty May 17 '13 at 0:18

Just change the converter or add a new one. Go to Tools > Preferences > File Handling > Converters. Select the converter you want to change, for example LaTeX (pdflatex) -> PDF (pdflatex). Then just edit the field converter.

For more information, see Help > Customization > 3.3 Converters.

See the following screenshot: enter image description here

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.