\newcommand с PythonTeX PyCode

\newcommand с PythonTeX PyCode

Среды: MiKTeX 2.9, XeLaTeX, PythonTeX 0.11 beta и Python 3.3. Я новичок в LaTeX и Python/PythonTeX и борюсь со следующим фрагментом кода.

%!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}

Я получаю ошибку \powwwи не могу понять почему. Любая помощь приветствуется.

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

Конечной целью является передача наборов из 2 строк Unicode в качестве параметров из документа XeLaTeX через PythonTeX в Python, но я предпочитаю «начать с простого, а затем расширять шаг за шагом».

решение1

Среды PythonTeX, как и среда pycode, не могут быть использованы в строке. После должен быть перенос строки \begin{pycode}, а \end{pycode}также должен быть на отдельной строке. Также, PythonTeXсредыне может использоваться внутри команд LaTeX. Это ограничение связано с тем, как LaTeX обрабатывает дословный (буквальный) текст в средах (это связано с каткодами TeX).

Если вы хотите создать пользовательские команды, \pyи \pycэто путь. Если вы хотите создать команду, которая включает в себя более сложный код, то вам, вероятно, следует определить функцию в среде pycode и вызвать эту функцию внутри \pyили \pyc.

Если у вас есть дополнительные вопросы, вы можете задать их наhttps://tex.stackexchange.com/.

Связанный контент