\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 的 catcodes 有關)。

如果您想建立自訂命令,\py那麼 和\pyc是可行的方法。如果您想要建立一個涉及更複雜程式碼的命令,那麼您可能應該在 pycode 環境中定義一個函數,並在\py或中呼叫該函數\pyc中呼叫該函數。

如果您還有其他問題,您可以在以下位置提問https://tex.stackexchange.com/

相關內容