Como quebrar o limite de 9 argumentos

Se você pensar bem, perceberá que a sintaxe de definição de comando de Knuth:

\def\blah#1#2 ... #9{}
está intrinsecamente limitada a apenas 9 argumentos. Não há uma maneira direto para contornar isso: como você poderia expressar um 10th argumento? — e garantir que a sintaxe não engula algum outro uso válido?

Se você realmente tem que ter mais de 9 argumentos, o caminho a ser seguido é:

\def\blah#1#2 ... #9{%
  \def\ArgI{{#1}}%
  \def\ArgII{{#2}}%
  ...
  \def\ArgIX{{#9}}%
  \BlahRelay
}
\def\BlahRelay#1#2#3{%
  % arguments 1-9 are now in
  %   \ArgI-\ArgIX
  % arguments 10-12 are in
  %   #1-#3
  %
}
Esta técnica é facilmente extensível por pianistas de concerto do teclado do TeX, mas é muito difícil de ser recomendada.

Os usuários do LaTeX têm a pequena conveniência de simplesmente fornecer vários argumentos no \newcommand que define cada parte do mecanismo de substituição: a restrição de Knuth se aplica ao \newcommand da mesma forma que se aplica ao \def. No entanto, os usuários do LaTeX também têm uma saída dessa bárbara sintaxe de comando: o pacote keyval. com o keyval, e um pouco de programação, podem-se escrever comandos bem sofisticados, cuja invocação pode ser parecida com:

\flowerinstance{species=Primula veris,
  family=Primulaceae,
  location=Coldham's Common,
  locationtype=Common grazing land,
  date=1995/04/24,
  numplants=50,
  soiltype=alkaline
}
O mérito de tal verbosidade é que ela é autoexplicativa: o digitador não precisa se lembrar de que o argumento doze é o |tipo de solo|, e assim por diante: os comandos podem ser copiados de anotações de campo com rapidez e precisão.
keyval.sty
Distributed as part of graphics

* faq-mac-prog.tex (q-keyval): tweak words about getoptk


Do you have any question? Ask on: latex.net.br - we love qood questions!