Wie muss ich das Öffne in Overleaf
\documentclass[margin=5mm]{standalone} \usepackage{tikz} \newcounter{dummy} \def\getNoOfElements#1#2{% \setcounter{dummy}{0}% \foreach\dummy in {#1}{\stepcounter{dummy}}% \edef#2{\arabic{dummy}} } \begin{document} Geht: \getNoOfElements{a,b,c,d,e,f}\No % save the value in \No \No ~~Geht nicht: \def\Liste{1,2,3,4} \getNoOfElements{\Liste}\No \No \end{document} gefragt 16 Mär '19, 18:25 cis |
Du möchtest die Macros expandieren, bevor du sie übergibst. Dies geht am einfachsten mittels eines Helfer-Macros: Öffne in Overleaf
\documentclass[margin=5mm]{standalone} \usepackage{tikz} \newcounter{dummy} \makeatletter \def\getNoOfElements#1#2{% \begingroup \edef\tmp{#1}% \expandafter \endgroup \expandafter\getNoOfElements@b\expandafter{\tmp}{#2}% } \def\getNoOfElements@b#1#2{% \setcounter{dummy}{0}% \foreach\dummy in {#1}{\stepcounter{dummy}}% \edef#2{\arabic{dummy}} } \makeatother \begin{document} Geht: \getNoOfElements{a,b,c,d,e,f}\No % save the value in \No \No ~~Geht nicht: \def\Liste{1,2,3,4} \getNoOfElements{\Liste}\No \No \end{document} Zu Prokrastinierungszwecken: Eine vollständig expandierbare Version des Zählens, die genau 2 Expansionen benötigt. Es gibt zwei Varianten, Öffne in Overleaf
\documentclass[margin=5mm]{standalone} \makeatletter % \q@stop ist ein Marker und markiert das Ende der Liste \def\q@stop{\q@stop} % führt sein Argument nach \fi aus (schneller als \expandafter\@firstofone) \long\def\@afterfi#1\fi{\fi#1} \def\getNoOfElements#1% {% % irgendwas mit Zahlen \the\numexpr % ein leeres Argument führt zum Ergebnis 0 \if\relax\detokenize{#1}\relax 0% \else % sonst zählen wir die Anzahl an Kommata und addieren 1 hinzu \@afterfi{1\getNoOfElements@#1,\q@stop}% \fi % \relax beendet \numexpr \relax } % zweite Variante, die das Argument einmal expandiert \def\getNoOfElementsE#1% {% % irgendwas mit Zahlen \the\numexpr % ein leeres Argument führt zum Ergebnis 0 \if\relax\detokenize\expandafter{#1}\relax 0% \else % sonst zählen wir die Anzahl an Kommata und addieren 1 hinzu \@afterfi{1\expandafter\getNoOfElements@#1,\q@stop}% \fi % \relax beendet \numexpr \relax } \def\getNoOfElements@#1,#2% {% % überprüfen, ob das Ende der Liste erreicht ist \ifx\q@stop#2% \else % ist die Liste noch nicht beendet, addiere 1 und suche das nächste Komma \@afterfi{+1\getNoOfElements@}% \fi } \makeatother \begin{document} Geht: \getNoOfElements{a,b,c,d,e,f} % save the value in \No ~~Geht nicht: \def\Liste{1,2,3,4} \getNoOfElementsE{\Liste} \end{document} beantwortet 16 Mär '19, 22:19 Skillmon Aja, gut. Aber: Ohgottogott... :()
(16 Mär '19, 22:39)
cis
@cis Wieso den Ohgottogott? Lass dich von dem
(16 Mär '19, 22:52)
Skillmon
|