带有参数的动态长度变量?(例如“\setlength{\foo}[1]{0.5+#1*0.5}”)

带有参数的动态长度变量?(例如“\setlength{\foo}[1]{0.5+#1*0.5}”)

有没有办法定义某种接受参数的长度函数,类似于\newcommand和之间的混合\setlength

下面的例子可以说明我想要的。(我使用 tikz 树是因为我在那里遇到了这个问题,但是在我看来,这个问题不是 tikz 特有的。)

\documentclass{article}
\usepackage{tikz}
\begin{document}

\newlength{\unit}
\setlength{\unit}{2cm}

\begin{tikzpicture}
\node {hello}
    child{ 
        node[yshift=-0.5\unit-5*0.5\unit] {world}
    }
;
\end{tikzpicture}

\end{document}

我想放入变量的代码是-0.5\unit-5*0.5\unit。我想用类似 的内容替换它\foo{5},可以将其定义为(如果可以像 一样处理参数,\setlength{\foo}[1]{-0.5\unit-#1*0.5\unit}它看起来可能会是这样的)。\setlength\newcommand

\newcommand不起作用,因为它定义的是命令,而不是长度,并且\setlength不接受任何参数。

答案1

你想要这样的东西吗?

\documentclass{article}
\usepackage{tikz}
\begin{document}

\newlength{\unit}
\setlength{\unit}{2cm}
\newcommand\foo[1]{-0.5\unit-#1\unit}

\begin{tikzpicture}
\node {hello}
    child{ 
        node[yshift=\foo{2.5}] {world}
    }
;
\end{tikzpicture}

\end{document}

这里 2.5=5*0.5

相关内容