Comprimento de uma lista como função pgfmath
Oct 29 2020
Eu li este tópico, mas gostaria de ter uma função pgfmath que forneça o comprimento de uma lista como \def\mylist{1,2,3,5,7}, porque preciso do valor para alguns cálculos posteriores.
O seguinte não funciona corretamente.
Recebo uma resposta: 112357
deveria ser:5
O que eu tenho que fazer?
\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}
Respostas
3 egreg Oct 28 2020 at 23:57
Observe que as matrizes de PGF devem ter um conjunto adicional de chaves: com
\def\myarray{{1,2,3}}
\pgfmathparse{dim{\myarray}}
você obtém 3 armazenados em \pgfmathresult.
Você pode acessar o n item de -ésimo por
\pgfmathparse{\myarray[n]}
que lojas em \pgfmathresulto n item de -ésimo. Lembre-se de que a indexação começa em 0.
Exemplo completo:
\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}
Você vê isso dim(...)ou dim{...}são equivalentes, mas as chaves ao redor da matriz são necessárias de qualquer maneira.
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
Christopher Nolan uma vez se arrependeu de ter lido o 'roteiro de Pulp Fiction' de Quentin Tarantino