Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails)

#1 Le 12/02/2014, à 17:04

Le Goss

[Résolu] Bash - création d'une commande latex

Bonjour à tous,
Je cherche à créer une commande avec plusieurs variables, dons le nombre peut varier:

\def\commande#1#2#3{\quitvmode\vbox{\hbox{\scriptsize\bf\textcolor{red}{#1}}\hbox{\scriptsize\bf\textcolor{blue}{#2}}\hbox{#3}}}

Ça la commande de base. Elle pourrait s'étendre et donner:

\def\commande#1#2#3#4#5#6...{\quitvmode\vbox{\hbox{\scriptsize\bf\textcolor{red}{#1}}\hbox{\scriptsize\bf\textcolor{blue}{#2}}\hbox{#3}\hbox{#4}\hbox{#5}\hbox{#6}...}}

Je ne sais pas dans quelle direction chercher...
Merci pour aide

Dernière modification par Le Goss (Le 17/02/2014, à 12:57)


i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976,0 Go
Ubuntu Studio 14.04
Allergique au wysiwyg; traitement à vie: Lilypond LaTeX txt2tags

Hors ligne

#2 Le 12/02/2014, à 22:36

ares

Re : [Résolu] Bash - création d'une commande latex

Je comprends pas trop le problème ?!?

Sous Latex tu peux créer aussi "tes" commandes (macros).
Tu cherches a obtenir ou faire quoi ?


Signature modifié à la demande de L'Africain
«Quiconque s'agenouille devant Dieu se façonne à se prosterner devant un roi.» (Joseph Joubert / 1754-1824)
Lieux des religions

Hors ligne

#3 Le 15/02/2014, à 15:35

Le Goss

Re : [Résolu] Bash - création d'une commande latex

Je sais bien, mais là n'est pas la question.
Voici le topo...

Je cherche à créer entièrement en bash, des documents latex dans le style des "songbook", saisie des paroles comprises.
C'est-à-dire que je ne doit rien avoir de plus à saisir dans le fichier latex:
1. Lancement du script
2. Création et compilation du fichier latex avec tout ce qu'il faut dedans.
3. Fermeture du script

En plus du nom du fichier, du format papier, des marges, du titre etc. le document doit contenir dans son préambule la commande qui présente les éléments suivant:

1. les différentes indications telles que "al segno", "da capo" etc.

\hbox{\scriptsize\bf\textcolor{red}}{#1}

2. la grille d'accords

\hbox{\scriptsize\bf\textcolor{blue}{#2}}

3. les différents couplets, le nombre variant d'un fichier à l'autre

\hbox{#3}\hbox{#4}\hbox{#5}\hbox{#6}...

où \hbox{#3} correspond au couplet 1 \hbox{#4} au couplet 2 etc.

La difficulté que je rencontre est donc d'écrire en bash le code qui me permettrait d'obtenir la ligne donnée en exemple, et tenant compte du nombre de couplets.
Et j'avoue de je sèche complètement.


i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976,0 Go
Ubuntu Studio 14.04
Allergique au wysiwyg; traitement à vie: Lilypond LaTeX txt2tags

Hors ligne

#4 Le 15/02/2014, à 18:44

ares

Re : [Résolu] Bash - création d'une commande latex

Si j'ai bien compris :

./songbook.sh <ChansonX

Et tu récupères sois un fichier DVI ou PDF !?!

Je ne connais pas les limites du nbr de variables en Basch... regardes ICI (fr)

Bonne chance smile


Signature modifié à la demande de L'Africain
«Quiconque s'agenouille devant Dieu se façonne à se prosterner devant un roi.» (Joseph Joubert / 1754-1824)
Lieux des religions

Hors ligne

#5 Le 15/02/2014, à 19:03

Le Goss

Re : [Résolu] Bash - création d'une commande latex

Quel est le sens de ta commande?


i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976,0 Go
Ubuntu Studio 14.04
Allergique au wysiwyg; traitement à vie: Lilypond LaTeX txt2tags

Hors ligne

#6 Le 15/02/2014, à 19:15

ares

Re : [Résolu] Bash - création d'une commande latex

C'est à dire ton fichier Bash ./songbook.sh et le fichier ChansonX qui après traitement par le script doit donner un pdf (ex :ChansonX.pdf)
Je suppose que ChansonX contient les données.

Désolé je suis pas musicien smile

Dernière modification par ares (Le 15/02/2014, à 19:16)


Signature modifié à la demande de L'Africain
«Quiconque s'agenouille devant Dieu se façonne à se prosterner devant un roi.» (Joseph Joubert / 1754-1824)
Lieux des religions

Hors ligne

#7 Le 15/02/2014, à 19:19

Le Goss

Re : [Résolu] Bash - création d'une commande latex

ares a écrit :

C'est à dire ton fichier Bash ./songbook.sh et le fichier ChansonX qui après traitement par le script doit donner un pdf (ex :ChansonX.pdf)
Je suppose que ChansonX contient les données.

Désolé je suis pas musicien smile

Personne n'est parfait lol
Non, en fait c'est l'inverse: le script bash crée absolument tout.


i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976,0 Go
Ubuntu Studio 14.04
Allergique au wysiwyg; traitement à vie: Lilypond LaTeX txt2tags

Hors ligne

#8 Le 15/02/2014, à 19:23

ares

Re : [Résolu] Bash - création d'une commande latex

Le Goss a écrit :

Personne n'est parfait lol

Si big_smile t'es encore plus fainéant que moi ! big_smile

Question :

\hbox{\scriptsize\bf\textcolor{red}}{#1}

C'est quoi #1 ?!?


Signature modifié à la demande de L'Africain
«Quiconque s'agenouille devant Dieu se façonne à se prosterner devant un roi.» (Joseph Joubert / 1754-1824)
Lieux des religions

Hors ligne

#9 Le 15/02/2014, à 19:28

Le Goss

Re : [Résolu] Bash - création d'une commande latex

C'est le numéro de la variable qu'on retrouve au début de la commande

\def\commande#1#2#3{\quitvmode\vbox{\hbox{\scriptsize\bf\textcolor{red}{#1}}\hbox{\scriptsize\bf\textcolor{blue}{#2}}\hbox{#3}}}

Dans le cas qui m'intéresse, la commande a au minimum 3 variables (s'il y a 1 couplet): #1 #2 et #3


i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976,0 Go
Ubuntu Studio 14.04
Allergique au wysiwyg; traitement à vie: Lilypond LaTeX txt2tags

Hors ligne

#10 Le 15/02/2014, à 19:45

ares

Re : [Résolu] Bash - création d'une commande latex

Bon là je sèche sad

Perso j'utiliserais directement Latex.
Regardes ICI, il me semble que cela répond  à ton problème

Des Macros plus compliquées... c'est pas ce qui manque comme exemples sous Latex (autre exemple)

Désolé si je suis hors sujet.

Bonne chance.


Signature modifié à la demande de L'Africain
«Quiconque s'agenouille devant Dieu se façonne à se prosterner devant un roi.» (Joseph Joubert / 1754-1824)
Lieux des religions

Hors ligne

#11 Le 15/02/2014, à 19:59

Le Goss

Re : [Résolu] Bash - création d'une commande latex

Mon niveau en latex ne va pas jusque là...
J'en suis à une utilisation basique, avec des commandes toutes simples.
La commande latex, je l'ai et elle fonctionne impec.
C'est sa "transcription" en bash qui me pose problème.


i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976,0 Go
Ubuntu Studio 14.04
Allergique au wysiwyg; traitement à vie: Lilypond LaTeX txt2tags

Hors ligne

#12 Le 16/02/2014, à 01:08

nesthib

Re : [Résolu] Bash - création d'une commande latex

function gen_latex {
PART1=$(for ((i=3; i<=$1; i++)) ; do echo -n "#$i" ; done)
PART2=$(for ((i=3; i<=$1; i++)) ; do echo -n "\\hbox{#$i}" ; done)
echo "\def\commande#1#2${PART1}{\quitvmode\vbox{\hbox{\scriptsize\bf\textcolor{red}{#1}}\hbox{\scriptsize\bf\textcolor{blue}{#2}}${PART2}}"
}
gen_latex 5

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

En ligne

#13 Le 17/02/2014, à 12:57

Le Goss

Re : [Résolu] Bash - création d'une commande latex

Ça marche poil !
Dans l'état actuel de mes connaissances en bash, je n'aurais pas pu trouver.
Merci encore !


i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976,0 Go
Ubuntu Studio 14.04
Allergique au wysiwyg; traitement à vie: Lilypond LaTeX txt2tags

Hors ligne

#14 Le 17/02/2014, à 18:21

Le Goss

Re : [Résolu] Bash - création d'une commande latex

Y a un os...
Quand j’insère la formule dans mon script avec un

read -p "Nombre de couplets: " nombrecouplets

la commande

gen_latex $nombrecouplets >> fichier.tex

ne fonctionne pas; la commande latex crée est incomplète:

\def\commande#1#2{\quitvmode\vbox{\hbox{\scriptsize\bf\textcolor{red}{#1}}\hbox{\scriptsize\bf\textcolor{blue}{#2}}}

i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976,0 Go
Ubuntu Studio 14.04
Allergique au wysiwyg; traitement à vie: Lilypond LaTeX txt2tags

Hors ligne

#15 Le 17/02/2014, à 18:55

nesthib

Re : [Résolu] Bash - création d'une commande latex

Dans ton cas, que vaut $nombrecouplets ? Si la valeur est 2 ou moins il n'y a rien de créé, pour avoir #3 il faut que $nombrecouplets vaille 3.
Si tu veux changer ce comportement (avoir #3#4 avec 2 comme argument), remplace « $1 » par « $1+2 » dans les deux boucles for.

NB. on a le droit de voir ton script ?


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

En ligne

#16 Le 17/02/2014, à 19:20

Le Goss

Re : [Résolu] Bash - création d'une commande latex

Voici le cript.

#!/bin/bash

read -p "Nom du fichier (ex: fichier.tex): " nomfichier
read -p "Titre: " titre
read -p "Format du papier (ex: a5): " papier
read -p "Marges en cm (ex: 1.5): " marge
read -p "Accords: " accords
echo $accords >> accords
sed -i 's/!/\n/g' accords
sed -i 's/^/\\commande{\\underline{}}{/' accords
sed -i 's/$/}/' accords
cat	accords >> accordscolonne

read -p "Combien de couplets? " nombrecouplets

echo -e "\documentclass[$papier paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[frenchb]{babel}
\usepackage{graphicx}
\usepackage{setspace}
\usepackage{color}
\usepackage{multicol}
\setlength{\\\columnseprule}{0.5pt}
\setlength{\\\columnsep}{30pt}
\usepackage{geometry}
\geometry{top=$marge cm, bottom=$marge cm, left=$marge cm, right=$marge cm}" >> $nomfichier


function gen_latex {
PART1=$(for ((i=3; i<=$1; i++)) ; do echo -n "#$i" ; done)
PART2=$(for ((i=3; i<=$1; i++)) ; do echo -n "\\hbox{#$i}" ; done)
echo "\def\commande#1#2${PART1}{\quitvmode\vbox{\hbox{\scriptsize\bf\textcolor{red}{#1}}\hbox{\scriptsize\bf\textcolor{blue}{#2}}${PART2}}}"
}

gen_latex $nombrecouplets >> $nomfichier

echo -e "\\\begin{document}
\\\shorthandoff{:}

%\\\begin{multicols}{2}

\\\begin{spacing}{0.8}

\\\section*{$titre}
\\\begin{flushleft} 
\\\noindent" >> $nomfichier

x=i
for ((i=1;i<$nombrecouplets+1;i++))
do
	read -p "Refrain $x: " contenu
	echo $contenu >> refrain$x
	sed -i 's/!/\n/g' refrain$x
	sed -i 's/^/{/' refrain$x
	sed -i 's/$/}/' refrain$x
x="${x}i"
done

paste accordscolonne refrain* >> $nomfichier
sed -i 's/\t//g' $nomfichier

echo -e "\\\end{flushleft}
\\\dotfill
\\\end{spacing}
%\\\end{multicols}
\\\end{document}" >> $nomfichier

i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976,0 Go
Ubuntu Studio 14.04
Allergique au wysiwyg; traitement à vie: Lilypond LaTeX txt2tags

Hors ligne

#17 Le 17/02/2014, à 19:29

Le Goss

Re : [Résolu] Bash - création d'une commande latex

nesthib a écrit :

Si tu veux changer ce comportement (avoir #3#4 avec 2 comme argument), remplace « $1 » par « $1+2 » dans les deux boucles for.

C'est fait. Des essais à 1 et 2 couplets sont bons.


i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976,0 Go
Ubuntu Studio 14.04
Allergique au wysiwyg; traitement à vie: Lilypond LaTeX txt2tags

Hors ligne

#18 Le 17/02/2014, à 20:53

Le Goss

Re : [Résolu] Bash - création d'une commande latex

Bon ben, voilà le script dont je compte me servir.
N'hésitez pas à y apporter vos corrections et votre touche. On peut certainement faire mieux lol
En espérant qu'il vous sera utile. Il peut bien sûr être utilisé à d'autre fins.
Merci pour les retours!

#!/bin/bash

clear
echo -e "Ce script a pour but de générer des pdf de type \"songbook\" à partir de fichiers LaTeX, générés et compilés automatiquement.
"
read -p "Appuyer sur <Entrée> pour commencer:
"

read -p "Nom du fichier (ex: fichier): " nomfichier
read -p "Titre: " titre
read -p "Format du papier (ex: a5): " papier
read -p "Marges en cm (ex: 1.5): " marge
clear
echo -e "Saisie des accords:
-------------------
8 pour dièse;
0 pour bémol;
| (AltGr+6) pour une barre de mesure;
! pour séparer les accords.
Deux ! peuvent se suivre. Aucune espace n'est nécessaire.
Ex: Au clair de la lune:
	|C!|!G7!|C!G7!|C
"
read -p "Accords: " accords
echo $accords >> accords
sed -i 's/!/\n/g' accords
sed -i 's/^/\\commande{\\underline{}}{/' accords
sed -i 's/8/$\\sharp$/' accords
sed -i 's/0/$\\flat$/' accords
sed -i 's/$/}/' accords

cat	accords >> accordscolonne
echo ""
read -p "Combien de couplets? " nombrecouplets

echo -e "\documentclass[$papier paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[frenchb]{babel}
\usepackage{graphicx}
\usepackage{setspace}
\usepackage{color}
\usepackage{multicol}
\setlength{\\\columnseprule}{0.5pt}
\setlength{\\\columnsep}{30pt}
\usepackage{geometry}
\geometry{top=$marge cm, bottom=$marge cm, left=$marge cm, right=$marge cm}" >> $nomfichier.tex


function gen_latex {
PART1=$(for ((i=3; i<=$1+2; i++)) ; do echo -n "#$i" ; done)
PART2=$(for ((i=3; i<=$1+2; i++)) ; do echo -n "\\hbox{#$i}" ; done)
echo "\def\commande#1#2${PART1}{\quitvmode\vbox{\hbox{\scriptsize\bf\textcolor{red}{#1}}\hbox{\scriptsize\bf\textcolor{blue}{#2}}${PART2}}}"
}

gen_latex $nombrecouplets >> $nomfichier.tex

echo -e "
\\\begin{document}
\\\shorthandoff{:}

%\\\begin{multicols}{2}

\\\begin{spacing}{0.8}

\\\section*{$titre}

\\\begin{flushleft}

\\\noindent" >> $nomfichier.tex

echo -e "
Saisie des couplets:
--------------------
Ex: Au clair de la lune:
	Au clair de la!lu-!ne!mon a-!mi Pier-!rot
Possibilité d'insérer les barres de mesures (AltGr+6):
	|Au clair de la!|lu-!ne!|mon a-!mi Pier-!|rot

Dans l'idéal, le nombre de ! est identique pour les accords et les couplets...
"

x=i
for ((i=1;i<$nombrecouplets+1;i++))
do
	read -p "Couplet $x: " contenu
	echo $contenu >> couplet$x
	sed -i 's/!/\n/g' couplet$x
	sed -i 's/^/{/' couplet$x
	sed -i 's/$/}/' couplet$x
x="${x}i"
done

paste accordscolonne couplet* >> $nomfichier.tex
sed -i 's/\t//g' $nomfichier.tex

echo -e "
\\\end{flushleft}

\\\noindent
\\\dotfill

\\\end{spacing}

%\\\end{multicols}

\\\end{document}" >> $nomfichier.tex
pdflatex $nomfichier.tex
evince $nomfichier.pdf

x=i
for ((i=1;i<$nombrecouplets+1;i++))
do
	rm couplet$x
x="${x}i"
done

rm $nomfichier.log
rm $nomfichier.aux
rm accordscolonne
rm accords

i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976,0 Go
Ubuntu Studio 14.04
Allergique au wysiwyg; traitement à vie: Lilypond LaTeX txt2tags

Hors ligne

#19 Le 18/02/2014, à 02:47

nesthib

Re : [Résolu] Bash - création d'une commande latex

Chez moi ça ne fonctionne pas super bien tongue
Avec les paramètres par défaut j'ai une erreur de compilation.

Sinon il serait sympa de pouvoir donner les options en ligne de commande plutôt qu'en interactif, exemple :

script --titre "Le Titre" --couplets 1 "|C!|!G7!|C!G7!|C" "|Au clair de la!|lu-!ne!|mon a-!mi Pier-!|rot" -o fichier.pdf

Évite si possible d'utiliser des fichiers temporaires pour stocker du texte, utilise des variables. Si tu dois utiliser des fichiers temporaires, utilise mktemp et crée un dossier temporaire où tu pourras mettre ce que tu veux.

Tu devrais aussi mettre des valeurs par défaut si un champ n'est pas renseigné.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

En ligne

#20 Le 18/02/2014, à 09:33

Le Goss

Re : [Résolu] Bash - création d'une commande latex

nesthib a écrit :

Chez moi ça ne fonctionne pas super bien

C'est bien un problème récurrent chez moi que d'écrire des scripts bancals, sans pouvoir apporter une solution.

J'apprends "par hasard" aujourd'hui qu'on peut mettre des valeurs par défaut, qu'on peut se servir de variables au lieu de fichiers temporaires (j'avais fait ce choix faute de mieux).
Manquerait plus que bash fasse le café... big_smile
Je découvre les possibilités du bash de façon empirique, et sans trop savoir où chercher... ni comprendre comment ça fonctionne.
J'ai vraiment du mal à m'y retrouver avec toutes les commandes sed grep awk cat sort etc. sans compter les différentes options attachées à chacune d'elles, les subtilités des pipes et autres astuces.
Sans compter le temps que je perds à multiples essais, qui échouent en grande majorité.
Je finis parfois par croire que le terminal m'en veut.
Et lorsqu'enfin je viens honteusement demander de l'aide sur le forum, c'est parce que la calvitie menace.

Alors, je m'accroche. Mais c'est quand-même dur.

J'arrive pas à trouver un site, et/ou un bouquin, qui puissent m'enseigner progressivement le bash à partir de zéro, sans passer au bout de trois lignes à des trucs sophistiqués, qui me laissent sur place.
Je suis quand-même surpris qu'à une de mes questions, personne ne m'ait répondu, le très poétique RTFM, tellement j'ai l'impression que chez beaucoup (mais pas chez moi), tout vient comme une évidence.
Bon, je veux bien lire un manuel. Mais pour un boulet comme moi, je prends lequel?


i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976,0 Go
Ubuntu Studio 14.04
Allergique au wysiwyg; traitement à vie: Lilypond LaTeX txt2tags

Hors ligne

#21 Le 18/02/2014, à 17:36

nesthib

Re : [Résolu] Bash - création d'une commande latex

Tu n'es pas obligé de le lire de façon linéaire, mais tout simplement le man de bash smile

man bash

Parcours-le et n'hésite pas à chercher avec « /mot » (appuie sur h pour avoir l'aide de la liseuse « less »).


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

En ligne

#22 Le 18/02/2014, à 19:23

ares

Re : [Résolu] Bash - création d'une commande latex

Le Goss a écrit :

Je découvre les possibilités du bash de façon empirique, et sans trop savoir où chercher... ni comprendre comment ça fonctionne.
(...)
Bon, je veux bien lire un manuel. Mais pour un boulet comme moi, je prends lequel?

Regarde ICI... cela pourrait te convenir smile

Guide Basch a écrit :

Ce tutoriel ne suppose aucune connaissance de la programmation de scripts, mais permet une progression rapide vers un niveau intermédiaire/avancé...

@+


Signature modifié à la demande de L'Africain
«Quiconque s'agenouille devant Dieu se façonne à se prosterner devant un roi.» (Joseph Joubert / 1754-1824)
Lieux des religions

Hors ligne

#23 Le 18/02/2014, à 21:02

Le Goss

Re : [Résolu] Bash - création d'une commande latex

Bon! j'ai de quoi lire et de quoi faire.
Merci pour les toyaux!
Merci pour votre aide, cordialement


i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976,0 Go
Ubuntu Studio 14.04
Allergique au wysiwyg; traitement à vie: Lilypond LaTeX txt2tags

Hors ligne

Haut de page ↑