Como explicado em outra resposta (Repetir um comando n vezes) explains, o TeX não foi explicitamente criado para operações de programação “regulares”. Por isso, temos que recorrer a truques arcanos para fazer a tarefa aparentemente simples de repetir uma operação. Essa resposta trata da repetição de uma operação para cada um dos objetos de determinado conjuntos.
O pacote etoolbox fornece iteração em uma lista de itens separados por vírgulas, em seus comandos \docsvlist
e
\forcsvlist
; eles estão bem descritos na documentação do pacote. O pacote datatool gerencia “bancos de dados” (de sua própria definição), e você pode fazer iteração sobre entradas de um desses bancos de dados usando o comando \DTLforeach
.
O pacote forarray define suas próprias estruturas de “lista” e “série”, junto com comandos \ForEach
e \ForArray
, que permitem que um comando seja executado para cada elemento de uma lista ou série, respectivamente.
O dowith define duas macros, \DoWith
e
\StopDoing
, que processam cada “coisa” entre elas; um exemplo trivial de uso é:
que produz saída terminal:\usepackage{dowith} ... \begin{document} \newcommand{\foo}[1]{\message{#1+} \DoWith\foo a{BBB}c\StopDoing
Assim, as macros encontraram 3 “coisas”, incluindo uma com chaves em torno dela. (Os espaços interpostos vêm do comando primitivoa+ BBB+ c+
\message
.)
A única restrição é que todos os comandos incluídos sejam “expansíveis” (o que significa, por exemplo, que você não pode usar comandos com argumentos opcionais).
Do mesmo grupo (que o dowith), vem o pacote
commado, que fornece comandos \DoWithCSL
(aplica um comando a cada elemento de uma lista de variáveis separadas por vírgula) e
\DoWithBasesExts
(aplica um comando a cada um dos arquivos de um conjunto, definidos por nome e “extensão”). O uso destas macros \DoWith*
também é expansível (se o comando aplicado aos elementos da lista for expansível).
This answer last edited: 2013-02-20
This question on the Web: http://latex.net.br/faq/FAQ-repeat-set.html
Do you have any question? Ask on: latex.net.br - we love qood questions!