Rechnen mit variablen

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Rechnen mit variablen

Re: Rechnen mit variablen

von Stefan Kottwitz » Fr 26. Apr 2024, 15:34

Du möchtest die Variable \y ändern, oder? Das geht zum Beispiel so:
\pgfmathparse{\y+2}
\edef\y{\pgfmathresult}
Stefan

Re: Rechnen mit variablen

von MattGyver » Fr 26. Apr 2024, 13:21

Ich habe es jetzt mit \calc gemacht wie du es mir empfohlen hast

hier jetzt der Code in einer Datei damit es kompiliert werden kann.
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[german]{babel}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{units}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\usetikzlibrary {backgrounds}
\usetikzlibrary{calc}

\newenvironment{Diagramm}{

	\def\x{0}
	\def\y{0}

    \begin{tikzpicture}
    
    \newcommand{\Sensor}[3]{
    	
    	\node at (0,\y + 1.5) {##1};
        \node at (1.55, \y + 2) {##3};
        \node at (1.55, \y + 1) {##2};
        \draw (2,\y) -- (2,\y + 3);
        \y + 2
    }
}
{
	\end{tikzpicture}
}


\author{Test}
\title{Test}

\begin{document}
\maketitle

\begin{Diagramm}
	\Sensor{Test}{1}{2}
	\Sensor{Test2}{1}{2}
\end{Diagramm}

\begin{Diagramm}
	\Sensor{Test}{1}{2}
	\Sensor{Test2}{1}{2}
\end{Diagramm}

\end{document}

Re: Rechnen mit variablen

von Stefan Kottwitz » Fr 26. Apr 2024, 13:12

In jedem Aufruf der Umgebung Zähler und Makros neu anzulegen, ist ein Problem. Beim zweiten Durchlauf gibt es den Zähler schon.

Das sollte also aus der Umgebung raus und weiter oben stehen in der .sty-Datei:
\newlength{\yPosition}
\newlength{\xLength}
\newcounter{xLengtZustand}
\newcounter{step}
Der Fehler "Missing \begin{document}" kam weil Du ein Semikolon in dieser Zeile drin hattest:
\newcounter{xLengtZustand};
Das Semikolon ist ja hier "normaler Text" und dann beschwert sich LaTeX, weil das Dokument noch nicht begonnen wurde und schon soll Text ausgegeben werden.

Stefan

Re: Rechnen mit variablen

von MattGyver » Fr 26. Apr 2024, 12:59

Ok ich habe nochmal von vorne begonnen.

Vielleicht stelle ich mir das auch falsch vor wie das funktionieren könnt.
Ich sehe das wie bei einer Programmiersprache, ich definiere mir eine Funktion und die Kann ich mehrmals aufrufen in meinem Fall:
\newenvironment{Diagramm}{

	\def\x{0}
	\def\y{0}

    \begin{tikzpicture}
    
    \newcommand{\Sensor}[3]{
    	
    	\node at (0,\y + 1.5) {##1};
        \node at (1.55, \y + 2) {##3};
        \node at (1.55, \y + 1) {##2};
        \draw (2,\y) -- (2,\y + 3);
        \y + 2 %Hier soll der wert um zwei erhöht werden dammit beim nächsten aufruf der Text über dem alten Text ist.
    }
}
{
	\end{tikzpicture}
}
Jetzt kommt wahrscheinlich mein Denkfehler. Ich definier ja x und. y außerhalb von newcommand, deswegen denke ich das der Wert drin gespeichert wird und beim nächsten Aufruf damit weitergerechnet wird.

also wenn ich

\Sensor{Test}{0}{1}
\Sensor{Test1}{0}{1}

die Texte übereinander geschrieben werden, aber sie liegen leider aufeinander.
Ich hoffe ihr versteht was ich für ein Problem habe.

Re: Rechnen mit variablen

von Stefan Kottwitz » Fr 26. Apr 2024, 10:42

Das klingt, als hättest Du die .sty-Datei versucht zu übersetzen, und nicht das Dokument, dort steht \begin{document} ja drin. \newcommand muss auch noch raus aus tikzpicture- und Diagramm-Umgebungen.

Stefan

Re: Rechnen mit variablen

von MattGyver » Fr 26. Apr 2024, 10:06

Habe ich auch schon versucht.
\newlength{\yPosition}
\setlength{\yPosition}{0cm}
    
\newlength{\xLength}
\newcounter{xLengtZustand};

\newenvironment{Diagramm}{

    \begin{tikzpicture}
    
    \newcommand{\Sensor}[3]{
    	\node at (0,\yPosition+1.5cm) {##1};
        \node at (1.55, \yPosition+2cm) {##3};
        \node at (1.55, \yPosition+1cm) {##2};
        \draw (2,\yPosition) -- (2,\yPosition+3cm);
        \addtolength{\yPosition}{2cm} % Y-Position um 1,5 erhöhen
        
    	%\node at (0,1) {##1};
    	%\node at (1, 1.5) {##3};
  		%\node at (1, 0.5) {##2};
  		%\draw (1.5,0) -- (1.5,2);
  
Leider gibt es dann folgenden Fehlermeldung und ich war total Hilflos.
! LaTeX Error: Missing \begin{document}.

Anscheinend kann ich es auch nicht am Anfang der Datei machen weil er die Umgebung von \begin{Document} brauch.

Re: Rechnen mit variablen

von Stefan Kottwitz » Fr 26. Apr 2024, 09:56

Hallo Mathias,

ich finde super, dass Du TikZ verwendest! Ich bin ein großer Freund davon, daher habe ich auch ein Buch dazu geschrieben. Auf tikz.org/sample findest Du ein Kapitel, das sich konkret mit Rechnen befasst, also mit der calc-Library, sowie for-Schleifen und Schnitte von Pfaden.

Die Diagramm-Umgebung kann man nicht mehrfach verwenden, weil innerhalb der Umgebung Längen und Makros definiert werden. Also \newlength und \newcommand sollten raus aus der Umgebung und an den Anfang der .sty-Datei.

Mit TikZ würde ich jedoch integrierte TikZ Bordmittel zum Berechnen verwenden, also calc, ggf. tikzmath oder pgfmath.

Stefan

Re: Rechnen mit variablen

von MathiasG » Fr 26. Apr 2024, 09:42

Viele Dank erstmal für eure Hilfe, jetzt funktioniert alles erstmal soweit, jedoch habe ich ein Problem. Ich kann meine Umgebung Diagramm nur einmal verwenden möchte es aber mehrmals verwenden.

Hier meine fDiagramm:
\ProvidesPackage{fDiagramm}

\RequirePackage{tikz}
\usetikzlibrary{shapes.geometric}
\usetikzlibrary {backgrounds}

\newenvironment{Diagramm}{

    \begin{tikzpicture}
    
    \newlength{\yPosition}
	\setlength{\yPosition}{0cm}
    
	\newlength{\xLength}
	\newcounter{xLengtZustand};
    
    \newcommand{\Sensor}[3]{
    	\node at (0,\yPosition+1.5cm) {##1};
        \node at (1.55, \yPosition+2cm) {##3};
        \node at (1.55, \yPosition+1cm) {##2};
        \draw (2,\yPosition) -- (2,\yPosition+3cm);
        \addtolength{\yPosition}{2cm} % Y-Position um 1,5 erhöhen
        
    	%\node at (0,1) {##1};
    	%\node at (1, 1.5) {##3};
  		%\node at (1, 0.5) {##2};
  		%\draw (1.5,0) -- (1.5,2);
  
  		%Zweiter Sensor
  		%\node at (1, 2.5) {0};
  		%\node at (1, 3.5) {1};
  		%\node at (0,3) {PR1};
  		%\draw (1.5,2) -- (1.5,4);
  
  		%Zeitabschnitt
  		%\draw (1.5,0.5) -- (2.5,0.5);
  		%\draw (1.5,1.5) -- (2.5,1.5);
  
  		%\draw (1.5,2.5) -- (2.5,2.5);
  		%\draw (1.5,3.5) -- (2.5,3.5);
  
  		%\node[draw, circle] (start) at (0,0) {Start};
  		%\node[draw, rectangle] (PR0) at (0,1) {Schritt 1};
  		%\node[draw, rectangle] (step2) at (0,2) {Schritt 2};
  		%\node[draw, circle] (end) at (6,0) {Ende};

  		%\draw[-] (start) -- (step1);
  		%\draw[-] (step1) -- (step2);
  		%\draw[-] (step2) -- (end);
    }
    
    \newcommand{\Label}{
		\addtocounter{xLengtZustand}{+4};    
    
    	\node[rotate=90] at (0.1, \yPosition+1.5cm) {Bauglied};
    	\node[rotate=90] at (1.55, \yPosition+1.5cm) {Zustand};
    	
    	\draw (-1,0) rectangle (1.2,\yPosition+2.5cm);
    	\draw (1.2,0) rectangle (2,\yPosition+2.5cm);
    	\draw (2,0) rectangle (\value{xLengtZustand},\yPosition+2.5cm);
    	
    	\draw (-1,\yPosition + 0.7cm) -- (2,\yPosition + 0.7cm);
    }
    
    \newcommand{\Schritte}[1]{
    
    	\newcounter{step};
    	
    	\setcounter{step}{##1};
    	%\addtocounter{step}{-2};
    	
    	\setlength{\xLength}{0cm}
    	
    	\begin{scope}[on background layer]
        	\draw[step=1cm,gray,very thin] (2,0) grid (##1+4,\yPosition + 1.2cm);
    	\end{scope}
    	
    	\foreach \x in {0,...,\value{step}} {
            \node at (\x+3,\yPosition+1.5cm) {\x};
        }

        \setcounter{xLengtZustand}{\value{step}};
    }
    
    \newcommand{\Schritt}[4]{
    	\draw[red, ultra thick] (##1+2,##2) -- (##3+2,##4);
    }
    
    \newcommand{\pup}[5]{
    	
    	\draw[fill] (##1+2,##2) circle (2pt) node[above left] {##5};
    	\draw[fill] (##3+2,##4) circle (2pt);
  
    	\draw (##1+2,##2) -- (##1+2+0.2,##2+0.4);
    	\draw[->] (##1+2+0.2,##2+0.4) -- (##3+2+0.2,##4-0.4);
    	\draw (##3+2+0.2,##4-0.4) -- (##3+2,##4);
    }
    
    \newcommand{\pdown}[5]{
    	
    	\draw[fill] (##1+2,##2) circle (2pt);
    	\draw[fill] (##3+2,##4) circle (2pt) node[above left] {##5};
  
    	\draw (##1+2,##2) -- (##1+2+0.2,##2+0.4);
    	\draw[<-] (##1+2+0.2,##2+0.4) -- (##3+2+0.2,##4-0.4);
    	\draw (##3+2+0.2,##4-0.4) -- (##3+2,##4);
    }
}
{
	\end{tikzpicture}
}


und hier rufe ich sie auf in meiner .tex Datei
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[german]{babel}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{units}
\usepackage{fDiagramm}


\author{Test}
\title{Test}

\begin{document}
\maketitle

\begin{Diagramm}
	\Sensor{Q1}{0}{1}
	\Sensor{T2}{0}{1}
	\Sensor{T1}{0}{1}
	\Schritte{6}
	\Label
	
	%Schritte für T1
	\Schritt{0}{5}{2}{5}
	\Schritt{2}{5}{2}{6}
	\Schritt{2}{6}{3}{6}
	\Schritt{3}{6}{3}{5}
	\Schritt{3}{5}{6}{5}
	\Schritt{6}{5}{6}{6}
	\Schritt{6}{6}{8}{6}
	
	%Schritte für T2
	\Schritt{0}{3}{4}{3}
	\Schritt{4}{3}{4}{4}
	\Schritt{4}{4}{5}{4}
	\Schritt{5}{4}{5}{3}
	\Schritt{5}{3}{6}{3}
	\Schritt{6}{3}{6}{4}
	\Schritt{6}{4}{8}{4}
	
	%Schritte Q1
	\Schritt{0}{1}{2}{1}
	\Schritt{2}{1}{2}{2}
	\Schritt{2}{2}{3}{2}
	\Schritt{3}{2}{3}{1}
	\Schritt{3}{1}{4}{1}
	\Schritt{4}{1}{4}{2}
	\Schritt{4}{2}{5}{2}
	\Schritt{5}{2}{5}{1}
	\Schritt{5}{1}{6}{1}
	\Schritt{6}{1}{6}{2}
	\Schritt{6}{2}{8}{2}
	
	\pdown{2}{1}{2}{6}{\unit[0,2]{mm}}
	\pdown{4}{1}{4}{4}{\unit[0,2]{mm}}
	
	\pdown{6}{1}{6}{6}{\unit[0,2]{mm}}
	\pdown{6}{1}{6}{4}{\unit[0,2]{mm}}

\end{Diagramm}

\end{document}

Re: Rechnen mit variablen

von u_fischer » Do 25. Apr 2024, 12:33

Im Prinzip mit `\setcounter{temp3}{\inteval{\value{temp2}-\value{temp1}}}`. Aber counter enthalten Integer. `\value{x1}-0.2` macht keinen Sinn, du hast einfach nur Glück, dass es keinen Fehler gibt.

Wenn du mit Dezimalen rechnen willst, kannst du das eingebaute fp-Module nutzen (siehe interface3.pdf):
\documentclass{book}
\begin{document}
\ExplSyntaxOn
\fp_new_variable:n { A }
\fp_new_variable:n { B }
\fp_set_variable:nn { A } { 1.32 }
\fp_set_variable:nn { B } { 2.4 }
\ExplSyntaxOff


\fpeval{0.3*A+pi*B}

\end{document}

Re: Rechnen mit variablen

von Wegweiser » Do 25. Apr 2024, 11:28

Für derartige Berechnungen gibt es eine verhältnismäßig große Auswahl an Paketen.

Nach oben