Re: Array in TeX

#21333
Up
0
Down
::

Ciao Enrico,
grazie della segnalazione. Il pacchetto arrayjob mi sembra un ottimo riferimento, ricco di esempi.

Se però hai bisogno di meno, ecco qui una roba semplice. Ammettiamo che tu abbia salvato la tua lista con
`\newcommand{\mylist}{aaa,bbb,ccc,ddd,eee}`
Per estrarre il terzo campo della lista puoi scrivere \extract{\mylist}{3}, dove la definizione di \extract è la seguente:
`\makeatletter
\newcommand{\extract}[2]{{%
\count@=\z@
\@for\next:=#1\do
{\advance\count@\@ne
\ifnum#2=\count@ \expandafter\ignorespaces\next\unskip\fi}%
}}
\makeatother`
Uso due graffe per tenere locali i cambiamenti al valore di \count@ che è un registro numerico temporaneo che azzero. La macro \@for è quella del nucleo di LaTeX che gestisce proprio le liste di stringhe separate da virgole. Dopo \@for va il nome di un comando temporaneo (\next va benissimo); poi :=, poi il nome di una macro la cui espansione sia una lista; poi \do; poi una lista di token da eseguire per ogni elemento della lista, qui \next si espande proprio come la stringa che si sta esaminando in quel momento.

La lista di token è: avanza il contatore di 1 e confronta il suo valore con il secondo argomento di \extract (il primo è il nome della lista): se sono uguali, stampa la stringa, eliminando eventuali spazi prima e dopo.

Ci sono limitazioni: se la lista contiene 5 elementi e si scrive \extract{\mylist}{6} (o un numero maggiore), non succede nulla.

Ciao
Enrico

Go to top