Länge einer Liste als pgfmath-Funktion
Ich habe diesen Thread gelesen , möchte aber eine pgfmath-Funktion haben, die die Länge einer Liste angibt \def\mylist{1,2,3,5,7}, da ich den Wert für einige spätere Berechnungen benötige.
Folgendes funktioniert nicht richtig.
Ich bekomme eine Ausgabe: 112357
Es sollte sein:5
Was muss ich tun?
\documentclass[a4paper]{article}
\usepackage{tikz}
\begin{document}
\makeatletter
\pgfmathdeclarefunction{Len}{1}{%
\begingroup
\def\templist{#1}
\foreach[count=\mycount] \i in \templist { \xdef\Len{\mycount} }%
\Len%
\endgroup
}
\makeatother
\def\mylist{1,2,3,5,7}
\pgfmathparse{Len(\mylist)}\pgfmathresult
\end{document}
Antworten
Beachten Sie, dass PGF-Arrays einen zusätzlichen Satz von Klammern haben sollten: mit
\def\myarray{{1,2,3}}
\pgfmathparse{dim{\myarray}}
Sie erhalten 3 gespeichert in \pgfmathresult.
Sie können auf das n- te Element zugreifen , indem Sie
\pgfmathparse{\myarray[n]}
die Geschäfte in \pgfmathresultdem n - ten Elemente. Denken Sie daran, dass die Indizierung bei 0 beginnt.
Vollständiges Beispiel:
\documentclass{article}
\usepackage{pgfmath}
\newcommand{\myarray}{{640,231,100,91,1003}}
\begin{document}
\pgfmathparse{dim{\myarray}}\pgfmathresult: should be 5
\pgfmathparse{\myarray[4]}\pgfmathresult: should be 1003
\pgfmathparse{dim({640,231,100,91,1003})}\pgfmathresult: should be 5
\pgfmathparse{dim{{640,231,100,91,1003}}}\pgfmathresult: should be 5
\end{document}
Sie sehen das dim(...)oder dim{...}sind gleichwertig, aber die geschweiften Klammern um das Array werden trotzdem benötigt.