TikZ 中循环中的数字幂

TikZ 中循环中的数字幂

我需要在 TikZ 中使用双循环 foreach 绘制一些东西,其中第二个循环中的集合将是第一个循环中的数字的幂。我的代码不起作用。当我2^{\a}在第二个循环中给出时出现错误。我该如何纠正它?

\begin{tikzpicture}
\foreach \a in {1,2,3}
{
    \foreach \b in {1,2,...,2^{\a}}
    {
    \draw (0,\a)--(\b,0);
    }
}
\end{tikzpicture}

答案1

只需在内循环之前进行数学运算。foreach不解析可迭代列表中的数学运算

\begin{tikzpicture}
\foreach \a in {1,2,3}
{
    \pgfmathtruncatemacro\aa{2^\a}
    \foreach \b in {1,2,...,\aa}
    {
    \draw (0,\a)--(\b,0);
    }
}
\end{tikzpicture}

或使用evaluate密钥。

答案2

您可以使用循环evaluate选项\foreach

\begin{tikzpicture}
\foreach \a[evaluate=\a as \bmax using int(2^\a)] in {1,2,3}
{
    \foreach \b in {1,2,...,\bmax}
    {
    \draw (0,\a)--(\b,0);
    }
}
\end{tikzpicture}

答案3

另一种循环是expl3;外循环中的当前整数设计为#1(你的\a),内循环中的当前整数设计为##1(你的\b)。

\documentclass{article}
\usepackage{tikz,xparse}

\ExplSyntaxOn
\DeclareExpandableDocumentCommand{\Xint}{m}
 {
  \fp_to_int:n { #1 }
 }
\NewDocumentCommand{\Xforeach}{mmmm}
 { % #1 = start, #2 = step, #3 = end
  \int_step_inline:nnnn { #1 } { #2 } { #3 } { #4 }
 }
\ExplSyntaxOff

\begin{document}

\begin{tikzpicture}
\Xforeach{1}{1}{3}{
  \Xforeach{1}{1}{\Xint{2^#1}}{
    \draw (0,#1) -- (##1,0);
  }
}
\end{tikzpicture}

\end{document}

enter image description here

答案4

尽管我相信仅使用和fpeval就有可能tikzpgf

\documentclass[11pt]{article}
\usepackage{tikz}
\usepackage{expl3}
\ExplSyntaxOn
\cs_set_eq:NN \fpeval \fp_eval:n
\ExplSyntaxOff
\begin{document}
\begin{tikzpicture}

\foreach \a in {1,2,3}
{
    \foreach \b in {1,2,...,\fpeval{2^\a}}
    {
    \draw (0,\a)--(\b,0);
    }
}
\end{tikzpicture}
\end{document}

相关内容