Le package Tableaux offre des procédures pour afficher des tableaux.

Pour avoir accès au package :

<<Tableaux`

Fonctions disponibles :

Names["Tableaux`*"]

Afficher un tableau vertical (sans en-têtes de lignes)

Lorsqu'il remplace la liste des en-têtes de lignes, l'argument None signifie que les lignes n'ont pas d'en-têtes.

afficheTableau[None,{"a","b","c","d"},{{1,2,3,4},{5,6,7,8},{9,10,11,12}}]

Afficher un tableau horizontal (sans en-têtes de colonnes)

Lorsqu'il remplace la liste des en-têtes de colonnes, l'argument None signifie que les colonnes n'ont pas d'en-têtes.

afficheTableau[{"a","b","c"},None,{{1,2,3,4},{5,6,7,8},{9,10,11,12}}]

Afficher un tableau avec en-têtes de lignes et de colonnes

?afficheTableau

afficheTableau[Range[3],{"A","B","C","D"},{{11,12,13,14},{21,22,23,24},{31,32,33,34}}]

Il faut donner dans l'ordre
	la liste des en-têtes de lignes 		{(Subscript[l, 1]), (Subscript[l, 2]), ..., (Subscript[l, m])}
	la liste des en-têtes de colonnes	{(Subscript[c, 1]), (Subscript[c, 2]), ..., (Subscript[c, n])}
	le tableau bidimensionnel		{{(Subscript[t, 11]), ..., (Subscript[t, 1n])}, {(Subscript[t, 21]), ..., (Subscript[t, 2n])}, ..., {(Subscript[t, m1]), ..., (Subscript[t, mn])}}

Tableau avec en-têtes de lignes et de colonnes et qui porte un titre

Il est possible de donner un titre au tableau, dans la cellule supérieure gauche

?afficheTableauTitre

afficheTableauTitre["Tableau",Range[3],{"A","B","C","D"},{{11,12,13,14},{21,22,23,24},{31,32,33,34}}]

Formatage des nombres réels et arrondis

Une fonction à un argument peut être passé comme quatrième paramètre optionnel pour définir un format numérique
	N,
	EngineeringForm
	ScientificForm,
	AccountingForm

afficheTableau[Range[1,2],{"A","B","C"},{{N[π],45,56789},{0.000545,123458.,987.12}},EngineeringForm]

afficheTableau[Range[1,2],{"A","B","C"},{{N[π],45,56789},{0.0545,12345.,987.12}},ScientificForm]

afficheTableau[Range[1,2],{"A","B","C"},{{N[π],45,56789},{0.0545,12345.,987.12}},AccountingForm]

L'utilisateur peut définir sa propre fonction de formatage.
Voici quelques exemples où on utilise les commandes Mathematica N et PaddedForm :

Clear[form];form[v_]:=N[v,4];
x=Range[9];y=(Sqrt[x]);
afficheTableau[{"x","(Sqrt[x])"},None,{x,y},form]

Clear[form];form[v_]:=PaddedForm[N[v],{5,4}];
x=Range[9];y=(Sqrt[x]);
afficheTableau[None,{"x","(Sqrt[x])"},Transpose[{x,y}],form]

On peut aussi utiliser la fonction "arrondis[x, f]" de "Tableaux" :

?arrondis

Clear[form];form[v_]:=arrondis[v,0.0025]
x=Range[9];y=(Sqrt[x]);
afficheTableau[{"x","(Sqrt[x])"},None,{x,y},form]

Il est possible de donner une liste de formats.
A l'exception du cas où le tableau est horizontal, c'est à chaque colonne du tableau que correspond une fonction de formatage. Il faut que le nombre de formats soit ≥ au nombre de colonnes.

afficheTableau[Range[1,2],{"A","B","C"},{{π,45,56789},{0.0545,12345.,987.12}},{N,EngineeringForm,ScientificForm}]

Le format Identity n'a aucun effet.

Clear[form];form[v_]:=PaddedForm[N[v],{5,4}];
x=Range[9];y=(Sqrt[x]);
afficheTableau[None,{"x","(Sqrt[x])"},Transpose[{x,y}],{Identity,form}]

Dans le cas particulier où le tableau est horizontal (c'est-à-dire si on donne les en-têtes des lignes mais pas celles des colonnes), c'est à chaque ligne que correspond chaque format:

Clear[form];form[v_]:=PaddedForm[N[v],{5,4}];
x=Range[9];y=(Sqrt[x]);
afficheTableau[{"x","(Sqrt[x])"},None,{x,y},{Identity,form}]

Afficher un tableau tourné d'un quart de tour

?tableauGraph

tableauGraph[{{"Lundi",12},{"Mardi",13},{"Mercredi",14}}];

t={{96,101325,143263},{801098,5000,148},{92703,172,153153},{474395,112673,18310},{77,116665,163620},{513,10799,169050},{75,125046,174644},{935453,19403,78},{9864,133912,75},{757,8511,192335}}

formatNum[nbChiffres_,niveau_][v_]:=Map[PaddedForm[#,nbChiffres]&,v,{niveau}]

tableauGraph[Range[0,9],{a,b,c},formatNum[6,2][t]];

Afficher un tableau transposé (échanger lignes-colonnes)

Si on veut échanger les lignes et et colonnes, il faut
	intervertir les en-têtes des lignes et les en-têtes des colonnes et
	transposer le tableau

afficheTableau[{"A","B","C","D"},Range[3],Transpose[{{11,12,13,14},{21,22,23,24},{31,32,33,34}}]]

Fusion de tableaux, tableaux emboîtés

a={{11,12,13},{24,25,26}};TableForm[a]

b={{31,32,33},{44,45,46}};TableForm[b]

c={{51,52,53},{64,65,66}};TableForm[c]

fusionneLignes[a, b, ...]  assemble a, b, ... en un seul tableau où a, b, ... sont disposés côte à côte, horizontalement, de gauche à droite.
fusionneLignes[a, b, ...]  nécessite que les tableaux a, b, ... aient le même nombre de lignes.

afficheTableau[None,None,fusionneLignes[a,b,c]]

fusionneColonne[a, b, ...] assemble a, b, ... en un seul tableau où a, b, sont disposés l'un au-dessous de l'autre, de haut en bas, verticalement.
fusionneColonnes[a, b, ...]  nécessite que les tableaux a, b, ... aient le même nombre de colonnes.

afficheTableau[None,None,fusionneColonnes[a,b,c]]

Produit cartésien de deux tableaux

?prodCart

?prodCartTrans

a=Transpose[{{"lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"}}];

b=Transpose[{{"matin","midi","soir"}}];

prodCart[a,b]

a=Table[10 i+j,{i,3},{j,2}]

b=Table[100 i+10j,{i,2},{j,4}]

prodCart[a,b]//TableForm

prodCartTrans[a,b]//TableForm

Tableaux emboîtés

Chaque cellule du tableau afficheTableau peut être un tableau, rectangulaire ou non.

afficheTableau[{"a","b","c"},None,{{1,{{21,22}},3,4},{5,6,{{71},{{{721,722}}}},8},{9,10,11,12}}]

afficheTableau[None,{"a",{{"b1","b2"}},{{"c1"},{{{"c2","c3"}}}},"d"},{{1,{{21,22}},3,4},{5,6,{{71},{{{721,722}}}},8},{9,10,11,12}}]

afficheTableauTitre[{{"Type →"},{"Numéro ↓"}},Range[3],{"A","B","C","D"},{{11,12,13,14},{21,22,23,24},{31,32,33,34}}]

Voici deux tableaux afficheTableau imbriqués

at=afficheTableau[None,{2001,2002,2001},{{11,12,13},{21,22,23}}]

afficheTableau[{"a","b","c"},None,{{1,2,3,4},{5,at,7,8},{9,10,11,12}}]

Compatibilité avec TableForm

Chaque cellule du tableau afficheTableau peut être un tableau TableForm

a=TableForm[{{"N°"},{"1"}}]

b=TableForm[{{"N°"},{"1"},{bis}}]

c=TableForm[{{"N°"},{"2"}}]

afficheTableau[None,{a,b,c},{{2,3,4},{5,7,8},{10,11,12}}]

titre=TableForm[{{"","Type"},{"Numéro",""}}]

afficheTableauTitre[titre,Range[3],{"A","B","C","D"},{{11,12,13,14},{21,22,23,24},{31,32,33,34}}]

tf=TableForm[Table[13*i+j,{i,3},{j,5}],TableSpacing->{1,2}]

afficheTableau[{"a","b","c"},None,{{1,2,3,4},{5,tf,7,8},{9,10,11,12}}]

Chaque cellule du tableau TableForm peut être un tableau  afficheTableau

t1=afficheTableau[{"a","b","c"},None,{{1,2,3,4},{5,6,7,8},{9,10,11,12}}];
t2=afficheTableau[None,{"w","x","y","z"},{{1,2,,4},{5,6,7,8},{9,10,,12}}];
TableForm[{{t1,t2}}]

Correction des erreurs

afficheTableau[{"A","B","C","D"},Range[3],{{11,12,13,14},{21,22,23,24},{31,32,33,34}}]

Ce genre de message survient dans les cas suivants
	le nombre d'en-têtes de lignes n'est pas égal au nombre de lignes du tableau ou
	le nombre d'en-têtes de colonnes n'est pas égal au nombre de colonnes du tableau ou
	le tableau n'est pas rectangulaire.
Si on peut afficher le tableau sans en-têtes

afficheTableau[None,None,{{11,12,13,14},{21,22,23,24},{31,32,33,34}}]

cela signifie qu'il est rectangulaire et que le problème vient du nombre d'en-têtes de lignes ou du nombre d'en-têtes de colonnes.
On peut observer qu'il y a 3 lignes et 4 colonnes, ce qui permet de rectifier

afficheTableau[Range[3],{"A","B","C","D"},{{11,12,13,14},{21,22,23,24},{31,32,33,34}}]

Par contre, si le tableau sans en-têtes ne s'affiche pas, c'est qu'il n'est pas rectangulaire

afficheTableau[None,None,{{11,12,13,14},{21,23,24},{31,32,33,34}}]

En effet, alors que les lignes 1 et 3 sont formée de 4 éléments, la ligne 2 ne possède que 3 éléments. Il est cependant possible de laisser une cellule vide

afficheTableau[None,None,{{11,12,13,14},{21,,23,24},{31,32,33,34}}]