Los entornos son MiKTeX 2.9, XeLaTeX, PythonTeX 0.11 beta y Python 3.3. Soy bastante nuevo en LaTeX y Python/PythonTeX y tengo problemas con el siguiente 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}
Recibo un error \powww
y no puedo entender por qué. Cualquier ayuda se agradece.
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
El objetivo final es pasar conjuntos de 2 cadenas Unicode como parámetros del documento XeLaTeX a través de PythonTeX a Python, pero prefiero "comenzar de manera simple y luego expandirlo paso a paso".
Respuesta1
Los entornos PythonTeX, como el entorno pycode, no se pueden utilizar en línea. Debe haber un salto de línea después de \begin{pycode}
, y el\end{pycode}
también debe estar en una línea sola. Además, PythonTeXentornosno se puede utilizar dentro de los comandos LaTeX. Esta limitación se debe a la forma en que LaTeX trata el texto palabra por palabra (literal) en los entornos (está relacionado con los catcodes de TeX).
Si desea crear comandos personalizados, \py
este \pyc
es el camino a seguir. Si desea crear un comando que involucre código más complejo, entonces probablemente debería definir una función en un entorno pycode y llamar a esa función dentro de \py
o \pyc
.
Si tiene preguntas adicionales, puede hacerlas enhttps://tex.stackexchange.com/.