IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation (La)TeX avancée Discussion :

Fonction commande : indexation conditionnée


Sujet :

Programmation (La)TeX avancée

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 45
    Points : 29
    Points
    29
    Par défaut Fonction commande : indexation conditionnée
    Bonjour,

    j'ai l'espoir de créer et d'utiliser une fonction-commande sous latex qui aurait deux arguments:
    - un mot à indexer dans une rubrique spécifique d'un index hiérarchique
    - la rubrique spécifique à ce mot
    La fonction-commande aurait donc deux effets:
    - indexer le mot
    - l'écrire en couleur dans le texte avec la couleur spécifique de la rubrique dont il dépend

    Cette commande s'appellerait \relief et s'utiliserait comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    \relief{Histoire}{mot_propre_à_l_histoire}
    \relief{Géographie}{mot_propre_à_la_geographie}
    (A la rubrique "Histoire" correspondrait une variable-couleur "Couleur_Histoire" définie par la commande \definecolor, et. ce qui ne pose pas de difficulté.)

    Je n'ai jamais programmé de fonction aussi élaborée sous latex, mais en toute ignorance, voilà comment elle pourrait être définie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    \definecolor{hist}{blue}
    \definecolor{geo}{green}
    \newcommand{\relief}{\textcolor{#2}{#1}%
      \if #2=hist \index{Hist@\textbf{Histoire}!#1}
      \else\if	#2=geo \index{Geo@\textbf{Géographie}!#1}
      \else \textcolor{red}{\huge ALORS?}
      \fi\fi}
    Bien sûr, je l'ai essayé avec l'exemple suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Entre la \relief{première guerre mondiale}{Histoire} et la \relief{deuxième guerre mondiale}{Histoire}, l'\relief{Alsace}{Géographie} et la \relief{Lorraine}{Géographie} étaient allemandes.
    Cela ne fonctionne pas: aucun index n'est créé; et après chaque mot passé dans la commande \relief, le fichier .dvi affiche un énorme "ALORS?" rouge...

    Je pense que je ne sais pas utiliser la fonction \if, ou (non exclusif) que mes tests ("#2=hist" par exemple) ne font pas ce que j'espérais...

    Un conseil? Une rectification?

    Question subsidaire:
    au lieu de faire un index hiérarchique dont le 1er niveau comprendrait lesdites rubriques "Histoire", "Géographie" (et plusieurs autres si on veut), il serait peut-être plus judicieux de faire plusieurs index, pour éviter les situations où chaque entrée de premier niveau, ayant plusieurs centaines de sous-entrées, prendrait de la place (perdue) aux sous-entrées qu'elle contiendrait en les décalant vers la droite et ne serait elle-même pas bien lisible...
    La question subsidiaire est la suivante: comment fait-on plusieurs index?

  2. #2
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    Pour ceux qui sont intéressés, j'ai trouvé qq éléments de réponses:
    un descriptif des commandes définies dans le package ifthen.sty à l'adresse http://www.ifi.uio.no/it/latex-links/ifthen.pdf
    Fichier à conserver dans son PC si on a l'âme d'un programmeur, me semble-t-il...
    De plus, voici un exemple d'utilisation de la commande \ifthenelse, en libre circulation sur http://www-h.eng.cam.ac.uk/help/tpl/...ing_latex.html, adresse éventuellement utile car contient d'autres sujets d'introduction à latex orientés programmation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    \usepackage{ifthen}
    \newcommand{\weekday}[1]%
    {%
    \ifthenelse{\equal{#1}{1}}{Monday}{}%
    \ifthenelse{\equal{#1}{2}}{Tuesday}{}%
    \ifthenelse{\equal{#1}{3}}{Wednesday}{}%
    \ifthenelse{\equal{#1}{4}}{Thursday}{}%
    \ifthenelse{\equal{#1}{5}}{Friday}{}%
    \ifthenelse{\equal{#1}{6}}{Saturday}{}%
    \ifthenelse{\equal{#1}{7}}{Sunday}{}%
    }
     
    \weekday{3}
    Le tout ne disconvient pas à ceux que ne rebute pas l'anglais...

    Merci à Adrien qui a su m'insufler le goût de me lancer dans cette recherche et sans lequel j'aurais abandonné mon idée!

    Je maintiens ma question subsidiaire, que je n'ai pas encore entrepris de creuser: comment faire plusieurs index?
    Si quelqu'un a une piste, ce sera autant de débroussaillé...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Points : 475
    Points
    475
    Par défaut
    Bonjour,

    J'ai plus qu'une piste
    Je suis en train de te préparer un exemple d'index multiple.
    Il me faut encore quelques minutes...

    Nicolas

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Points : 475
    Points
    475
    Par défaut
    Proposition avec plusieurs index

    Tu demandes "comment fait-on plusieurs index?"
    La réponse est dans la FAQ Grappa : http://www.grappa.univ-lille3.fr/FAQ-LaTeX/16.7.html

    Ci-dessous une proposition utilisant le package "index".

    Je pense qu'elle répond à ton cahier des charges : mots en couleur dans le texte, deux index différents pour l'histoire et la géographie.

    Pas de "if... then... else...", juste des instructions différentes.

    Attention : il faut modifier la commande de génération de l'index aux niveaux des fichiers : cf. les commentaires dans le code.

    Cordialement,

    Nicolas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    \documentclass[a4paper,oneside,11pt]{article} 
     
    % inclusion du package "index" :
    \usepackage{index}
    % CTAN : http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=index
    % manuel : ftp://ftp.ctex.org/CTAN/macros/latex/contrib/index/index.pdf
     
    % package pour la couleur :
    \usepackage{color}
     
    % ordre de création des index d'histoire et de géographie :
    \newindex{histoireIndex}{hdx}{hnd}{\textcolor{blue}{Histoire}}
    \newindex{geographieIndex}{gdx}{gnd}{\textcolor{green}{Géographie}}
    % ATTENTION
    % la constitution de l'index se fera par les deux lignes :
    % makeindex -o %2.hnd %2.hdx
    % makeindex -o %2.gnd %2.gdx
    % où %2 doit être remplacé par le nom du fichier en cours
     
    % packages pour la prise en compte du français
    \usepackage[francais]{babel} 
    \usepackage[latin1]{inputenc}
    \usepackage[T1]{fontenc} 
     
    % package "hyperref" pour les liens hypertextes :
    \usepackage[colorlinks, urlcolor=red, citecolor=red, breaklinks, pagebackref, dvipdfm]{hyperref}
     
    \begin{document} 
     
    % commande affichant un mot en couleur et l'indexant en histoire :
    \newcommand{\histoireAfficheEtIndexe}[1]{\textcolor{blue}{#1}\index[histoireIndex]{#1}}
     
    % commande affichant un mot en couleur et l'indexant en géographie :
    \newcommand{\geographieAfficheEtIndexe}[1]{\textcolor{green}{#1}\index[geographieIndex]{#1}}
     
    % **** DEBUT DU TEXTE ****
     
    Les États-Unis et l'URSS, du fait de leur superpuissance, ne peuvent se livrer à un combat direct. La \histoireAfficheEtIndexe{Guerre Froide} est donc un affrontement indirect, organisé par nations interposées et sur des terrains (armement, \histoireAfficheEtIndexe{propagande}) qui n'obligent pas l'adversaire à une riposte militaire.\\
     
    L'axe français est médiocrement relié à l'\geographieAfficheEtIndexe{axe majeur européen} : le \geographieAfficheEtIndexe{Rhin}, qui rassemble le Royaume-Uni, la Belgique, les Pays-Bas, l'Allemagne, la Suisse et l'Italie.\\
     
    Ces deux paragraphes proviennent de :  \url{http://perso.orange.fr/bac-es/higeo/index.html}.
     
    % impression de l'index d'histoire :
    \printindex[histoireIndex]
     
    % impression de l'index de géographie :
    \printindex[geographieIndex]
     
    \end{document}

  5. #5
    Membre habitué
    Inscrit en
    Décembre 2002
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 120
    Points : 131
    Points
    131
    Par défaut
    et avec la commande qui va bien pour le premier point de ta question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    \usepackage{ifthen}
    \newcommand{\relief}[2]{%
       \textcolor{#2}{#1}
       \ifthenelse{\equal{#2}{blue}}{\index{Hist@\textbf{Histoire}!#1}}{}%
       \ifthenelse{\equal{#2}{green}}{\index{Geo@\textbf{Géographie}!#1}}{}%
    }
    bon week end

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Points : 475
    Points
    475
    Par défaut
    Même exemple que ci-dessus (index multiple) avec une commande "relief" reposant sur un "ifthenelse"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    \documentclass[a4paper,oneside,11pt]{article} 
     
    % inclusion du package "index" :
    \usepackage{index}
    % CTAN : http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=index
    % manuel : ftp://ftp.ctex.org/CTAN/macros/latex/contrib/index/index.pdf
     
    \usepackage{color}
     
    \usepackage{ifthen}
     
    % ordre de création des index d'histoire et de géographie :
    \newindex{histoireIndex}{hdx}{hnd}{\textcolor{blue}{Histoire}}
    \newindex{geographieIndex}{gdx}{gnd}{\textcolor{green}{Géographie}}
    % ATTENTION
    % la constitution de l'index se fera par les deux lignes :
    % makeindex -o %2.hnd %2.hdx
    % makeindex -o %2.gnd %2.gdx
    % où %2 doit être remplacé par le nom du fichier en cours
     
    % packages pour la prise en compte du français
    \usepackage[francais]{babel} 
    \usepackage[latin1]{inputenc}
    \usepackage[T1]{fontenc} 
     
    % package "hyperref" pour les liens hypertextes :
    \usepackage[colorlinks, urlcolor=red, citecolor=red, breaklinks, pagebackref, dvipdfm]{hyperref}
     
    \begin{document} 
     
    % commande d'affichage et d'inclusion dans l'index
    \newcommand{\relief}[2]
    {  
    \ifthenelse{\equal{#1}{histoire}}{\textcolor{blue}{#2}\index[histoireIndex]{#2}}{% else
    \ifthenelse{\equal{#1}{geographie}}{\textcolor{green}{#2}\index[geographieIndex]{#2}}{% else
    \textcolor{red}{ERREUR - DEMANDE D'AJOUT DANS UN INDEX INCONNU}
    }}}
     
    % **** DEBUT DU TEXTE ****
     
    Les États-Unis et l'URSS, du fait de leur superpuissance, ne peuvent se livrer à un combat direct. La \relief{histoire}{Guerre Froide} est donc un affrontement indirect, organisé par nations interposées et sur des terrains (armement, \relief{histoire}{propagande}) qui n'obligent pas l'adversaire à une riposte militaire.\\
     
    L'axe français est médiocrement relié à l'\relief{geographie}{axe majeur européen} : le \relief{geographie}{Rhin}, qui rassemble le Royaume-Uni, la Belgique, les Pays-Bas, l'Allemagne, la Suisse et l'Italie.\\
     
    Ces deux paragraphes proviennent de :  \url{http://perso.orange.fr/bac-es/higeo/index.html}.\\
     
    Faute de frappe volontaire dans le nom de l'index : \relief{geograph}{mot qui ne sera pas affiché}
     
    % impression de l'index d'histoire :
    \printindex[histoireIndex]
     
    % impression de l'index de géographie :
    \printindex[geographieIndex]
     
    \end{document}

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Points : 475
    Points
    475
    Par défaut
    Exemple complet avec un index unique, et des sous-entrées dans l'index

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    \documentclass[a4paper,oneside,11pt]{article} 
     
    \usepackage{makeidx}\makeindex
    \usepackage{color}
    \usepackage{ifthen}
     
    \usepackage[francais]{babel} 
    \usepackage[latin1]{inputenc}
    \usepackage[T1]{fontenc} 
     
    \usepackage[colorlinks, urlcolor=red, citecolor=red, breaklinks, pagebackref, dvipdfm]{hyperref}
     
    \begin{document} 
     
    % commande d'affichage et d'inclusion dans l'index
    \newcommand{\relief}[2]
    {  
    \ifthenelse{\equal{#1}{histoire}}{\textcolor{blue}{#2}\index{Histoire@\textcolor{blue}{\textbf{\Large Histoire}}!#2}}{% else
    \ifthenelse{\equal{#1}{geographie}}{\textcolor{green}{#2}\index{Geographie@\textcolor{green}{\textbf{\Large Géographie}}!#2}}{% else
    \textcolor{red}{#2 ERREUR - DEMANDE D'AJOUT DANS UN INDEX INCONNU}
    }}}
     
    % **** DEBUT DU TEXTE ****
     
    Les États-Unis et l'URSS, du fait de leur superpuissance, ne peuvent se livrer à un combat direct. La \relief{histoire}{Guerre Froide} est donc un affrontement indirect, organisé par nations interposées et sur des terrains (armement, \relief{histoire}{propagande}) qui n'obligent pas l'adversaire à une riposte militaire.\\
     
    L'axe français est médiocrement relié à l'\relief{geographie}{axe majeur européen} : le \relief{geographie}{Rhin}, qui rassemble le Royaume-Uni, la Belgique, les Pays-Bas, l'Allemagne, la Suisse et l'Italie.\\
     
    Ces deux paragraphes proviennent de :  \url{http://perso.orange.fr/bac-es/higeo/index.html}.\\
     
    Faute de frappe volontaire dans le nom de l'index : \relief{geograph}{mot-qui-ne sera-pas-indexé}
     
    % impression de l'index :
    \printindex
     
    \end{document}

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    Merci beaucoup!

    J'estime que mes questions sont résolues, et très bien résolues!

    Par comparaison avec nombre de forums où les réponses sont des commentaires privés inconsistants, celui-ci forum est particulièrement efficace!

    Merci encore.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Points : 475
    Points
    475
    Par défaut
    Pour ma part, je t'en prie.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 11/08/2012, 17h49
  2. la fonction get(index)
    Par jaljal dans le forum jQuery
    Réponses: 4
    Dernier message: 27/12/2009, 02h23
  3. fonction ,command et raccourcis
    Par bauhaus dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 26/11/2008, 19h59
  4. utilisation fonction sans index
    Par marty499 dans le forum Langage
    Réponses: 2
    Dernier message: 19/06/2008, 14h17
  5. Autre fonction qu'index pour rechercher un motif?
    Par Mayeu dans le forum Bioinformatique
    Réponses: 1
    Dernier message: 16/04/2007, 11h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo