如何在LaTeX / TikZ中执行“复杂”计算

时间:2018-01-29 19:01:51

标签: latex tikz

我希望这个问题已经回答了一千次,但我找不到解决问题的方法=(

我想计算LaTeX(TikZ)中的一些值,其中一些是长度(例如10 pt),有些则不是。只要计算是非常简单的形式,如a*b+c一切都很好,但如果我需要像(a+b)*(c+d)这样的括号,LaTeX会抱怨。此外,如果我有嵌套定义,这些都没有按预期解决。例如:

\def\varA{1+2}
\def\varB{10}
% I want to calculate (1+2)*10 or 10*(1+2), respectively.
\def\varC{\varA*\varB} % evaluates to 21
\def\varD{\varB*\varA} % evaluates to 12

基本上我的问题是:在LaTeX中进行计算的正确(或推荐)方法是什么?

作为一个更现实的例子,这是我真正想做的事情,但却不能:

% total height of my TikZ image
\def\myheight{20ex}
% five nodes shall be drawn as a stack
\def\numnodes{5}
% but there shall be some space at the top (like a 6th node)
\def\heightpernodeA{\myheight / (\numnodes + 1)} % fails whenever I want to use it
% workaround?
\def\numnodesplusone{\numnodes + 1}
\def\heightpernodeB{\myheight / \numnodesplusone} % fails for the reason explained above

不幸的是,当我使用变量进行各种计算时,我无法将\ numnodes重新定义为6。

最好的问候

1 个答案:

答案 0 :(得分:3)

您可以使用\pgfmathsetmacro进行更复杂的计算。您需要删除myheight中的单位:

% total height of my TikZ image
\def\myheight{20}
% five nodes shall be drawn as a stack
\def\numnodes{5}
% but there shall be some space at the top (like a 6th node)
\pgfmathsetmacro\heightpernodeA{\myheight / (\numnodes + 1)}

您可以在使用时添加本机:\draw (0,0) -- ({\heightpernodeA ex},{1});