使用 PythonTeX PyCode 的 \newcommand

使用 PythonTeX PyCode 的 \newcommand

环境是 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 的 catcode 有关)。

如果您想创建自定义命令,\py\pyc是最佳选择。如果您想创建涉及更复杂代码的命令,那么您可能应该在 pycode 环境中定义一个函数,然后在\py或中调用该函数\pyc

如果你还有其他问题,可以询问https://tex.stackexchange.com/

相关内容