我一直在尝试让 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
。