J'ai rédigé un lexique trilingue de vocabulaire technique. Il s'agit d'un tableau de trois colonnes, chacune correspondant à une langue. Ouvrir dans l'éditeur
\documentclass{minimal} \usepackage{longtable} \usepackage{multirow} \usepackage{marvosym} \usepackage{hyperref} \begin{document} \begin{longtable}{lll} \textsc{Română} & \textsc{English} & \textsc{Français}\\ \hline\\[10pt] \endhead Macară & Crane & Grue\\ \hline \multirow{2}{*}{Director de film} & \multirow{3}{*}{Unit production manager} & Directrice de production \Female\\ & & Directeur de production \Male\\ \multirow{-2}{*}{Director de produtie} & & \emph{Dir' prod'}\\ Husă & & Voile\\ \hline Maestru de lumini & \multirow{2}{*}{Gaffer} & Chef-électricien\\ Electrician șef & & \emph{Chef-électro} \end{longtable} \end{document} J'aimerais y adjoindre un index reprenant tous les mots du lexique, quelle qu'en soit la langue. Mon tableau étant très long, comment faire pour le créer automatiquement ? Posée 31 Oct '15, 10:22 Pathe ♦♦ |
Une solution consiste à recourir au package Ouvrir dans l'éditeur
\documentclass{article} \usepackage[T1]{fontenc} \usepackage[utf8x]{inputenc} \usepackage{longtable} \usepackage{array} \usepackage{collcell} \usepackage{ifmtarg} \usepackage[xindy]{imakeidx} \usepackage{hyperref} \makeindex \makeatletter \newcommand*{\myindex}[1]{% \@ifnotmtarg{#1}{#1\index{#1}}% } \makeatother \newcolumntype{I}{>{\collectcell\myindex}l<{\endcollectcell}} \begin{document} \begin{longtable}{III} \multicolumn{1}{l}{\textsc{Român}} & \multicolumn{1}{l}{\textsc{English}} & \multicolumn{1}{l}{\textsc{Français}}\\ \hline \hline \endhead Prăjină & Boom & Perche\\ \hline Macară & Crane & Grue\\ \hline Husă & & Voile\\ \hline Maestru de lumini & Gaffer & Chef-électricien\\ Electrician șef & Gaffer & \emph{Chef-électro} \end{longtable} \printindex \end{document} Il est à noter que ce fichier est à compiler avec Ça me crée bien une page d'index... mais elle reste vide.
(31 Oct '15, 21:49)
Pathe ♦♦
Mais oui : je suis scrupuleusement les recommandations postées ici !
(31 Oct '15, 22:49)
Pathe ♦♦
@Pathe Pourtant, sur overleaf, l'ECM que j'ai fourni donne le résultat escompté, index compris (modulo la suppression du caractère
(31 Oct '15, 23:09)
denis ♦♦
Chez moi le fichier J'ai placé la totalité de mon fichier sur overleaf. L'index est toujours aussi vide, et le site me répond : « Class scrartcl Warning: Usage of package 'fancyhdr' together with a KOMA-Script class is not recommended. I'd suggest to use package 'scrpage2' or 'scrlayer-scrpage'. Nevertheless, using requested (scrartcl) package 'fancyhdr' on input line 19. » En effet, j'utilise Mais je ne fais pas le lien avec la vacuité de l'index.
(01 Nov '15, 22:15)
Pathe ♦♦
@Denis Aucun avertissement lors de la compilation
(01 Nov '15, 22:31)
Pathe ♦♦
@Pathe Le code que j'ai proposé ne fonctionne a priori pas avec
(02 Nov '15, 10:49)
denis ♦♦
Je suis loin d'être un expert en index. Si j'ai bien compris, pour que le fichier compile correctement, il me faudrait enlever toutes les mentions Par la suite, pour obtenir la présentation initiale, il me faudrait remettre les
(03 Nov '15, 10:25)
Pathe ♦♦
J'ai enlevé de mon fichier :
Cela ne change rien : mon fichier
(07 Nov '15, 15:40)
Pathe ♦♦
Affichage de 5 parmi 11
Afficher 6 commentaire(s) en plus
|
Je propose une autre solution, qui fait appel aux même méthodes que celles de Denis (qui fonctionne très bien, l'index est bien créé), mais qui permet aussi d'indexer le texte dans un Édition : les cellules de fin de ligne vides sont permises sans provoquer de bug. Ouvrir dans l'éditeur
\documentclass{article} \usepackage[T1]{fontenc} \usepackage[utf8x]{inputenc} \usepackage[xindy]{imakeidx} \usepackage{multirow,longtable,array,collcell,hyperref} \makeindex \makeatletter \newif\if@index \unless\ifdefined\noindex\protected\def\noindex{\@indexfalse}\fi \let\multirow@saved\multirow \def\multirow{\noexpand\multirow@saved} \def\cell@index#1{% \@indextrue#1\if@index\test@multirow#1\multirow@saved\@nil{#1}% \unless\ifx\index@text\empty\index\index@text\fi\fi } \def\test@multirow#1\multirow@saved#2\@nil#3{\ifx\@empty#2\@empty\def\index@text{#3}\else\capture@multirowtext#3\@nil\fi} \def\capture@multirowtext#1\multirow@saved#2\@nil{\capture@multirowtexti#2\@nil} \def\capture@multirowtexti#1{\@testopt\capture@multirowtextii{}} \def\capture@multirowtextii#1]#2{\@testopt\capture@multirowtextiii{}} \def\capture@multirowtextiii#1]#2#3\@nil{\def\index@text{#2}}% \newcolumntype i{>{\collectcell\cell@index}l<\endcollectcell} \protected\def\LT@tabularcr{% \relax\iffalse{\fi\ifnum0=`}\fi \@ifstar {\def\crcr{\LT@crcr\noalign{\nobreak}}\let\cr\crcr \LT@t@bularcr}% {\LT@t@bularcr}} \makeatother \begin{document} \begin{longtable}{*3i} \noindex\textsc{Română} & \noindex\textsc{English} & \noindex\textsc{Français}\\ \hline \hline \endhead Prăjină & Boom & Perche\\ \hline Macară & Crane & Grue\\ \hline Husă & & Voile\\ \hline Maestru de lumini & \multirow{2}{*}{Gaffer} & Chef-électricien\\ Electrician șef & & \emph{Chef-électro}\\ Abacab& \multirow{2}{*}{Foo} & \multirow{3}{*}{Bar} \\ Absoudre & & \\ Acabi& \multirow{-2}{*}{BAZ}& \end{longtable} \printindex \end{document} Publiée 08 Nov '15, 09:38 unbonpetit ♦♦ @unbonpetit @denis le nouveau code fonctionne, mais dès lors que j'y incorpore mes données, je rencontre des erreurs de compilation. Je constate que vos deux exemples font intervenir le paramètre « i » ( Que sont donc ces « i » ? Permettent-ils la génération automatique de l'index ?
(08 Nov '15, 12:41)
Pathe ♦♦
@Pathe Ce sont de nouveaux types de colonnes, créés grâce à la commande
(08 Nov '15, 12:46)
denis ♦♦
@unbonpetit J'ai des données avec trois items dans la première colonne, deux dans la suivante et un seul dans la dernière, ce qui crée un code du type : Ouvrir dans l'éditeur
A& \multirow{2}{*}{B} & \multirow{3}{*}{C} \\ A & & \\ A& \multirow{-2}{*}{B}&\\ Cela génère des erreurs de compilation du type
(08 Nov '15, 14:00)
Pathe ♦♦
@Pathe Ce commentaire devrait être plutôt adressé @unbonpetit car c'est lui qui a proposé une solution prenant en charge la présence de commandes
(08 Nov '15, 15:58)
denis ♦♦
Apparemment, il s'agit d'un bug de Ouvrir dans l'éditeur \documentclass{article} \usepackage{longtable,collcell} \def\showcell#1{\showtokens{contenu = "#1"}} \begin{document} \begin{longtable}{*3{>{\collectcell\showcell}l<\endcollectcell}} A & B & C \\ \end{longtable} \end{document}
(08 Nov '15, 19:49)
unbonpetit ♦♦
Le "bug" avec
(08 Nov '15, 21:59)
unbonpetit ♦♦
Là, tu me parles un langage que je n'entends point. Redéfinir une commande comprenant un
(08 Nov '15, 23:17)
Pathe ♦♦
Affichage de 5 parmi 7
Afficher 2 commentaire(s) en plus
|
La classe
minimal
n'est pas recommandée : on le voit dans ce cas où le tableau n'est qu'une pâle copie de ce qu'il est avec la classearticle
, par exemple. Ensuite, créer l'index automatiquement ne serait pas très difficile s'il n'y avait que des mots seuls dans les cellules. En mettant dans certaines des macros telles que\emph
ou\multirow
, cela est augmente énormément le niveau de difficulté car il faut analyser le contenu des cellules pour trouver l'argument qu'il faut mettre dans l'index.J'ai utilisé la classe
minimal
car il est demandé de poster des ECM... minimaux !C'est à dessein que j'ai mis ces commandes :
\emph
, utilisé pour les mots familiers ou les diminutifs, est destiné à rester dans l'index. Quant aux\multirow
, je pourrai les enlever à la main : je préfère enlever quelques multirow plutôt que d'écrire à la main des centaines d'entrées d'index.Il s'agit donc de créer des entrées d'index à partir des chaînes de caractère se trouvant :
&
,&
,&
et la fin de ligne.@Pathe Il est vrai que les ECM se doivent d'être minimaux mais, en effet, la classe
minimal
est déconseillée pour les ECM car elle est tellement minimale qu'elle fonctionne mal avec la plupart des packages et restitue trop peu leur utilisation réelle. Il vaut mieux recourir à la classearticle
en général, sauf pour les questions qui traitent de ce qui est spécifique aux autres classes (par exemple les titres courants pour la classebook
).