如何创建带有执行 pycode 的循环的矩阵

如何创建带有执行 pycode 的循环的矩阵

好的,所以有很多问题与我想要解决的问题非常接近,但我找不到方法组合来完成这项工作(如果这个问题已经在其他地方得到解答,我很抱歉---我不确定我真的知道要搜索什么)。

我的问题是,一旦我将所有内容添加到中\mymatrixcontent,最终计算结果就会显示在每个插槽中。

我不得不想象这个问题与我在哪里/如何扩展事物有关,但我无法弄清楚。

\usepackage{tikz}
\usetikzlibrary{matrix}
\usepackage{etoolbox}
\usepackage{pythontex}


\begin{pycode}
def foobar(number):
  return 2 * number
\end{pycode}

% commands so I can use the variable in the pycode
\newcommand {\inttopy}[2]{ \expandafter \inttopytwo \expandafter {#2}{#1}}
\newcommand {\inttopytwo }[2]{\pyc{#2=#1}}

\begin{document}
\begin{tikzpicture}
\let\mymatrixcontent\empty
\foreach \n in {1,...,30}{
  \inttopy{changingNumber}{\n} % so I can use the year later in calculations
  \xdef\myVariable{\py{foobar(changingNumber)}}
  \xappto\mymatrixcontent{|[draw, circle,minimum size=1.5em,inner sep=2pt]|\n \expandonce{\&} \expandonce{\myVariable}}
\gappto\mymatrixcontent{\\}
}
  
\matrix[matrix of nodes, ampersand replacement=\&,
column sep=2ex,  label={Matrix}
] (m){
\mymatrixcontent 
};
\end{tikzpicture}
\end{document}

结果

答案1

该命令\py非常强大,这意味着它不会在\edef/中扩展\xdef

第二列永远都是\py{foobar(changingNumber)},但是当实际排版时(循环之后和矩阵内部),changingNumber最后设置为 30。(并且这些 Python 作业不会按循环分组,\foreach因为类似情况下的其他内容通常会引发错误。)

在这个简单的例子中

\edef\myVariable{\py{foobar(\n)}}

就足够了,因为\n将扩展到它的价值。

我进一步简化了循环。我们可以直接使用低级\pgfmatrix…宏,而不必担心替换符号。

代码

% arara: pdflatex
% arara: pythontex
% arara: pdflatex
%\documentclass{article}
\documentclass[tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usepackage{etoolbox}
\usepackage{pythontex}
\begin{pycode}
def foobar(number):
  return 2 * number
\end{pycode}
\begin{document}
\begin{tikzpicture}
\let\mymatrixcontent\empty
\foreach \n in {1,...,30}{
  \xappto\mymatrixcontent{\n   \noexpand\pgfmatrixnextcell
               \py{foobar(\n)} \noexpand\pgfmatrixendrow}
}
\matrix[
  matrix of nodes,
  column sep=2ex,
  column 1/.append style={
    nodes={
      draw, circle, minimum size=1.5em, inner sep=2pt}},
  label={Matrix}
] (m){\mymatrixcontent};
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

相关内容