PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PGF-Keys Variablen Nummerieren



MC3330
20-10-2020, 09:59
Hallo,

ich verwende pgfkeys um an newcommands Optionen zu übergeben. Dabei verwende ich häufig die gleichen Optionen. Damit Variablen nicht doppelt verwendet werden und es so zu ungewollten Wechselwirkungen kommt, benennen ich die Variablen dann immer nach dem jeweiligen Kommando (Zum Beispiel wie im MB loesungcoma und loesungcomb).

Ich verwende die Kommandos innerhalb eines Dokument häufig mehrfach und es wäre optimal, wenn jeder Aufruf seinen eigenen Variablennamen hätte.

In Luacode mache ich es so, dass ich bei Variablen einen Counter hochzähle, denn ich dann in den Variablennamen einbinde, damit jedes Kommando seine eigenen Variablen hat (Siehe MB).

Ich suche jetzt ein Möglichkeit die Variablen in den pgfkeys auch irgendwie hochzuzählend, dass jedes Kommando individuelle Variablennamen hat. Dabei habe ich zum einen das Problem, dass ich in Latex ja keine Zahlen in den Variablen einbauen kann. Zum anderen habe ich bisher keine Syntax gefunden, dass der Counter dem Variablennamen zugeordnet wird.

Daher sind meine Fragen:
1. Gibt es eine Möglichkeit in Latex mit Buchstaben zu "zählen"? (Zum Beispiel a,b,...,z,aa,ab,..,az,ba,bb,...bz,...)
2. Gibt es eine Möglichkeit mit pgfkeys eine Variablennamen durch eine anderen Variable zu definieren? Also irgendwas wie \pgfkeysgetvalue{/coma/loesung}{\loesung{\theloesung}}?

Viele Grüße und vielen Dank im Voraus
mc

MB


\documentclass[12pt,listof=totoc,bibliography=totoc,numbers=noend dot]{scrartcl}
\usepackage{tikz}

\newcounter{loesung}
\newcommand\coma[1][]{%//
\stepcounter{loesung}
\pgfkeys{%//
/coma/loesung/.initial=1,
}%\\
\pgfkeys{/coma/.cd,#1}
\pgfkeysgetvalue{/coma/loesung}{\loesungcoma}
\directlua{
loesung\theloesung = \theloesung;
}

\begin{tikzpicture}
\node at (0,0){Command A};
\node at (0,-0.5){Latex: \loesungcoma};
\node at (0,-1){Lua: \directlua{tex.print(loesung\theloesung)}};
\end{tikzpicture}

}

\newcounter{loesung}
\newcommand\coma[1][]{%//
\stepcounter{loesung}
\pgfkeys{%//
/comb/loesung/.initial=1,
}%\\
\pgfkeys{/comb/.cd,#1}
\pgfkeysgetvalue{/comb/loesung}{\loesungcoma}
\directlua{
loesung\theloesung = \theloesung;
}

\begin{tikzpicture}
\node at (0,0){Command B};
\node at (0,-0.5){Latex: \loesungcomb};
\node at (0,-1){Lua: \directlua{tex.print(loesung\theloesung)}};
\end{tikzpicture}

}



\begin{document}

\coma

\coma

\comb

\coma



\end{document}

rais
21-10-2020, 17:35
Hallo,
so ganz hab ich Dein Vorhaben noch nicht verstanden, was auch damit zusammenhängen mag, daß Dein hier gezeigter Code nicht funktioniert, nun ja.

1) a--z geht mit \alph, alles was darüber hinausgeht mit \alphalph aus dem gleichnamigen Paket.
2) hier würde ich ersmal eine temporäre Variable setzen und die dann an einen entsprechend zusammengesetzten Befehl füttern:


\documentclass[12pt,listof=totoc,bibliography=totoc,numbers=noend dot]{scrartcl}
\usepackage{tikz}

\newcounter{loesung}
\newcommand\comx[2][]{%//
\stepcounter{loesung}
\pgfkeys{%//
/coma/loesung/.initial=\the\value{loesung},
}%\\
\pgfkeys{/coma/.cd,#1}
\pgfkeysgetvalue{/coma/loesung}{\loesungcomtmp}
\expandafter\def\csname loesungcom\alph{loesung}\endcsname{\loesungcomtmp} %
\directlua{
loesung\theloesung = \theloesung;
}
\begin{tikzpicture}
\node at (0,0){Command X};
\node at (0,-0.5){Latex: \csname loesungcom\alph{loesung}\endcsname};
\node at (0,-1){Lua: \directlua{tex.print(loesung\theloesung)}};
\end{tikzpicture}
}
\makeatletter
\newcommand\comy[2][]{%//
\stepcounter{loesung}
\pgfkeys{%//
/coma/loesung/.initial=\the\value{loesung},
}%\\
\pgfkeys{/coma/.cd,#1}
\pgfkeysgetvalue{/coma/loesung}{\loesungcomtmp}
\@namedef{loesungcom\alph{loesung}}{\loesungcomtmp }%
\directlua{
loesung\theloesung = \theloesung;
}
\begin{tikzpicture}
\node at (0,0){Command Y};
\node at (0,-0.5){Latex: \@nameuse{loesungcom\alph{loesung}}};
\node at (0,-1){Lua: \directlua{tex.print(loesung\theloesung)}};
\end{tikzpicture}
}
\makeatother
\begin{document}

\comx


\comx


\comy


\comx

\end{document}

VG

MC3330
08-12-2020, 19:16
Entschuldige bitte, dass ich hier gar nicht mehr rauf geantwortet hatte.
Da ist tatsächlich ein Fehler drin. Danke, dass du trotzdem so konstruktiv geantwortet hast.