![使用 pythontex 将 (La)TeX-Length 作为函数参数传递](https://linux22.com/image/283186/%E4%BD%BF%E7%94%A8%20pythontex%20%E5%B0%86%20(La)TeX-Length%20%E4%BD%9C%E4%B8%BA%E5%87%BD%E6%95%B0%E5%8F%82%E6%95%B0%E4%BC%A0%E9%80%92.png)
我试图将 LaTeX-Length () 传递给 -package提供的 -environment\textwidth
中指定的 python 函数。运行 pythontex 时出现错误消息,对我没有任何帮助:pyblock
pythontex
This is PythonTeX v0.12
---- Messages for py:default:default ----
* PythonTeX stderr - error on line 10:
File "<outputdir>/py_default_default.py", line 65
print(pytex.formatter(printtexlength(\textwidth )))
^
SyntaxError: unexpected character after line continuation character
--------------------------------------------------
PythonTeX: minimal - 1 error(s), 0 warning(s)
有谁知道这里出了什么问题,或者我如何将 LaTeX-Length 传递给 python 函数?
这是一个最小的例子:
\documentclass{scrreprt}
\usepackage{pythontex}
\begin{document}
\begin{pycode}
def printtexlength(length):
print('Length ist %f' % length)
\end{pycode}
\newcommand{\printlength}[1]{\py{printtexlength(#1)}}
%\py{printtexlength(\textwidth)} % This although fails with same error message
\printlength{\textwidth}
\end{document}
答案1
\py
不接受这个,而只接受一个明确的数字。这是一个可能有效的版本,其中维度在传递给之前扩展为数字\py
:
\documentclass{scrreprt}
\usepackage{pythontex}
\makeatletter
\newcommand{\printlength}[1]{%
\begingroup\edef\x{\endgroup
\noexpand\py{printtexlength(\strip@pt\dimexpr#1\relax)}}\x}
\makeatother
\begin{document}
\begin{pycode}
def printtexlength(length):
print('Length is %f' % length)
\end{pycode}
\printlength{\textwidth}
\printlength{1in}
\end{document}
我对 Python 了解不够多,无法理解为什么None
会出现这种情况。
感谢 G. Poore,这是该函数的正确版本:
\begin{pycode}
def printtexlength(length):
return 'Length is %f' % length
\end{pycode}