5

I found a simple example here answered by G. Poore but I cannot get it work. The output to the pdf is

?? PythonTeX ??
?? PythonTeX ??

What am I missing something? Below you will find the .tex, .py, .pytxcode, and my .latexmkrc files.

The test.tex file is:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[makestderr]{pythontex}

\newenvironment{pyconcodeblock}%
{\VerbatimEnvironment
  \begin{VerbatimOut}{test.py}}%
  {\end{VerbatimOut}%
  \pyconc{exec(compile(open('test.py', 'rb').read(), 'test.py', 'exec'))}%
  \inputpygments{python}{test.py}}

\begin{document}

\begin{pyconcodeblock}
import os
import sys
sys.path.append(os.getcwd())

def foo(x):
  return 2*x
\end{pyconcodeblock}

\begin{pyconsole}
x = 10
foo(x)
\end{pyconsole}

\end{document}

%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% End:

From Harvey Mudd, I found the following entry for Latexmk which I added:

$pdflatex='pdflatex --shell-escape -interaction=nonstopmode %O %S 
-file-line-error -synctex=1';

# This shows how to use the pythontex package with latexmk

#  This version has a fudge on the latex and pdflatex commands that
#  allows the pythontex custom dependency to work even when $out_dir
#  is used to set the output directory.  Without the fudge (done by
#  trickery symbolic links) the custom dependency for using pythontex
#  will not be detected.

add_cus_dep('pytxcode', 'tex', 0, 'pythontex');
sub pythontex {
# This subroutine is a fudge, because it from latexmk's point of
# view, it makes the main .tex file depend on the .pytxcode file.
# But it doesn't actually make the .tex file, but is used for its
# side effects in creating other files.  The dependence is a way
# of triggering the rule to be run whenever the .pytxcode file
# changes, and to do this before running latex/pdflatex again.
return system("pythontex.py \"$_[0]\"") ;
}


$pdflatex = 'internal mylatex %R %Z pdflatex %O %S';
$latex = 'internal mylatex %R %Z latex %O %S';
sub mylatex {
my $root = shift;
my $dir_string = shift;
my $code = "$root.pytxcode";
my $result = "pythontex-files-$root";
if ($dir_string) {
warn "mylatex: Making symlinks to fool cus_dep creation\n";
unlink $code;
if (-l $result) {
unlink $result;
}
elsif (-d $result) {
unlink glob "$result/*";
rmdir $result;
}
symlink $dir_string.$code, $code;
if ( ! -e $dir_string.$result ) { mkdir $dir_string.$result; }
symlink $dir_string.$result, $result;
}
else {
foreach ($code, $result) { if (-l) { unlink; } }
}
return system @_;
}

The test.py file contains:

import os
import sys
sys.path.append(os.getcwd())

def foo(x):                                                                     
  return 2*x  

which I also tried without import os, import sys, and sys.path.append(os.getcwd()). Then the test.pytxcode contains:

=>PYTHONTEX#pycon#default#default#0#c#####22#
exec(compile(open('test.py', 'rb').read(), 'test.py', 'exec'))
=>PYTHONTEX#PYGpython#EXT:test.py#defaultverb#0#verbatim#####22#
=>PYTHONTEX#pycon#default#default#1#console#####24#
x = 10
foo(x)
=>PYTHONTEX:SETTINGS#
version=0.14
outputdir=pythontex-files-test
workingdir=.
workingdirset=false
gobble=none
rerun=default
hashdependencies=default
makestderr=true
stderrfilename=full
keeptemps=none
pyfuture=default
pyconfuture=none
pygments=true
pygglobal=:GLOBAL||
fvextfile=-1
pyconbanner=none
pyconfilename=stdin
depythontex=false
pygfamily=py|python|
pygfamily=pycon|pycon|
pygfamily=sympy|python|
pygfamily=sympycon|pycon|
pygfamily=pylab|python|
pygfamily=pylabcon|pycon|
pygfamily=PYGpython|python|
4

If PythonTeX gives ?? PythonTeX ?? or ??, that's an indication that it hasn't run, so no content has been generated.

Your .latexmkrc didn't work for me under Windows. I had to change the line return system("pythontex.py \"$_[0]\"") ; to return system("pythontex \"$_[0]\"") ; given my system configuration. After that, it worked.

If you are on Windows, that may fix it. Otherwise, you will need to read the latexmk output, and see why PythonTeX failed to run. Either way, something isn't quite right in the .latexmkrc.

1
  • That changed worked for me as well.
    – dustin
    May 3 '15 at 4:38

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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