# [bash] script pour LaTeX : tab2tex.sh

## swilmet

Salut à tous !

J'ai écris il y a quelques temps un script bash pour se simplifier la vie en LaTeX, il y a assez de commentaires je pense pour savoir de quoi il s'agit :

```

#!/bin/bash

# tab2tex.sh

# auteur : Sébastien Wilmet

# Fait plusieurs opérations pour faciliter le passage d'un document écrit avec

# un tableur (OOo Calc, Excell, ...) à LaTeX.

# Il faut d'abord faire un copier/coller du tableur dans un simple fichier texte.

# Les colonnes sont alors séparées par des tabulations normalement. Si ce n'est

# pas le cas, le script ne fonctionnera pas.

# traite le fichier passé en argument, lit l'entrée standard si pas d'argument

# ajoute & entre chaque colonne et \\ après chaque ligne

# option -l : rajoute \hline (ligne horizontale) entre chaque ligne

# option -c : appliquer une commande à la première colonne (mettre en gras p. ex)

#    exemple : tab2tex -l -c textbf sample

usage="Usage : $0 [-l] [-c commande] [nomfichier]"

option_c=0

while getopts ":lc:" opt; do

   case $opt in

      l )

         hline=' \\hline'

         ;;

      c )

         option_c=1

         commande=$OPTARG

         ;;

      \?)

         echo $usage

         exit 1

         ;;

   esac

done

shift $(($OPTIND - 1))

nomfichier=$1

# 1) & entre chaque colonne

# 2) \\ après chaque ligne

# 3) si option -l, ajoute \hline après chaque ligne

# Si option c

if [ "$option_c" -eq 1 ]; then

   sed -e "s/^[^\t]*/\\\\$commande\{&\}/" \

   -e 's/\t/\t \& /g' -e 's/^.*$/& \\\\/' -e "s/^.*$/&$hline/" $nomfichier

   exit $?

fi

sed -e 's/\t/\t \& /g' -e 's/^.*$/& \\\\/' -e "s/^.*$/&$hline/" $nomfichier

```

J'ai une petite question, comment faire pour ne pas dupliquer le code à la fin, il y a une partie en commun dans les 2 commandes sed.

Toute suggestion d'amélioration est aussi le bienvenu  :Smile: Last edited by swilmet on Thu Feb 05, 2009 12:02 pm; edited 1 time in total

----------

## VIKING

Salut,

je ne peux pas tester mais à priori tu doit pouvoir utiliser une variable genre : 

```
cmd=`-e 's/\t/\t \& /g' -e 's/^.*$/& \\\\/' -e "s/^.*$/&$hline/" $nomfichier `
```

puis :

```
sed -e "s/^[^\t]*/\\\\$commande\{&\}/" \

   $cmd

   exit $?

fi

sed $cmd
```

par contre je ne sais jamais si faut utiliser des espaces ou non avec le = et si c'est des ' ou " ou ` pour une commande. 

Si tu as le courage peut être que avec du perl se serais plus simple . . . ^^"

----------

## geekounet

#!/usr/bin/env bash au lieu de #!/bin/bash c'est mieux pour la portabilité  :Wink: 

Sinon, ça te dit que je déplace ce topic dans Documentations, Astuces et Scripts ? Il sera plus facilement retrouvable.  :Smile: 

----------

## xaviermiller

Ou utiliser une function  :Wink: 

----------

## swilmet

@VIKING : merci je vais tester ça quand j'aurai un peu de temps.

@geekounet : oui c'est une bonne idée de le déplacer.

@XavierMiller : de tête je sais plus trop comment ça fonctionne, mais je jetterai un coup d'œil une fois.

Sinon ça vous intéresse un aide-mémoire LaTeX ?

J'en ai diffusé un dans mon école d'ingé, la particularité c'est que je fournis les fichiers *.tex où j'ai mis plein de commentaires pour tout expliquer.

----------

## geekounet

Ok j'ai déplacé le topic.  :Smile: 

----------

## swilmet

 *VIKING wrote:*   

> Salut,
> 
> je ne peux pas tester mais à priori tu doit pouvoir utiliser une variable genre : 
> 
> ```
> ...

 

J'ai essayé toutes les possibilités (` ' et ") mais aucune ne marche.

J'ai peut-être une autre solution, c'est d'utiliser des variables comme pour hline. Si les variables sont vides ça ne fait pas de changement.

Si je galère avec ça j'essaye une fonction.

----------

## yoyo

Bonjour,

Je voulais juste vous faire part d'un greffon pour OOocalc : calc2latex issue d'une macro : http://calc2latex.sourceforge.net/.

Je ne sais pas s'il fonctionne correctement ni s'il est OS-indépendant mais ça peut être utile à d'autres.

Enjoy !

----------

## swilmet

Le greffon fonctionne chez moi, pourtant il est écrit "Operating System: Windows".

Enfin tant mieux, je ne connaissais pas  :Smile: 

----------

## truc

Bon, j'avais fait une pure reponse detaillee, mais je ne sais pour quelle raison le navigateur a quitte inopinement... SUPER...

Bref, en gros, j'parlais de gnused, et d'autres dont je ne connais pas forcement le nom, tu peux faire ca (la je parle des ; pour separer les commandes, mais regarde egalement comment on peut inserer des variables sans deubeulequoter tout le bouzin):

```
sed -e "s/^[^\t]*/\\\\$commande\{&\}/" \

   -e 's/\t/\t \& /g' -e 's/^.*$/& \\\\/' -e "s/^.*$/&$hline/" $nomfichier

```

=>

```
sed 's/^[^\t]*/\\\'"$commande"'\{&\}/ ;

   s/\t/\t \& /g ;

   s/^.*$/& \\\\/ ;

   s/^.*$/&'"$hline"'/' $nomfichier

```

En se basant sur ca tu pourrais trs bien imaginer que ton sed s'ecrive comme suit:

```
sed "$conditionnal_cmd"'

   s/\t/\t \& /g ;

   s/^.*$/& \\\\/ ;

   s/^.*$/&'"$hline"'/' $nomfichier

```

avec $conditionnal_cmd qui peut, ou non, valoir 

```
s/^[^\t]*/\\\'"$commande"'\{&\}/' ;
```

, enfin a quelques choses pres, j'n'ai rien verifie, et avec Latex, il est fort possible que quelques antislash me fassent un peu la gueule...

plus plus

----------

