Counter im Befehl auf Eingabe setzen

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


Benutzeravatar
mathe42
Forum-Anfänger
Forum-Anfänger
Beiträge: 15
Registriert: So 8. Jan 2017, 17:35

Counter im Befehl auf Eingabe setzen

Beitrag von mathe42 »

Hallo,

Ich möchte gerne ein Befehl definieren, in dem mit verschiedenen countern gearbeitet wird. Dafür möchte ich einen Counter auf den übergebenen wert setzen. (Nach dem Motto:)
\newcomand{\test}[1]{
  \newcounter{c}
  \setcounter{#1}
 ...
}
Wie geht das?

Gruß
Mathe42

ChristianHupfer
Forum-Anfänger
Forum-Anfänger
Beiträge: 22
Registriert: So 15. Mai 2016, 19:19
Wohnort: Schwarzwald

Beitrag von ChristianHupfer »

Man sollte
\newcounter
nicht in einem
\newcommand
- Makro 'verstecken', insbesondere kann man den Befehl pro Zählername nur einziges Mal verwenden (wenn man den Trick nicht kennt ;-))

Bitte definiere genau, was Du mit deinem Makro erreichen willst.
Oh mein Gott, Du musst mich mit jemanden verwechseln, den das wirklich, wirklich, wirklich interessiert! (Dr. Cox aus "Scrubs" )

Gast

Beitrag von Gast »

\setcounter hat übrigens zwei Argumente. Als erstes Argument ist der Name des Zählers anzugeben. Der Wert ist erst als zweites Argument anzugeben.

Benutzeravatar
mathe42
Forum-Anfänger
Forum-Anfänger
Beiträge: 15
Registriert: So 8. Jan 2017, 17:35

Beitrag von mathe42 »

Also im Grunde möchte ich eine Mathematische Funktion als Befehl darstellen (Also imgrunde will ich f(x) mit verschiedenen x Berechnen...)

Als vereinfachtes Beispiel:
\newcounter{foo}
\newcomand{\function}[1]{
   %Setzte foo auf #1
   \setcounter{foo}{#1}
   \addtocounter{foo}{\value{foo}}
   \thefoo
}
Wäre jetzt f(x)=2*x

(in Wirklichkeit ist das Problem deutlich komplexer)


EDIT:
Hier mal ein kleines Beispiel wie ich das jetzt umgesetzt habe (eine der einfachen Dinge). Wenn ich mein Ziel ansehe ist das leider nix...
\documentclass{report} 

\newcounter{r}
\setcounter{r}{0}
\newcounter{m}
\setcounter{m}{0}

\newcommand{\Rest}{     
    \ifnum\value{r}<\value{m}
        \ther
    \else
        \addtocounter{r}{-\value{m}}    
        \Rest
    \fi
}
\begin{document} 
	\setcounter{m}{2}
	\setcounter{r}{6}
	\Rest
\end{document}
Mich würde also dennoch eine Möglichkeit das umzusetzen Interessieren...

Gast

Beitrag von Gast »

Funktionen berechnen und deren Wert ausgeben, geht beispielsweise mit den mathematischen Fähigkeiten von pgf bzw. pgfplots sehr schön. Als Tabelle ausgeben wäre dann beispielsweise mit pgfplotstable möglich. Dabei stehen einem auch Schleifenkonstrukte zur Verfügung.

Zu deinem Beispiel: Du kannst m und r natürlich über Argumente von \Rest setzen, wobei es ggf. sinnvoll ist dann für die Rekursion eine interne Anweisung zu verwenden, also etwas wie:
\makeatletter
\newcommand*{\Rest}[2]{\setcounter{r}{#1}\setcounter{m}{#2}\@Rest}
\newcommand{\@Rest}{%   
    \ifnum\value{r}<\value{m}
        \ther
    \else
        \addtocounter{r}{-\value{m}}%
        \expandafter\@Rest
    \fi
}\makeatother
Man könnte für die Schleife aber auch einfach \@whilenum aus dem LaTeX-Kern verwenden und so die Rekursion verstecken.

Ob das alles für dein Ziel nix ist, kann ich natürlich nicht beurteilen, da ich dazu zu wenig Informationen über das Ziel habe.

Benutzeravatar
mathe42
Forum-Anfänger
Forum-Anfänger
Beiträge: 15
Registriert: So 8. Jan 2017, 17:35

Beitrag von mathe42 »

Danke für die Antwort ich hab das jetzt hinbekommen :wink:

Antworten