\numexpr 在数学模式和/或 TikZ 中的行为

\numexpr 在数学模式和/或 TikZ 中的行为

我正在尝试创建一个三角形的数字网格,如下所示:

在此处输入图片描述

这是在 Ti 中创建的Z 通过对每个点进行硬编码,但我想以程序方式生成网格,以便我可以轻松地使用大量点进行调整。以下代码是我解决问题的方法:

\documentclass{article}
\usepackage{tikz}

\begin{tikzpicture}[scale=1.5]
    \foreach \s in {2,...,4} {
        \foreach \m in {1,...,\numexpr\s-1} {
            \def\n{\s-\m}
            \draw (\n,-\m) node {$a_{\m\n}$};
        }
    }
\end{tikzpicture}

然而,这会产生以下不良结果:

在此处输入图片描述

我解决这个问题的想法是\numexpr在节点\n定义中或之前添加\n。然而这会产生错误you can't use '\numexpr' in math mode

我不知道下一步该做什么。如何在 Ti 的数学模式下评估此类变量Z 图片?

进一步说明一下,如果我出于测试目的忽略数学模式的需要而只是简单地输入\numexpr\n节点文本,我反而会收到类似的错误消息you can't use '\numexpr' in restricted horizontal mode

此外,如果可能的话,我想保留这个\foreach迭代结构,因为它对于我在完整应用程序中使用的其他注释来说是理想的。

答案1

您可以使用\edef\n{\the\numexpr\s-\m},或者仅在下标中使用它:

\documentclass{article}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}[scale=1.5]
  \foreach \s in {2,...,4}{
    \foreach \m in {1,...,\numexpr\s-1}{
    \draw (\s-\m,-\m) node {$a_{\m\the\numexpr\s-\m}$};
  }
}
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案2

已经有一个关于如何使用的答案\numexpr,一个关于如何重写循环以避免这种情况的答案,这里还有另一种可能性:您可以使用提供的工具foreach进行计算。您可以使用countevaluate

\documentclass[tikz,border=7pt]{standalone}
\begin{document}
  \begin{tikzpicture}[scale=1.5]
      \foreach[count=\t from 1] \s in {2,...,4} {
          \foreach[evaluate={\n=int(\s-\m)}] \m in {1,...,\t} {
              \draw (\n,-\m) node {$a_{\m\n}$};
          }
      }
  \end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

避免额外的计算。尝试想出另一种使用嵌套\foreachs 的方法。

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[scale=1.5]
  \foreach \y in {1,...,3} {
    \foreach \x in {1,...,\numexpr4-\y} {
      \draw (\x,-\y) node {$a_{\y\x}$};
    }
  }
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容