如何在 LaTeX/TikZ 中执行 "complex" 计算
How to perform "complex" calculations in 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,因为我将变量用于各种计算。
此致
您可以使用 \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});
我希望这个问题已经被回答了一千次,但我就是找不到解决我的问题的方法=(
我想计算 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,因为我将变量用于各种计算。
此致
您可以使用 \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});