\newcommand com PythonTeX PyCode

\newcommand com PythonTeX PyCode

Os ambientes são MiKTeX 2.9, XeLaTeX, PythonTeX 0.11 beta e Python 3.3. Sou muito novo em LaTeX e Python/PythonTeX e estou lutando com o seguinte trecho de código.

%!TEX TS-program = xelatex
%!TEX encoding = UTF-8
\documentclass{article}
\usepackage{fontspec,xunicode,xltxtra}
\usepackage{fancyvrb}
\usepackage{etex}
\usepackage{etoolbox}
\usepackage{xstring}
\usepackage{pgfopts}
\usepackage{newfloat}
\usepackage{xcolor}
\usepackage{pythontex}

\usepackage{fontspec}
\defaultfontfeatures{Ligatures=TeX}
\newcommand{\pow}[2]{\py{#1**#2}}
\newcommand{\poww}[2]{\pyc{print(#1**#2)}}
\newcommand{\powww}[2]{\begin{pycode}print(#1**#2) \end{pycode}}

\begin{document}
\pow{2}{5}      % success
\poww{2}{6}     % success
\powww{2}{7}    % fail
\end{document}

Recebo um erro \powwwe não consigo entender o porquê. Qualquer ajuda será apreciada.

Extraneous input `print(2**7) \end {pycode}^^I% fail' between \begin{pycode}[
<key=value>] and line end
.
\FV@Error ...ncyVerb Error:^^J\space \space #1^^J}

l.28 \powww{2}{7}^^I% fail

O objetivo final é passar conjuntos de 2 strings unicode como parâmetros do documento XeLaTeX via PythonTeX para Python, mas prefiro "começar simples e depois expandir passo a passo".

Responder1

Ambientes PythonTeX, como o ambiente pycode, não podem ser usados ​​inline. Deve haver uma quebra de linha após o \begin{pycode}e \end{pycode}também deve estar em uma linha. Além disso, PythonTeXambientesnão pode ser usado dentro de comandos LaTeX. Essa limitação se deve à maneira como o LaTeX lida com texto literal (literal) em ambientes (está relacionado aos catcodes do TeX).

Se você deseja criar comandos personalizados, \pyeste \pycé o caminho a seguir. Se você deseja criar um comando que envolva código mais complexo, provavelmente deverá definir uma função em um ambiente pycode e chamar essa função em \pyou \pyc.

Se você tiver perguntas adicionais, você pode perguntar emhttps://tex.stackexchange.com/.

informação relacionada