我想将 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}