有人有使用过 PythonTeX 吗?

有人有使用过 PythonTeX 吗?

我一直在尝试让 PythonTeX 运行,但似乎无法解决我遇到的错误。

我当前的最小破损示例是这样的:

% !TEX TS-program = xelatex
\documentclass{article}

\usepackage{fontspec}
\defaultfontfeatures{Ligatures=TeX}

\usepackage[pyfuture=all]{pythontex}

\begin{document}
Hello world!

\begin{pycode}
print "foo"
\end{pycode}

\end{document}

除非我误解了文档,否则应该输出foo到 LaTeX 文档中的该位置。

几乎所有其他功能都可以运行,例如控制台仿真模式:

\documentclass{article}

\usepackage{fontspec}
\defaultfontfeatures{Ligatures=TeX}

\usepackage[pyfuture=all]{pythontex}

\begin{document}
Hello world!

\begin{pyconsole}
x = 123
y = 345
z = x + y
z
def f(expr):
    return(expr**4)

f(x)
print('Python says hi from the console!')
\end{pyconsole}

\end{document}

那么有人知道为什么 pycode 环境不起作用吗?


编辑:更多信息:

看来我把上面的事情搞混了。

我发现(尽管花费的时间比我想承认的要长)这确实有效:

% !TEX TS-program = xelatex
\documentclass{article}
\usepackage{fontspec}
\defaultfontfeatures{Ligatures=TeX}

\usepackage[]{pythontex}

\begin{document}
\begin{pycode}
print("hello")
\end{pycode}
\end{document}

但无论是否pyfuture=all选择,为什么我不能使用该python 2.7 print "foo"语法?我收到以下错误:

This is PythonTeX 0.14

----  Messages for py:default:default  ----
* PythonTeX stderr - error on line 19:
    File "<outputdir>/py_default_default.py", line 54
      print "hello"
                  ^
  SyntaxError: invalid syntax

最后一个问题,我可以预先将东西导入控制台模拟器吗?类似这样的,但不起作用:

% !TEX TS-program = xelatex
\documentclass{article}

\usepackage{fontspec}
\defaultfontfeatures{Ligatures=TeX}

\usepackage[]{pythontex}


\begin{document}
foo

\begin{pycode}
import math
\end{pycode}
\begin{pyconsole}
math.sqrt(25)
\end{pyconsole}

\end{document}

我是否应该尝试将所有内容切换到python 3

答案1

大多数问题都与 Python 的模块有关__future__,该模块允许将 Python 3 的功能导入 Python 2。__future__可以手动执行导入。但是,默认情况下,PythonTeX 引入了三项功能:

  • print_function
  • absolute_import
  • division

这对应于包选项pyfuture=default。基本上,默认行为是尽可能地像 Python 3 一样运行,而不会发生重大冲突。__future__对于 Python 2.7,唯一可能的其他导入是unicode_literals,但几年前我创建包时,这可能会导致某些包出现问题。现在情况应该会好一些,但我预计偶尔仍可能会发生冲突。

如果要添加unicode_literals,可以使用pyfuture=all。如果不想从自动导入__future__,只需使用包选项pyfuture=none,然后__future__像平常一样从导入。

关于您的控制台问题,pyconcode环境将在控制台会话中执行,但不显示任何输出。与控制台相关的所有内容都以前缀 开头pycon。另请注意,控制台对自动__future__导入的处理由包选项 控制pyconfuture

相关内容