使用 pythontex 将 (La)TeX-Length 作为函数参数传递

使用 pythontex 将 (La)TeX-Length 作为函数参数传递

我试图将 LaTeX-Length () 传递给 -package提供的 -environment\textwidth中指定的 python 函数。运行 pythontex 时出现错误消息,对我没有任何帮助:pyblockpythontex

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}

在此处输入图片描述

相关内容