Question

Y at-il des tableaux dans LATEX? Je ne veux pas dire la voie à imprimer des matrices. Je veux dire des tableaux comme la structure de données LATEX / TeX comme un « langage de programmation ». Je dois stocker un certain nombre de Vbox-es ou hbox-es dans un tableau. Il peut être quelque chose comme « un ensemble de macros ».

Plus de détails: J'ai un environnement qui devrait composer des chansons. Je dois stocker certains paragraphes de chansons donnés comme arguments à ma macro \ songparagraph (donc je ne les typeset, juste stocker ces paragraphes). Comme je ne sais pas combien de paragraphes peut être une chanson en particulier je besoin d'un tableau pour cela. Lorsque l'environnement est fermé, tous les paragraphes seront typeset - mais ils seront tout d'abord mesuré et le meilleur placement pour chaque paragraphe sera calculée (par exemple, certains paragraphes peuvent être mis un côté l'autre dans deux colonnes pour faire le look de la chanson plus compact et économiser de l'espace).

Toutes les idées seront les bienvenues. S'il vous plaît, si vous connaissez des tableaux dans LATEX, poster un lien vers une documentation de base, tutoriel ou tout simplement les commandes de base état.

Était-ce utile?

La solution

Consultez Arrayjob qui met en œuvre des tableaux pour LaTeX. Il est vrai que je ne l'ai jeté un œil à elle, donc je ne sais pas comment il sera l'efficacité. Mais, si vous n'avez pas écrire vous-même ...

Autres conseils

est un tableau comment il pourrait être mis en œuvre en LaTeX:

\documentclass{article}
\begin{document}

\newcounter{mycounter}
\setcounter{mycounter}{1}

% ary is any prefix you want, it should not exist as a command.

\expandafter\newcommand\csname ary\the\value{mycounter} \endcsname{myfirstelement}
\stepcounter{mycounter}
\expandafter\newcommand\csname ary\the\value{mycounter} \endcsname{mysecondelement}

\csname ary1 \endcsname

or

\newcounter{index}
\setcounter{index}{2}

\csname ary\the\value{index} \endcsname

\end{document}

Exécuter ce LaTeX (mydoc.tex de latex ou pdflatex mydoc.tex) et vous voyez la sortie.

Une brève explication: cela crée deux commandes (avec newcommand): ary1 et ary2. Le \expandafter est nécessaire parce que newcommand ne doit pas définir \csname mais la commande créée par \csname ... \endcsname. \expandafterjumps sur le jeton suivant, dans ce cas, la séquence de contrôle \newcommand et exécute la commande suivante avant TeX voit le \newcommand. Cela signifie que, la première chose dans les newcommand lignes TeX voit est la construction \csname ... \endcsname, TeX exécute et exécute ensuite \newcommand avec le résultat de la construction \csname ... \endcsname. \csname foo\endcsname est le même que \foo, mais vous pouvez utiliser des espaces de caractères ou même dans la commande créée par \csname ... \endcsname.

Ce n'est pas trivial. Voir le grand livre "TeX par thème" de Victor Eijkhout: http://eijkhout.net/texbytopic/texbytopic. html

luatex a des tables de Lua, qui généralisent les tableaux. Si avoir latex standard n'est pas important pour vous, pensez à utiliser luatex avec latex. Vous pouvez alors faire des choses telles que:

\def\lookup#1{\directlua {
    local array={1,2,4,8}; tex.print(array[#1])}}
\[ 2 \mapsto \lookup{2} \]

luatex est un peu squameuse de latex avec, en raison de la nécessité d'échapper à toutes sortes de caractères Lua dans le code latex. Contexte a des macros \startluacode ... \stopluacode pour gérer les définitions de code Lua et \ctxlua pour les appels de code Lua, et je ne vois aucune raison pour laquelle quelque chose comme ceux-ci ne pouvait pas être défini pour le latex.

pgfkeys et pgffor pourraient aussi travailler pour vous. Ils font partie du PGF package (format graphique portable), mais ils peuvent être utilisés indépendamment de tout les choses graphiques.

Pour développer la réponse de Patrick, la réponse est « Non ». Cependant, comme il a l'expansion macro, il peut être programmé pour avoir des tableaux.

Voici un autre exemple, celui-ci en utilisant pour pousser et pop « tableaux ». Lorsque \type@pushcolour est appelé, il enregistre la couleur actuelle sur la pile. \type@popcolour prend la définition de couleur supérieure, et l'utilise:

\newcount\type@count
\def\type@pushcolour{%
  \xglobal\colorlet{foo\the\type@count}{.}%
\global\advance\type@count by1\relax}
\def\type@popcolour{%
  \global\advance\type@count by-1\relax%
\color{foo\the\type@count}}

(I a adapté ce code à partir de la source du paquet beamer)

Vous pourriez aussi regarder quelque chose comme le paquet Datatool ou le système de programmation expl3, et le type de données « liste de propriétés ».

Le paquet ReadArray permet une mise en forme de données d'entrée en éléments d'une matrice 2-D ou 3-D (ou un ensemble de fichiers-disque 1-D).

\documentclass{standalone}
\usepackage{readarray}

\def\data{% the data
1 15 14 4
10 11 8 5
7 6 9 12
16 2 3 13
}
\readarray\data\dataA[4,4] %read the data to \dataA

\begin{document}
value at (2,1) = \dataA[2,1] %access a specific field
\end{document}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top