根据另一个变量定义一个变量

根据另一个变量定义一个变量

这是一个非常基本的问题,我希望在这里问还是可以的。

我想做以下事情

    \documentclass{article}
    \usepackage{tikz}

    \begin{tikzpicture}

    \def \x {2}
    \def \y {\x + 2}

    \foreach \s in {\x,...,\y}
    {
    % Do things
    }

    \end{tikzpicture}

这给了我错误

    ! Illegal unit of measure (pt inserted).
    <to be read again>
                       +
    1.12 }

这为什么是不可能的呢?

答案1

TeX 不会按照您的意愿解析数学。在这里,\foreach可能足够灵活,可以理解它,但总的来说,这是一个坏主意。

您可以通过 PGF 数学强制执行,例如

\pgfmathsetmacro\x{2}
\pgfmathsetmacro\y{int(\x + 2)} %without int \y would be 4.0 instead of 4

\foreach \s in {\x,...,\y}
{
% Do things
}

答案2

这是一个扩展问题。使用时\def\y{...} \y会采用使用时的值{....},而不是定义时的值。

假设你正在处理整数值,你想要的可能是

\edef\y{\number\numexpr\x+2\relax}

答案3

使用另一个宏tikz(,此处)的值给宏(,此处)赋值的方法是使用\y\x

  • \pgfmathsetmacro\y的值是一个定点数),或者
  • \pgfmathtruncatemacro(对于整数值)。

这是一个例子。

在此处输入图片描述

\documentclass{article}
\usepackage{tikz}

\begin{document}

\def\x{2}
\pgfmathsetmacro\xii{\x+0.25*\x}
\pgfmathsetmacro\y{\x+4.5}      

\foreach \s in {\x,\xii,...,\y}{\s,\ }

\end{document}

答案4

建议使用 的解决方案fp

\documentclass[tikz,border=12pt,12pt]{standalone}
\usepackage[nomessages]{fp}
\FPset\x{2}
\FPeval\y{x+2}

\begin{document}
\begin{tikzpicture}

\foreach \s in {\x,...,\y}
{
    % Do things
    \draw (\s,\s) node {\s};
}

\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容