\newcommand mit PythonTeX PyCode

\newcommand mit PythonTeX PyCode

Umgebungen sind MiKTeX 2.9, XeLaTeX, PythonTeX 0.11 Beta und Python 3.3. Ich bin ziemlich neu bei LaTeX und Python/PythonTeX und habe Probleme mit dem folgenden Codestück.

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

Ich erhalte eine Fehlermeldung \powwwund verstehe nicht, warum. Für jede Hilfe bin ich dankbar.

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

Das ultimative Ziel besteht darin, Sätze von 2 Unicode-Zeichenfolgen als Parameter aus dem XeLaTeX-Dokument über PythonTeX an Python zu übergeben, aber ich bevorzuge es, „einfach anzufangen und dann Schritt für Schritt zu erweitern“.

Antwort1

PythonTeX-Umgebungen wie die pycode-Umgebung können nicht inline verwendet werden. Nach dem muss ein Zeilenumbruch erfolgen \begin{pycode}und das \end{pycode}muss ebenfalls in einer eigenen Zeile stehen. Außerdem kann PythonTeXUmgebungenkann nicht innerhalb von LaTeX-Befehlen verwendet werden. Diese Einschränkung ist auf die Art und Weise zurückzuführen, wie LaTeX wörtlichen (buchstäblichen) Text in Umgebungen behandelt (sie hängt mit den Catcodes von TeX zusammen).

Wenn Sie benutzerdefinierte Befehle erstellen möchten, sind \pyund \pycdie richtige Wahl. Wenn Sie einen Befehl erstellen möchten, der komplexeren Code umfasst, sollten Sie wahrscheinlich eine Funktion in einer Pycode-Umgebung definieren und diese Funktion innerhalb von \pyoder aufrufen \pyc.

Wenn Sie weitere Fragen haben, können Sie diese stellen unterhttps://tex.stackexchange.com/.

verwandte Informationen