嵌套宏失败

嵌套宏失败

我正在尝试为我的学生创建数字轨迹。它们看起来应该像这样。

在此处输入图片描述

我想创建一个宏,使它们具有任意数量和任意长度(x-max)。

注意:该命令\numbertrack{20}编译后会生成上述图像。我编写的宏\mytracks无法编译生成上述图像。

\documentclass[landscape]{article}

\usepackage[margin=2cm]{geometry}
\usepackage{tikz}

\pagestyle{empty}

\def\myscale{1.15}

\newcommand{\numbertrack}[1]
{
\begin{tikzpicture}[scale=\myscale]
\draw (0,0)--(#1,0);
\draw (0,1)--(#1,1);
\foreach \x in {0,1,2,...,#1}
\draw (\x,0)--(\x,1);
\foreach \x in {1,2,3,...,#1}
\node[anchor=center] at (\x-0.5,0.5) {\huge\x};
\end{tikzpicture}
\\
\vspace{1cm}
}

\newcommand{\mytracks}
{
\foreach \y in {1,2,3,...,20}
\numbertrack{\y}
}

\begin{document}

\mytracks

\end{document}

答案1

像这样吗?

\documentclass{article}
\usepackage{tikz}
\usepackage[margin=10mm]{geometry}
\newcommand\numbertrack[2][1.15]{%
  \begin{tikzpicture}[scale=#1,
          mybox/.style={rectangle,draw,
                        minimum height=#1*10mm,
                        minimum width=#1*10mm}
    ]
    \foreach \num [count=\x] in {#2} {
      \node[mybox] at (\x,0){\num};
    }
  \end{tikzpicture}
}
\begin{document}

  \numbertrack{1,2,3,...,16}

  \numbertrack{12,4,3,5,3,5,2,3,4}

  \numbertrack[0.5]{a,d,3,c,s,g,d,a}

\end{document}

得出的结果为:

在此处输入图片描述

节点用矩形边界绘制,其最小宽度和高度根据比例设置——这是唯一棘手的部分,由#1*10mm的样式完成。有关和设置mybox的说明,请参阅:minimum heightminimum width在 foreach 循环内显示节点除缩放比例外,这两道题非常相似。

请注意,\numbertrack宏采用可选参数作为比例。因此,最后一个例子\numbertrack[0.5]{a,d,3,c,s,g,d,a},将比例设置为0.5。默认情况下,比例设置为 ,1.15如 OP 中所示。

编辑

如果我误解了,而您只是想要数字,1,2,...,x那么上面的代码稍作改动就可以了:

\documentclass{article}
\usepackage{tikz}
\usepackage[margin=10mm]{geometry}
\newcommand\numbertrack[2][1.15]{%
  \begin{tikzpicture}[scale=#1,
          mybox/.style={rectangle,draw,
                        minimum height=#1*10mm,
                        minimum width=#1*10mm}
    ]
    \foreach \num [count=\x] in {1,...,#2} {
      \node[mybox] at (\x,0){\num};
    }
  \end{tikzpicture}
}
\begin{document}

  \numbertrack{16}

  \numbertrack{12}

  \numbertrack[0.5]{3}

  \numbertrack[2]{1}

  \numbertrack[2]{0}

  \numbertrack[2]{-5}

\end{document}

得出的结果为:

在此处输入图片描述

特别是,1这不是特殊情况。负数也可以,但可能不是你想要的:(

答案2

这是一个仅使用节点的方法。由于\foreach,1 是特殊情况

\documentclass[landscape]{article}

\usepackage[margin=2cm]{geometry}
\usepackage{tikz,etoolbox}
\usetikzlibrary{calc}

\pagestyle{empty}

\def\myscale{1.15}

\newcommand\drawnumber[1]{
  \node[draw,anchor=west,
        minimum width=5mm,
        minimum height=5mm] (B) at (A) {#1};
  \coordinate (A) at ($(B.east)+(-\pgflinewidth,0)$);
}

\newcommand{\numbertrack}[1]
{
  \noindent
\begin{tikzpicture}[scale=\myscale]
  \coordinate (A) at (0,0); % initialize
  \ifnum#1=1\drawnumber{1}\fi
  \ifnum#1>1\relax
  \foreach\x in {1,2,...,#1}{
    \drawnumber{\x}
  }
  \fi
\end{tikzpicture}
\par
\bigskip
}

\newcommand{\mytracks}
{
    \foreach \y in {1,2,3,...,20} {
      \numbertrack{\y}
    }
 }

\begin{document}

\mytracks

\end{document}

相关内容