Multido et tableau

Tout ce qui concerne l'utilisation ou l'installation de LaTeX.

Modérateur: gdm_tex

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

Multido et tableau

Messagepar Jefferson » Lundi 30 Avril 2007, 18:32

Bonjour,

Je souhaite créer un tableau dont le paramètre "colonne" est variable et la première ligne est donnée par une boucle (\multido).

Le soucis, c'est que lorsque je rentre ma première ligne il me renvoit une floppée d'erreur. A priori, le soucis viendrait du caractère &.

Voici mon code ... :

Code: Tout sélectionner
...
\begin{tabular}{|c|*{\b}{c|}} \hline
$x$ \multido{\n=#1+#3}{\b}{& $\n$} \\ \hline
\end{tabular}
...


Si quelqu'un a une idée, ce serait bien aimable !
Merci d'avance

[Edit: MB] Utilisation des balises Code.
Dernière édition par Jefferson le Lundi 30 Avril 2007, 18:39, édité 1 fois.
Jefferson
Déca-utilisateur
 
Messages: 10
Inscription: Lundi 30 Avril 2007, 18:25
Localisation: Chambéry

Publicité

Messagepar rebouxo » Lundi 30 Avril 2007, 20:40

C'est quoi le \b qui traine ?
Cela si je comprend bien ce que tu veux faire c'est créé un tableau à l'aide d'une boucle. Je crains que cela ne soit pas possible directement. En passant par un dichier annexe, je pense que c'est possible, mais cela nécessitera deux compilations. Mais directement j'ai des doutes.

Gigair tu confirmes ou pas ce que je dis ?

Olivier
rebouxo
Modérateur
 
Messages: 6860
Inscription: Mercredi 15 Février 2006, 13:18
Localisation: le havre
Statut actuel: Actif et salarié | Enseignant

Messagepar Jefferson » Lundi 30 Avril 2007, 21:37

Le \b vient d'un calcul précédent via le paquet fp, c'est lui qui donne le nombre de colonnes.
Jefferson
Déca-utilisateur
 
Messages: 10
Inscription: Lundi 30 Avril 2007, 18:25
Localisation: Chambéry

Messagepar gigiair » Lundi 30 Avril 2007, 23:09

rebouxo a écrit:C'est quoi le \b qui traine ?
Cela si je comprend bien ce que tu veux faire c'est créé un tableau à l'aide d'une boucle. Je crains que cela ne soit pas possible directement. En passant par un dichier annexe, je pense que c'est possible, mais cela nécessitera deux compilations. Mais directement j'ai des doutes.

Gigair tu confirmes ou pas ce que je dis ?

Je ne sais pas, ceci dépasse largement mes compétences.
J'ai testé un peu, il est possible d'utiliser des variables dans le descriptif des tabular, et de remplir le tableau avec des multido.
Un petit coup de google: tabular multido fournit des pistes intéressantes.
Comme le fait remarquer J. Noirel «C'est compliqué parce que les tableaux sont vraiment un élément difficile de TeX»

Déjà, avant de régler le problème du tabular et du multido, il me semble qu'on ne peut pas passer des variables de fp dans le descriptif d'un tabular comme ça.
Les variables de fp sont des «décimaux» et les valeurs demandées dans le descriptif du tabular sont des «entiers».
Il faut faire un "transtypage" pour s'assurer que la valeur \b est bien un entier au sens informatique du terme .
Autre difficulté :
fp est incompatible avec multido, voir le fil sur le package animate.
La doc de fp explique comment résoudre cette difficulté (la doc de fp se nomme readme.fp).
JJR.
LaTeXien migrateur.
gigiair
Exa-utilisateur
 
Messages: 2348
Inscription: Samedi 08 Juillet 2006, 19:56
Localisation: Saint Bonnet Elvert
Statut actuel: Actif et salarié

Messagepar Jefferson » Mardi 01 Mai 2007, 07:37

Merci pour la réponse !

En ce qui concerne les variables, un petit \FPtrunc\x\x0 permet de tronquer le résultat du calcul histoire d'en faire un entier donc pas de soucis de ce côté là. J'ai testé sans multido, ça marche.

Pour le multido et fp, j'ai vu en effet le problème mais là également pas de soucis, il comprend mon code sans le tableau (test réussi).

Je vais tester une piste via google.

Merci en tout cas !
Jefferson
Déca-utilisateur
 
Messages: 10
Inscription: Lundi 30 Avril 2007, 18:25
Localisation: Chambéry

Messagepar gigiair » Mardi 01 Mai 2007, 17:13

Bon courage.Je ne sais pas exactement ce que tu veux faire, mais si le projet est un tant soit peu compliqué à mettre en œuvre en LaTeX, pourquoi ne pas envisager un module externe appelé par write18 ? C'est à la portée de n'importe quel programmeur moyen. LaTeX utilise des tas de fichiers auxiliaires pour fonctionner, alors un de plus ou un de moins, ce n'est pas ça qui le rendra moins efficace.
En tout cas, ça me paraît plus simple que d'acquérir l'expertise nécessaire à la réalisation de programmes non triviaux.
JJR.
LaTeXien migrateur.
gigiair
Exa-utilisateur
 
Messages: 2348
Inscription: Samedi 08 Juillet 2006, 19:56
Localisation: Saint Bonnet Elvert
Statut actuel: Actif et salarié

Messagepar Jefferson » Mardi 01 Mai 2007, 17:50

Write 18 ??? Je ne connais pas !!

L'idée était en fait de faire la 1ere ligne d'un tableau de valeur en rentrant simplement la 1ere valeur, la dernière et le pas ...!

Mieux de rentrer la fonction et d'obtenir directement les valeurs via fp, mais je ne sais pas si (La)Tex gère les listes !

Cela est clairement au-dessus de mes moyens !

Merci d'avoir consacrer du temps ! :wink:
Jefferson
Déca-utilisateur
 
Messages: 10
Inscription: Lundi 30 Avril 2007, 18:25
Localisation: Chambéry

Messagepar gigiair » Mardi 01 Mai 2007, 22:54

Sauf si c'est vraiment pour faire un tableau de valeurs, le plus simple est d'utiliser un tableur, et ses fonctions d'édition de texte:
Par exemple ce tableau :

Code: Tout sélectionner
 +-----+-----+-----+-------------------------------+
 | A   | B   | C   |               D               |
 +-----+-----+-----+-------------------------------+
1|     |     |     |\begin{tabular}{*{4}{c|}}\hline|
 +-----+-----+-----+-------------------------------+
2|1,2  |1,4  |1,6  | 1,2&1,4&1,6 \\\hline          |
 +-----+-----+-----+-------------------------------+
3|1,44 |1,96 |2,56 | 1,44&1,96&2,56 \\\hline       |
 +-----+-----+-----+-------------------------------+
4|     |     |     |  \end{tabular}                |
 +-----+-----+-----+-------------------------------+


est créé par les formules suivantes :

Code: Tout sélectionner
D1=\begin{tabular}{|*{4}{c|}}\hline
A2=1,2 
B2=1,4
C2=1,6
D2= =A2&"&"&B2&"&"&C2&"\\\hline"
A3=A2^2
B3=B2^2
C3=C2^2
D3=A3&"&"&B3&"&"&C3&"\\\hline"
D4=\end{tabular}


Tu fais un copier -coller de la colonne D1..D4 dans ton éditeur et l'affaire est faite.
Tu peux évidemment changer les valeurs en A2..C3 et utiliser les fonctions de recopie du tableur.

Il existe aussi une macro excel2latex, mais je n'aime pas trop le code produit, et c'est moins souple.
JJR.
LaTeXien migrateur.
gigiair
Exa-utilisateur
 
Messages: 2348
Inscription: Samedi 08 Juillet 2006, 19:56
Localisation: Saint Bonnet Elvert
Statut actuel: Actif et salarié

Messagepar Jefferson » Mercredi 02 Mai 2007, 07:16

Ah pas mal ... !! BIen vu, belle idée !

Merci Gigiair .
Jefferson
Déca-utilisateur
 
Messages: 10
Inscription: Lundi 30 Avril 2007, 18:25
Localisation: Chambéry

Messagepar gigiair » Mercredi 02 Mai 2007, 11:04

\write18 est une commande $\TeX$ permettant de faire appel au système d'exploitation. On peut ainsi faire appel à n'importe quel programme externe pour produire un fichier texte à inclure dans un document $\LaTeX$. Il faut toutefois que ce programme puisse fonctionner en mode ligne de commande, c'est une restriction qui s'applique surtout aux applicatifs Ouindoze.
C'est la démarche choisie par Tikz pour tracer des courbes de fonction. Plutôt que de d'implémenter un mécanisme de calculs de valeurs d'une fonction, Tikz fait appel à gnuplot qui est spécialisé dans ce travail. L'économie en terme de développement est évidente.
Il existe une foule de programme qui peuvent produire directement du code $\LaTeX$ auquel on peut faire appel en ligne de commande (un simple texte est déjà du code $\LaTeX$ !).
Il est possible d'écrire un script (perl, python, guile ou autre) qui agit comme une fonction, en prenant un certain nombre de paramètres et qui renvoie un fichier texte que l'on inclut dans le source. Il faut que le jeu en vaille la chandelle. La mise au point d'un script prend pas mal de temps, il faut prévoir tous les cas de figures. De plus, l'interactivité est nulle.
La programmation en $\TeX$ peut également être utilisée, mais l'absence de structures de données complexes et la difficulté à gérer les variables rendent ce travail malaisé.

La méthode que je te propose consiste à faire appel à un programme externe «à la main» et de passer la sortie à l'éditeur. C'est un peu bourrin, mais j'ai géré ma copropriété ainsi pendant quelques années . Les feuilles de répartition des charges étaient toutes prêtes et je n'avais qu'à faire un copier-coller dans mon éditeur favori pour éditer mes appels de fond et mes bilans.
JJR.
LaTeXien migrateur.
gigiair
Exa-utilisateur
 
Messages: 2348
Inscription: Samedi 08 Juillet 2006, 19:56
Localisation: Saint Bonnet Elvert
Statut actuel: Actif et salarié

Messagepar Jefferson » Mercredi 02 Mai 2007, 19:01

Ok ! Tu reponds du coup à une question que je me posais depuis un petit moment :

peut-on introduire un code python par exemple dans LaTeX?

Cela repond donc à ma question ...

Je vais m'y pencher sérieusement dès que j'aurais un peu de temps ... !
Jefferson
Déca-utilisateur
 
Messages: 10
Inscription: Lundi 30 Avril 2007, 18:25
Localisation: Chambéry

Messagepar gigiair » Jeudi 03 Mai 2007, 00:57

On peut maintenir du code python dans le source LaTeX par exemple dans un environnement verbatimawrite qui l'écrira dans un fichier. On peut ensuite faire exécuter le code de ce fichier par un appel par \write18.
J'ai posté sur ce forum (Calculer avec LaTeX )un exemple d'appel à la calculatrice en précision «infinie» bc. Il suffit de s'en inspirer pour réaliser un appel à n'importe quel programme. Remplacer l'appel à bc par un appel à un script python.
JJR.
LaTeXien migrateur.
gigiair
Exa-utilisateur
 
Messages: 2348
Inscription: Samedi 08 Juillet 2006, 19:56
Localisation: Saint Bonnet Elvert
Statut actuel: Actif et salarié

Messagepar Jefferson » Jeudi 03 Mai 2007, 05:12

Encore merci pour l'aide apportée sur ce forum que je vais parcourir régulièrement et tacher de partager mes maigres connaissances sur ce fabuleux langage qu'est Latex !

A bientôt.
Jefferson
Déca-utilisateur
 
Messages: 10
Inscription: Lundi 30 Avril 2007, 18:25
Localisation: Chambéry

Messagepar toufan » Jeudi 03 Mai 2007, 17:06

Jefferson a écrit:Encore merci pour l'aide apportée sur ce forum que je vais parcourir régulièrement et tacher de partager mes maigres connaissances sur ce fabuleux langage qu'est Latex !


Bonjour,

Voici un code qui est fait par Jean-Côme Charpentier

Code: Tout sélectionner
\documentclass[a4paper]{article}
\usepackage{calc}
\usepackage{multido}
\usepackage{array}
\usepackage[T1]{fontenc}

\newcounter{nbC}  % nbC= <i> x <table>

\newcommand{\MulDNB}[3]{%
  % #1 = premier element de la table
  % #2 = table
  % #3 = nombre d'elements
  \def\tabbody{}%
  \multido{\i=#1+1}{#3}{%
    \setcounter{nbC}{\i*#2}%
    \xdef\tabbody{%
      \tabbody
      #2 & \i & \thenbC \tabularnewline
    }%
  }%
$\begin{array}{||l@{\null\times\null}l@{\null=\null}l||}
    \hline
    \tabbody
    \hline
  \end{array}$%
}
\begin{document}
\MulDNB{1}{5}{10}
\end{document}


Toufan
Amateur de LaTeX
toufan
Kilo-utilisateur
 
Messages: 139
Inscription: Mercredi 04 Janvier 2006, 18:09
Localisation: Paris

Messagepar Jefferson » Samedi 05 Mai 2007, 08:06

Merci Toufan pour ce joli code (et tableau) mais ce n'est pas exactement ce que je veux faire ...!

En fait je veux remplir uen première ligne en donnant la 1ere valeur, la dernière et la différence entre deux, mais l'idée de faire le tableau en deux fois est à tester !

A bientôt !
Jefferson
Déca-utilisateur
 
Messages: 10
Inscription: Lundi 30 Avril 2007, 18:25
Localisation: Chambéry


Retourner vers LaTeX

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Ahrefs [Bot], Bing [Bot], DotBot [Crawler], Google [Bot], Grapeshot [Crawler], Proximic [Spider] et 14 invités