Mathematische Operationen in den Indizes indizierter Variablen

Mathematische Operationen in den Indizes indizierter Variablen

Ich habe eine indizierte Variable und weiß nicht, wie ich einfache mathematische Operationen auf dem Index durchführen kann, wie z . B. x{\a-1}.

Ich verwende es \tikzmathhäufig, daher ist es in meinem MWE enthalten:

\documentclass[]{standalone}
\usepackage{tikz}
\usetikzlibrary{math}

\begin{document}

\begin{tikzpicture}
\tikzmath{
\x1 = 1;
\x2 = 3;
\x3 = 5;
\x4 = 7;
%Since units are not given in \tikzmat, they will be evaluated as cm in tikz enviroment below.
}

\draw (\x{1},0) -- (10cm,10cm) node[at start, below]{\x{1}}; %This works

%\draw (\x{2-1},0) -- (10cm,10cm) node[at start, below]{\x{2-1}}; %This does not work

%\foreach \ind in {2,...,4}
%\draw (\x{\ind},0) -- (10cm,10cm) node[at start, below]{\x{\ind}}; %This works

%\foreach \ind in {2,...,4}
%\draw (\x{\ind-1},0) -- (10cm,10cm) node[at start, below]{\x{\ind-1}}; %This does not work

\end{tikzpicture}
\end{document}

Antwort1

Das \xMakro führt für seine Argumente keine Arithmetikoperationen aus, Sie können es aber dazu veranlassen.

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{math}

\newcommand{\usevar}[2]{%
  \expandafter#1\expandafter{\the\numexpr#2\relax}%
}

\begin{document}

\begin{tikzpicture}
\tikzmath{
\x1 = 1;
\x2 = 3;
\x3 = 5;
\x4 = 7;
%Since units are not given in \tikzmat, they will be evaluated as cm in tikz enviroment below.
}

\draw (\x{1},0) -- (10,5) node[at start, below]{\x{1}};

\draw[red] (\usevar\x{2-1},0) -- (4,5) node[at start, below]{\usevar\x{2-1}};

\foreach \ind in {2,...,4}
\draw (\x{\ind},0) -- (10,10) node[at start, below]{\x{\ind}};

\foreach \ind in {2,...,4}
\draw[red] (\usevar\x{\ind-1},0) -- (5,5) node[at start, below]{\usevar\x{\ind-1}};

\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Erläuterung

Wenn Sie dies tun \tikzmath{\x<argument>=<expression>}, definiert TikZ das Makro \xund auch ein internes Makro

\tikz@math@var@indexed@x@<argument>

das wiederum wird zum (berechneten) Ausdruck erweitert. Das Makro \xist grundsätzlich so definiert, dass es sein Argument betrachtet und daraus den internen Makronamen zusammensetzt. Es <argument>muss kein mathematischer Ausdruck sein und daher wird auch kein Versuch unternommen, ihn auszuwerten.

Sie müssen also die Auswertung durchführen (vorausgesetzt, dass im „Index“ nur ganze Zahlen enthalten sind), bevor \xerweitert wird. Diese Aufgabe wird von ausgeführt \usevar, das \xbeiseite legt, erweitert \the\numexpr#2\relax, was eine ganze Zahl zurückgibt, und dann zu \x(im Allgemeinen seinem ersten Argument) zurückkehrt, das nun das berechnete Argument „sieht“.

Antwort2

Kleine Ergänzung zu @egregs Fix:

Wenn wir nur die Ausdrücke auswerten möchten, die der {2*\ind+5}von @egreg ähneln, ergibt sich folgende Lösung:

\newcommand{\useevalof}[1]{%
  \the\numexpr#1\relax%
}

Beispiel: Betrachten Sie $A_{\ind-4}$. Wenn \indder Wert 6 ist, $A_{\useevalof{\ind-4}}$ergibt$A_2$

Das ist wirklich nützlich für mich. Ich entwickle eine Tikz-Bibliothek für Strukturmechanik für Bauingenieure. Sehen Sie sich die Bilder unten an. Die Ebenen sind vollständig automatisiert.

Vermerkt: \expandafternach Hinweis von @egreg entfernt.

Bildbeschreibung hier eingeben

verwandte Informationen