PythonTex 的新命令

PythonTex 的新命令

我想将 pytontex \pyc 实现为新命令,以便我可以以通用的方式使用它。

当我使用 newcommand 时,我只得到一些奇怪的“i”(我用它来枚举 spec 变量),并且没有列表输出。在 begin document 环境中使用相同的命令会创建所需的输出。也许环境和变量可能是问题所在...

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[runall=true]{pythontex}
\usepackage{etoolbox} % defines lists and their operations

\newcommand{\createresult}{\pyc{result = ("Peter P", "Charlie D")}}
\newcommand{\odbexporta}{\pyc{numsuf= "i"; j = 0}}
\newcommand{\odbexportb}{\pyc{for j in range(0,2):  print(r"\let\spec" + numsuf + "\empty");  newstr = result[j];  print(r"\gdef\spec" + numsuf + r"{" + newstr + r"}");  print(r"\listcsgadd{datensatzspec}{spec" + numsuf + r"}");  numsuf = numsuf + "i";  j = j + 1}}

\begin{document}

OUTPUT BY NEWCOMMAND\\
\createresult
\odbexporta
\odbexportb
%\speci

OUTPUT BY PYC IN BEGIN DOCUMENT\\
\pyc{result = ("Peter P", "Charlie D")}
\pyc{numsuf = "i"; j = 0}
\pyc{for j in range(0,2):  print(r"\let\spec" + numsuf + "\empty");  newstr = result[j];  print(r"\gdef\spec" + numsuf + r"{" + newstr + r"}");  print(r"\listcsgadd{datensatzspec}{spec" + numsuf + r"}");  numsuf = numsuf + "i";  j = j + 1}
\speci \\
\specii

\end{document}

问题更新 下面提到的答案非常有用,解决了最初的问题。非常感谢!现在我添加了另一个主要基于 \dolistcsloop 和 \csuse 的 \newcommand。此命令从列表中取出名称为 speci、specii、... 的所有标记并打印它们。当我尝试组合这两个命令(初始问题中提到的命令)和打印 \dolistcsloop 的命令时,我得到了 \endcsname-error。我认为这是由宏的一些错误扩展引起的。我该如何解决这种情况:

\newcommand{\alltogehter}{
     \commandA
     \commandB
}

其中 \commandA 获取信息,\commandB 将其打印出来?我知道已经有人针对这个主题提出过一些问题,但是过去的答案并没有以适当的方式解决问题。

答案1

替换\newcommand后的文本已经根据 TeX 规则进行了标记,因此您需要使用\csname

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[runall=true]{pythontex}
\usepackage{etoolbox} % defines lists and their operations

\newcommand{\createresult}{\pyc{result = ("Peter P", "Charlie D")}}
\newcommand{\odbexporta}{\pyc{numsuf= "i"; j = 0}}
\newcommand{\odbexportb}{%
  \pyc{%
    for j in range(0,2):  print(r"\expandafter\let\csname spec" + numsuf + r"\endcsname" + "\empty");
    newstr = result[j];
    print(r"\expandafter\gdef\csname spec" + numsuf + r"\endcsname" + r"{" + newstr + r"}");
    print(r"\listcsgadd{datensatzspec}{spec" + numsuf + r"}");
    numsuf = numsuf + "i";  j = j + 1%
  }%
}

\begin{document}

OUTPUT BY NEWCOMMAND\\
\createresult
\odbexporta
\odbexportb
\speci \\
\specii

OUTPUT BY PYC IN BEGIN DOCUMENT\\
\pyc{result = ("Peter P", "Charlie D")}
\pyc{numsuf = "i"; j = 0}
\pyc{for j in range(0,2):  print(r"\let\spec" + numsuf + "\empty");  newstr = result[j];  print(r"\gdef\spec" + numsuf + r"{" + newstr + r"}");  print(r"\listcsgadd{datensatzspec}{spec" + numsuf + r"}");  numsuf = numsuf + "i";  j = j + 1}
\speci \\
\specii

\end{document}

在此处输入图片描述

相关内容