Je réalise un inventaire de sites archéologiques. Chacun des sites est numéroté. J'utilise pour ceci un environnement Ma question est donc : puis-je faire figurer dans l'index, en plus du numéro de page, le numéro du site stocké dans le Ouvrir dans l'éditeur
\documentclass{article} \usepackage{fontspec} \usepackage[xindy]{indextools} \usepackage{enumitem} \usepackage{xkeyval} \makeatletter \define@key{site}{NomSite}{\def\@NomSite{#1}} \define@key{site}{Periode}{\def\@Periode{#1}} \define@key{site}{Contexte}{\def\@Contexte{#1}} \newcommand{\Objet}[1]{% \setkeys{site}{#1} \item\@NomSite. \@Contexte. \@Periode.% \expandafter\index\expandafter\@NomSite% \edef\temp{{site:\@NomSite}}% \expandafter\label\temp% \let\temp\@undefined } \makeatother \makeindex \begin{document} \begin{enumerate}[label=\textbf{\arabic*}.,ref={\arabic*}] \Objet{NomSite={Chavéria},Contexte={Sépulture},Periode={Bronze ancien}} \Objet{NomSite={Abbeville},Contexte={Dépôt terrestre},Periode={Bronze moyen}} \end{enumerate} \begin{enumerate}[label=\textbf{\arabic*}.,ref={\arabic*},resume] \Objet{NomSite={Blénod-lès-Pont-a-Mousson},Contexte={Dépôt en milieu humide},Periode={Bronze final}} \end{enumerate} Blénod-lès-Pont-a-Mousson : \ref{site:Blénod-lès-Pont-a-Mousson} Chavéria : \ref{site:Chavéria} Abbeville : \ref{site:Abbeville} \newpage \printindex \end{document} Avec la solution proposée par Maïeul, je compile ce document : Ouvrir dans l'éditeur
\documentclass{article} \usepackage{fontspec} \usepackage[xindy]{indextools} \usepackage{enumitem} \usepackage{xkeyval} \makeatletter \define@key{site}{NomSite}{\def\@NomSite{#1}} \define@key{site}{Periode}{\def\@Periode{#1}} \define@key{site}{Contexte}{\def\@Contexte{#1}} \newcommand{\indexobjet}[1]{% \indtl@wrindexentry{\jobname}{#1}{\thepage-\ref\temp} }% \newcommand{\Objet}[1]{% \setkeys{site}{#1} \item\@NomSite. \@Contexte. \@Periode.% %\index{\@NomSite} \edef\temp{{site:\@NomSite}}% \indexobjet{\@NomSite} \expandafter\label\temp% \let\temp\@undefined } \makeatother \makeindex[program=texindy,options=-I xelatex -M ecm] \begin{document} \begin{enumerate}[label=\textbf{\arabic*}.,ref={\arabic*}] \Objet{NomSite={Chavéria},Contexte={Sépulture},Periode={Bronze ancien}} \Objet{NomSite={Abbeville},Contexte={Dépôt terrestre},Periode={Bronze moyen}} \end{enumerate} \begin{enumerate}[label=\textbf{\arabic*}.,ref={\arabic*},resume] \Objet{NomSite={Blénod-lès-Pont-a-Mousson},Contexte={Dépôt en milieu humidea$},Periode={Bronze final}} \end{enumerate} Blénod-lès-Pont-a-Mousson : \ref{site:Blénod-lès-Pont-a-Mousson} Chavéria : \ref{site:Chavéria} Abbeville : \ref{site:Abbeville} \newpage \printindex \end{document} avec le fichier Ouvrir dans l'éditeur
(define-location-class "inventaire" ("arabic-numbers" :sep"-" "arabic-numbers") :hierdepth 2 ) (markup-locref-list :open " [" :sep " " :close "]" :depth 1 :class "inventaire") Mais cela ne donne rien et j'obtiens un fichier Ouvrir dans l'éditeur
\indexentry{Chavéria}{1-\G@refundefinedtrue {\unhbox \voidb@x \hbox {\normalfont \bfseries ??}}\GenericWarning { }{LaTeX Warning: Reference `{site:Chavéria}' on page 1 undefined}} \indexentry{Abbeville}{1-\G@refundefinedtrue {\unhbox \voidb@x \hbox {\normalfont \bfseries ??}}\GenericWarning { }{LaTeX Warning: Reference `{site:Abbeville}' on page 1 undefined}} \indexentry{Blénod-lès-Pont-a-Mousson}{1-\G@refundefinedtrue {\unhbox \voidb@x \hbox {\normalfont \bfseries ??}}\GenericWarning { }{LaTeX Warning: Reference `{site:Blénod-lès-Pont-a-Mousson}' on page 1 undefined}} |
Ouvrir dans l'éditeur
\indtl@wrindexentry{names}{Charles}{26} Donc tu peux créer ta propre commande d'indexation : Ouvrir dans l'éditeur
\makeatletter \newcommand{\indexobjet}[1]{% \indtl@wrindexentry{\jobname}{#1}{\thepage-\pageref{#1}} }% \makeatother Mais le problème c'est qu'un Dans le cas présent, l'un des problèmes est de pouvoir récupérer la référence brut produit par un D'abord je reprends ta commande Ouvrir dans l'éditeur
\newcommand{\Objet}[1]{% \setkeys{site}{#1} \item\@NomSite. \@Contexte. \@Periode.% %\index{\@NomSite} \edef\temp{{site:\@NomSite}}% \indexobjet{\@NomSite} \expandafter\label\temp% \let\temp\@undefined } Maintenant le code de Je suppose que tu charges Il faut savoir que lorsqu'un label Ouvrir dans l'éditeur
\newcommand{\indexobjet}[1]{% \edef\tempa{\expandafter\@firstofone\temp}%\tempa = le label SANS les {}, puisque \temp le contient \ifcsdef{r@\tempa}{% si la commande \csname r@\tempa\endcsname est définie, c'est qu'il y a un label posé > on index. Sinon on n'index pas. \edef\tempb{\expandafter\ref\temp}%Numero suivi de \hbox{} \edef\tempc{\expandafter\@firstoftwo\tempb}%Numero suivi de {} \edef\tempd{\expandafter\@firstoftwo\tempc}%Numero brut % \meaning\temp % Debug : trouver signif de \temp % \meaning\tempa % Debug : trouver signif de \tempa % \meaning\tempb % Debug : trouver signif de \tempb % \meaning\tempc % Debug : trouver signif de \tempc % \meaning\tempd % Debug : trouver signif de \tempd \indtl@wrindexentry{\jobname}{#1}{\thepage-\tempd}% }% {} }% Je t'invite à décommenter les Cela produit le fichier Ouvrir dans l'éditeur
\indexentry{Chavéria}{1-1} \indexentry{Abbeville}{1-2} \indexentry{Blénod-lès-Pont-a-Mousson}{1-3} Reste ensuite à customiser Ouvrir dans l'éditeur
(define-location-class "eledmac" ("arabic-numbers" :sep"-" "arabic-numbers") :hierdepth 2 Voir cette page pour comprendre comment gérer les sous-numéros de référence (mais attention on y parle également d'autre chose). En mettant ceci dans mon préambule (après avoir ajouté votre code) :
Tout se passe bien à la première compilation avec
(03 Nov '15, 13:31)
Namrod
Il me faudrait l'exemple complet. Chez moi aucun souci.
(03 Nov '15, 13:38)
Maïeul
Veuillez m'excuser, je n'ai pas été tout à fait exact. En réalité, votre solution fonctionne, mais produit ceci lors de la compilation (l'exemple est celui de ma réponse ci-dessous) :
Si j'ignore cela et que je termine la compilation, j'obtiens bien le résultat attendu. Mais si je charge l'extension
(03 Nov '15, 13:46)
Namrod
Ça c'est un problème dans votre fichier
(03 Nov '15, 14:10)
Maïeul
Je pense qu'avec les articles sur mon site vous devriez y arriver. Sinon n'hésitez pas à poser une nouvelle question plus directement centrée sur la transformation d'un fichier J'ai vu que vous avez validé la réponse. Il est aussi d'usage d'accorder à la question qu'on valide un pouce en haut.
(03 Nov '15, 15:27)
Maïeul
|
@Maïeul : effectivement, j'avais vu cette commande. malheureusement, je n'arrive pas à la faire fonctionner. J'ai créé un fichier Ouvrir dans l'éditeur
(define-location-class "inventaire" ("arabic-numbers" :sep"-" "arabic-numbers") :hierdepth 2 ) (markup-locref-list :open " [" :sep " " :close "]" :depth 1 :class "inventaire") Et j'ai compilé ce document : Ouvrir dans l'éditeur
\documentclass{article} \usepackage{fontspec} \usepackage[xindy]{indextools} \usepackage{enumitem} \usepackage{xkeyval} \makeatletter \define@key{site}{NomSite}{\def\@NomSite{#1}} \define@key{site}{Periode}{\def\@Periode{#1}} \define@key{site}{Contexte}{\def\@Contexte{#1}} \newcommand{\indexobjet}[1]{% \indtl@wrindexentry{\jobname}{#1}{\thepage-\ref\temp} }% \newcommand{\Objet}[1]{% \setkeys{site}{#1} \item\@NomSite. \@Contexte. \@Periode.% %\index{\@NomSite} \edef\temp{{site:\@NomSite}}% \indexobjet{\@NomSite} \expandafter\label\temp% \let\temp\@undefined } \makeatother \makeindex[program=texindy,options=-I xelatex -M ecm] \begin{document} \begin{enumerate}[label=\textbf{\arabic*}.,ref={\arabic*}] \Objet{NomSite={Chavéria},Contexte={Sépulture},Periode={Bronze ancien}} \Objet{NomSite={Abbeville},Contexte={Dépôt terrestre},Periode={Bronze moyen}} \end{enumerate} \begin{enumerate}[label=\textbf{\arabic*}.,ref={\arabic*},resume] \Objet{NomSite={Blénod-lès-Pont-a-Mousson},Contexte={Dépôt en milieu humidea$},Periode={Bronze final}} \end{enumerate} Blénod-lès-Pont-a-Mousson : \ref{site:Blénod-lès-Pont-a-Mousson} Chavéria : \ref{site:Chavéria} Abbeville : \ref{site:Abbeville} \newpage \printindex \end{document} Mais cela ne donne rien, et mon fichier Ouvrir dans l'éditeur
\indexentry{Chavéria}{1-\G@refundefinedtrue {\unhbox \voidb@x \hbox {\normalfont \bfseries ??}}\GenericWarning { }{LaTeX Warning: Reference `{site:Chavéria}' on page 1 undefined}} \indexentry{Abbeville}{1-\G@refundefinedtrue {\unhbox \voidb@x \hbox {\normalfont \bfseries ??}}\GenericWarning { }{LaTeX Warning: Reference `{site:Abbeville}' on page 1 undefined}} \indexentry{Blénod-lès-Pont-a-Mousson}{1-\G@refundefinedtrue {\unhbox \voidb@x \hbox {\normalfont \bfseries ??}}\GenericWarning { }{LaTeX Warning: Reference `{site:Blénod-lès-Pont-a-Mousson}' on page 1 undefined}} |
Je propose ceci, où la macro Ouvrir dans l'éditeur
\documentclass{article} \usepackage{fontspec} \usepackage[xindy]{indextools} \usepackage{enumitem,filecontents} \usepackage[hyperindex=false]{hyperref} \makeatletter \newcount\Objet@cnt \def\Objet#1{\Objet@i#1\Objet@i} \def\Objet@i#1,#2,#3\Objet@i{% \global\advance\Objet@cnt1 \begin{enumerate}[label=\textbf{\arabic*}.,start=\number\Objet@cnt,ref={\arabic*}]\item#1. #2. #3.\end{enumerate} \label{site:#1}% \indtl@wrindexentry{\jobname}{#1}{\thepage-\number\value{enumi}}% } \makeatother \begin{filecontents*}{monstyle.xdy} (require "page-ranges.xdy") (markup-locclass-list :open "\dotfill ") (define-location-class "inventaire" ("arabic-numbers" :sep"-" "arabic-numbers"):hierdepth 2 ) (markup-locref-list :open " [\begingroup\bfseries" :sep " " :close "\endgroup]" :depth 1 :class "inventaire") \end{filecontents*} \makeindex[options=-I xelatex -L french -M monstyle.xdy] \begin{document} \Objet{Chavéria,Sépulture,Bronze ancien} \Objet{Abbeville,Dépôt terrestre,Bronze moyen} Bla bla bla \Objet{Blénod-lès-Pont-a-Mousson,Dépôt en milieu humide,Bronze final} Blénod-lès-Pont-a-Mousson : \ref{site:Blénod-lès-Pont-a-Mousson} Chavéria : \ref{site:Chavéria} Abbeville : \ref{site:Abbeville} \newpage \printindex \end{document} Publiée 03 Nov '15, 08:40 unbonpetit ♦♦ Pathe ♦♦ |
Voici une proposition qui ajoute le numéro du label avant le numéro de page dans l'index. L'inverse me semble compliqué. En fait, ça ajoute au terme indexé un numéro de compteur. J'ai l'impression que votre mise en place pourrait être plus simple parce que toutes vos entrées sont identiques, à savoir « NomSite, Contexte, Periode » et donc les clés ne sont pas nécessaires. Enfin, ça n'est pas grave. J'ai seulement modifié votre commande Ouvrir dans l'éditeur
\newcommand{\Objet}[1]{% \setkeys{site}{#1} \item\@NomSite. \@Contexte. \@Periode.% \edef\temp{{site:\@NomSite}}% \expandafter\label\temp% \index{\@NomSite\,\textbf{[\ref{site:\@NomSite}]}}%%%%%% MODIFICATIONS } Ça semble fonctionner. Je compile avec
(03 Nov '15, 09:25)
Namrod
|
Quelles sont vos lignes de commande pour la compilation?