PythonTeX PyCode を使用した \newcommand

PythonTeX PyCode を使用した \newcommand

環境は、MiKTeX 2.9、XeLaTeX、PythonTeX 0.11 ベータ、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}も単独で1行に記述する必要があります。また、PythonTeX環境LaTeX コマンド内では使用できません。この制限は、LaTeX が環境内の逐語的 (リテラル) テキストを処理する方法によるものです (TeX の catcodes に関連しています)。

カスタム コマンドを作成する場合は\py\pycと を使用します。より複雑なコードを含むコマンドを作成する場合は、pycode 環境で関数を定義し、 または 内でその関数を呼び出す必要があり\pyます\pyc

追加の質問がある場合は、https://tex.stackexchange.com/

関連情報