Как выполнить "сложные" расчеты в 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 ответ

Решение

Ты можешь использовать \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});

Другие вопросы по тегам