Régler l'apparence des index avec xindy - commentairesRégler l'apparence des index avec <code class="spip_code spip_code_inline" dir="ltr">xindy</code>2018-07-02T21:08:04Zhttps://geekographie.maieul.net/-171-#comment18152018-07-02T21:08:04Z<p>The question was how to show page and note numbers together in an index<small class="fine d-inline"> </small>; e.g., "210n7" for an entry in note numbered 7 occurring on page 210. This is needed for manually added notes in a document processed by xelatex and xindy.</p>
<p>Below is a solution which seems to work. It still has the shortcoming that the index is showing the entries in this order :<br class="autobr"> «<small class="fine d-inline"> </small>gnu, 1, 2, 1n9, 2n6<small class="fine d-inline"> </small>» instead of «<small class="fine d-inline"> </small>gnu, 1, 1n9, 2, 2n6<small class="fine d-inline"> </small>».<br class="autobr">
Xindy allows ordering location classes as a whole. But in its manuals I can't find any way of specifying an order between individual members of two location classes. In the present case, we can obviously impose an order quite logically by sequentially comparing the individual members of the two location classes. Fortunately, this flaw doesn't matter in my current project because all the pages that contain the endnotes come after the main text pages anyway<small class="fine d-inline"> </small>!</p>
<p>The program listings are as follows :</p>
<p>========================= mwe.xdy ==========================<br class="autobr">
<small class="fine d-inline"> </small>;<small class="fine d-inline"> </small>; Style for printing page and note numbers together as e.g. "210n7" <br class="autobr">
<small class="fine d-inline"> </small>;<small class="fine d-inline"> </small>; This is for manually added notes, such as endnotes.</p>
<p>(define-location-class "page-note-numbers" :var<br class="autobr">
("arabic-numbers" :sep " " "arabic-numbers") )<br class="autobr">
(define-location-class-order ("arabic-page-numbers" "page-note-numbers"))</p>
<p>(define-attributes (("formatpn")) )<br class="autobr">
(markup-locref :attr "formatpn" :open "\formatpn<i>" :close "</i>" )</p>
<p>========================= mwe.tex ==========================</p> <textarea readonly cols="40" rows="50" class="spip_cadre spip_cadre_block" dir="ltr">% !TEX TS-program = XeLaTex % !TEX encoding = UTF-8 Unicode
% Problem: Show in the index the number of each manually added note % together with the number of the page on which it appears.
% E.g., by specifying a suitable Xindy location-class "page-note-numbers" and % defining a command \indexpn[2] so the tex code below generates the index:
% bison, 1, 2
% gnu, 1, 1n9, 2, 2n6
\documentclass[12pt]{article} \usepackage{etoolbox}
\usepackage[xindy]{indextools} \makeindex[program=texindy]
% Solution derived from the page-footnote solution in Stack Exchange item: % https://tex.stackexchange.com/questions/328833/page-n-footnote-number-in-index-with-texindy % \formatpnn formats the locations as specified in the accompanying Xindy style file mwe.xdy % \formatpn is a wrapper for \formatpnn to permit braces
\newcommand{\formatpn}[1]{\formatpnn #1}
\def\formatpnn #1 #2{{{#1}n#2}} % \indexpn command
\makeatletter \newcommand{\indexpn}[2][0]{%
\ifnumless{#1}{1}{\index{#2}}{% \let\@indexpn\@index
\patchcmd{\@indexpn}{\@wrindex}{\@Wrindex}{}{} \let\@Wrindex\@wrindex
\patchcmd{\@Wrindex}{\thepage}{\thepage\space#1}{}{} \let\xindexpn\index
\patchcmd{\xindexpn}{\@index}{\@indexpn}{}{} \patchcmd{\xindexpn}{\@index}{\@indexpn}{}{}
\xindexpn{#2|formatpn} }}
\makeatother \begin{document}
Gnus,\indexpn[9]{gnu} bisons,\index{bison} and more gnus.\index{gnu} \newpage
Bisons,\index{bison} gnus,\index{gnu} and some more gnus,\indexpn[6]{gnu}. \printindex
\end{document}</textarea>Régler l'apparence des index avec <code class="spip_code spip_code_inline" dir="ltr">xindy</code>2018-06-24T20:25:25Zhttps://geekographie.maieul.net/-171-#comment18142018-06-24T20:25:25Z<p>Submission via the submission form is corrupted. For example, all the brace have disappeared. Please ignore the previous form submissions, and only consider what I sent via email. Sorry</p>Régler l'apparence des index avec <code class="spip_code spip_code_inline" dir="ltr">xindy</code>2018-06-24T18:24:42Zhttps://geekographie.maieul.net/-171-#comment18132018-06-24T18:24:42Z<p>not a problem, I will correct it directly in the website.</p>Régler l'apparence des index avec <code class="spip_code spip_code_inline" dir="ltr">xindy</code>2018-06-24T18:19:17Zhttps://geekographie.maieul.net/-171-#comment18122018-06-24T18:19:17Z<p>Resubmitting didn't work. The sumbitting form again automaticaly formatted the last part. I'll resumbmit that part to you by email.</p>Régler l'apparence des index avec <code class="spip_code spip_code_inline" dir="ltr">xindy</code>2018-06-24T17:54:54Zhttps://geekographie.maieul.net/-171-#comment18112018-06-24T17:54:54Z<p>Part 2 : mwe.tex</p>
<div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>%!TEX encoding = UTF-8 Unicode \documentclass[12pt]{article} \usepackage{etoolbox}
\usepackage[xindy]{imakeidx}
\makeindex[program=texindy,options=-M mwe] %%%%%% Copy of page-footnote solution in quoted Stack Exchange item
% test to detect we are in a footnote;
\let\svfootnote\footnote
\renewcommand\footnote[2][\thefootnote]{% \stepcounter{footnote}% \gdef\infootnote{T}% \svfootnote[#1]{#2\gdef\infootnote{F}}%
}
\gdef\infootnote{F} % write the footnote number if we're in one, 0 otherwise
\makeatletter
\newcommand{\fnind}{\if T\infootnote
\@currentlabel%
\else 0\fi%
}
\makeatother % http://tex.stackexchange.com/questions/20894/make-index-entries-refer-to-something-other-than-the-page-numbers/20910#20910
\makeatletter
\let\@indexfn\@index
\patchcmd{\@indexfn}{\@wrindex}{\@Wrindex}{}{}
\let\@Wrindex\@wrindex
\patchcmd{\@Wrindex}{\thepage}{\thepage\space\fnind}{}{}
\let\xindexfn\index
\patchcmd{\xindexfn}{\@index}{\@indexfn}{}{}
\patchcmd{\xindexfn}{\@index}{\@indexfn}{}{}
\newcommand{\indexfn}[2][\imki@jobname]{\xindexfn[#1]{#2|formatloc}}
\makeatother
%%%% End of Copy %%%% Question: how do this for manually added notes as illustrated in tex code below % \formatpnn formats the locations as needed in the .ind file
% \formatpn is a wrapper for \formatpnn to permit braces
\newcommand{\formatpn}[1]{\formatpnn #1}
% The remaining lines are being incorrectly formatted in my post for some reason.
% I'll try posting them again in another post
\def\formatpnn #1 #2{{{#1}n#2}} % How define \indexpn[2] similarly to \indexfn so the tex commands generate in index:
gnu, 1n5,1,2n4,2
goat, 1,2 \begin{document}
Animals only! \\
gnu\indexpn{gnu,5} and goat\index{goat}.\\
gnu\index{gnu}
\newpage
gnu\indexpn{gnu,4}, goat\index{goat}, and again gnu\index{gnu}.
\printindex
\end{document}</code></pre></div>Régler l'apparence des index avec <code class="spip_code spip_code_inline" dir="ltr">xindy</code>2018-06-24T17:46:48Zhttps://geekographie.maieul.net/-171-#comment18102018-06-24T17:46:48Z<p>Thanks. Here is an <span class="caps">MWE</span> in two parts</p>
<p>Part I. mwe.xdy :</p>
<div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>;; Style for printing page and note numbers together as e.g. "210n7" ;; This is for manually added notes (e.g. endnotes).
;; The problem for automatically generated notes via \footnote command is addresed in:
;; https://tex.stackexchange.com/questions/328833/page-n-footnote-number-in-index-with-texindy (define-location-class "pagenote" :var ("arabic-numbers" :sep " " "arabic-numbers") )
(define-location-class-order ("pagenote")) (define-attributes (("formatpn")) )
(markup-locref :attr "formatpn" :open "\formatpn{" :close "}" )</code></pre></div>Régler l'apparence des index avec <code class="spip_code spip_code_inline" dir="ltr">xindy</code>2018-06-24T12:53:39Zhttps://geekographie.maieul.net/-171-#comment18092018-06-24T12:53:39Z<p>Merci de me fournir un <span class="caps">MWE</span>, pour que je puisse vous répondre.</p>Régler l'apparence des index avec <code class="spip_code spip_code_inline" dir="ltr">xindy</code>2018-06-23T23:03:54Zhttps://geekographie.maieul.net/-171-#comment18082018-06-23T23:03:54Z<p>Thank you for your excellent tutorial on Xindy. This is the only place where I've seen it clearly explained how one can make use, in one's tex file, of the new location-classes and attributes, for example, that one defines in one's xindy style file.</p>
<p>I'm having difficulty showing the numbers of manually defined endnotes with page numbers in the index. Your package indextools has the notenumber option for automatically generated footnotes (i.e., via \footnote command). The stackexchange item<br class="autobr">
<a href="https://tex.stackexchange.com/questions/328833/page-n-footnote-number-in-index-with-texindy" class="spip_url spip_out auto" rel="nofollow external">https://tex.stackexchange.com/questions/328833/page-n-footnote-number-in-index-with-texindy</a><br class="autobr">
is also very clear, but again applies to footnotes generated via \footnote. I tried to change the function defintions in this example but wasn't able to get what I want. All I want is to define a new function \indexen so I can type \indexen{foo,8}, for example, to get something like «<small class="fine d-inline"> </small>foo, 210n8<small class="fine d-inline"> </small>» in the printed index (if \indexen command corresponds to \thepage=210).</p>
<p>Since the note number is being provided directly, we avoid having to calculate it by analyzing the \footnote command, so my problem is actually easier than the one solved by the stackexchange item or by your \innotenumber definition in indextools. Yet I am finding it difficult to get it done<small class="fine d-inline"> </small>!</p>
<p>I'll appreciate any solution or hints. <span class="caps">BTW</span>, I read French well, so you don't need to change the language of your superb «<small class="fine d-inline"> </small>Geekographie<small class="fine d-inline"> </small>» for me. It's just that I've been long out of practice writing French and shouldn't try to make a fool of myself in yet another way<small class="fine d-inline"> </small>! Thanks.</p>Régler l'apparence des index avec <code class="spip_code spip_code_inline" dir="ltr">xindy</code>2017-03-11T14:28:16Zhttps://geekographie.maieul.net/-171-#comment17282017-03-11T14:28:16Z<p>Oui, je veux des points répartis uniformément, sans espace entre la box et \dotfill qui suit.<br class="autobr">
Donc, puisque vous me dites que votre solution est la meilleure, merci<small class="fine d-inline"> </small>!</p>Régler l'apparence des index avec <code class="spip_code spip_code_inline" dir="ltr">xindy</code>2017-03-11T14:17:13Zhttps://geekographie.maieul.net/-171-#comment17272017-03-11T14:17:13Z<p>Vous voulez des points répartis uniformément<small class="fine d-inline"> </small>? Dans ce cas ma solution est la meilleure (a vous de choisir votre facteur multiplicateur…)</p>Régler l'apparence des index avec <code class="spip_code spip_code_inline" dir="ltr">xindy</code>2017-03-11T14:13:26Zhttps://geekographie.maieul.net/-171-#comment17262017-03-11T14:13:26Z<p>Non, pas du tout voulu, ça fonctionnait, et là je viens de recompiler et ce n'est pas du tout ce que je voulais...</p>Régler l'apparence des index avec <code class="spip_code spip_code_inline" dir="ltr">xindy</code>2017-03-11T14:09:12Zhttps://geekographie.maieul.net/-171-#comment17252017-03-11T14:09:12Z<p>Avec votre code, les points ne sont pas espacés autant au début qu'à la fin. Est-ce voulu<small class="fine d-inline"> </small>?</p>Régler l'apparence des index avec <code class="spip_code spip_code_inline" dir="ltr">xindy</code>2017-03-11T13:57:19Zhttps://geekographie.maieul.net/-171-#comment17242017-03-11T13:57:19Z<p>Merci<small class="fine d-inline"> </small>!<br class="autobr">
Comme vous l'aviez pressenti, le problème se trouve dans la jonction entre la box et \dotfill.<br class="autobr">
Voici la solution qui me convient, grâce à la piste sur laquelle vous m'avez mise :</p> <textarea readonly cols="40" rows="8" class="spip_cadre spip_cadre_block" dir="ltr">\newcommand{\dotfillminimal}{% \hspace{0.2em}{.} \hspace{0.2em}{.} \hspace{0.2em}{.} \hspace{0.2em}{.} \hspace{0.2em}{.}% \dotfill%
}</textarea>
<p>Donc merci beaucoup, pour votre réactivité et l'excellente piste donnée<small class="fine d-inline"> </small>!<br class="autobr">
Meilleures salutations<small class="fine d-inline"> </small>!!</p>Régler l'apparence des index avec <code class="spip_code spip_code_inline" dir="ltr">xindy</code>2017-03-10T20:02:39Zhttps://geekographie.maieul.net/-171-#comment17232017-03-10T20:02:39Z<p>Il vous faut créer une commande qui affiche une ligne de point de sur une taille donnée, puis un <code class="spip_code spip_code_inline" dir="ltr">\dotfill</code></p>
<p>La commande <code class="spip_code spip_code_inline" dir="ltr">\dotfill</code> est définie dans <a href="https://www.tug.org/svn/texlive/trunk/Master/texmf-dist/tex/latex/base/latex.ltx?view=co" class="spip_out" rel='nofollow external'>le code source de LaTeX</a> de la manière suivante :</p>
<div class="precode"><pre class="latex spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>\def\dotfill{% \leavevmode \cleaders \hb@xt@ .44em{\hss.\hss}\hfill \kern\z@}</code></pre></div><ul class="spip"><li> <strong>l. 2</strong> on passe en mode horizontal si besoin (en début de paragraphe par exemple)</li><li> <strong>l. 3</strong> on reproduit (<code class="spip_code spip_code_inline" dir="ltr">\cleaders</code>) horizontalement (<code class="spip_code spip_code_inline" dir="ltr">\hfill<code>) à l'infini (ou plutôt jusqu'à ce qu'on rencontre du contenu) une boîte de 0,44~em de largeur (\hb@xt@ .44em) comprenant une point positionné au milieu de la boîte (<code>\hss.\hss</code>). Ceci veut dire que la longueur fixe de votre ligne de point minimum doit être un multiple de 0, 44 em et d'un entier, sinon vous aurez un problème lors du passage au <code class="spip_code spip_code_inline" dir="ltr">\dotfill</code>, avec un espace trop important (ou trop faible) entre le dernier point de votre ligne de longueur fixe et le premier point du <code class="spip_code spip_code_inline" dir="ltr">\dotfill</code>. Je suggère 2, 64 em (0,44*6).</li><li> <strong>l. 4</strong> on insère un crénage horizontal de taille nulle.</li></ul>
<p>Votre command <code class="spip_code spip_code_inline" dir="ltr">\dotfillminimal</code> peut donc être ainsi définie, de préférence dans votre préambule :</p>
<div class="precode"><pre class="latex spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>\newcommand{\dotfillminimal}{% \hbox to 2.64em{\dotfill}% \dotfill%
}</code></pre></div>
<p>C'est à dire :</p>
<ul class="spip"><li> <strong>l. 2</strong> une ligne de point de 2, 64 em</li><li> <strong>l. 3</strong> un <code class="spip_code spip_code_inline" dir="ltr">\dotfill</code> classique.</li></ul>
<p>Il vous reste à remplacer dans votre fichier <code class="spip_code spip_code_inline" dir="ltr">.xdy</code></p>
<div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>(markup-locclass-list :open "\dotfill ")</code></pre></div>
<p>par</p>
<div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>(markup-locclass-list :open "\dotfillminimal ")</code></pre></div>
<p>Et à relancer xindy avant de faire une nouvelle compilation.</p>Régler l'apparence des index avec <code class="spip_code spip_code_inline" dir="ltr">xindy</code>2017-03-10T18:54:18Zhttps://geekographie.maieul.net/-171-#comment17222017-03-10T18:54:18Z<p>Bonjour,</p>
<p>J'ai une question : pour certaines entrées d'index (qui sont des références chiffrées), j'ai de nombreux numéros de page, qui peuvent prendre plusieurs ligne.</p>
<p>Or la première ligne se colle à l'entrée d'index chiffrée, ce qui rend la lecture très peu claire.<br class="autobr">
Exemple : entrée 13, qui se trouve pages 1, 3, 7, 15, 29, etc.</p>
<p>Cela donne 13 1, 3, 7, 15 etc., le 1 de la page 1 étant collé au 13 de l'entrée d'index, parce qu'en tout il y a 50 numéros de pages à la suite où se trouve la référence 13.</p>
<p>Comment faire pour imposer par exemple 1cm (en \dotfill, puisque c'est ce que j'utilise comme liaison entre les entrées d'index et les n° de page) systématiquement, au minimum, entre l'entrée d'index et les numéros de page, aussi nombreux soient-ils<small class="fine d-inline"> </small>?</p>
<p>Pour que ça fasse systématiquement 13.....1, 3, 7, 15, etc., même s'il y a plusieurs lignes de numéros de pages qui suivent le «<small class="fine d-inline"> </small>13<small class="fine d-inline"> </small>».</p>
<p>Je n'ai rien trouvé ailleurs sur internet. Une idée<small class="fine d-inline"> </small>? Merci d'avance...</p>
<p>Très bonnes salutations<small class="fine d-inline"> </small>!</p>Régler l'apparence des index avec <code class="spip_code spip_code_inline" dir="ltr">xindy</code>2016-04-13T15:35:09Zhttps://geekographie.maieul.net/-171-#comment16762016-04-13T15:35:09Z<p>Malheureusement il ne me semble pas que cela soit possible. En tout cas je ne vois pas dans l'immédiat.</p>Régler l'apparence des index avec <code class="spip_code spip_code_inline" dir="ltr">xindy</code>2016-04-13T15:01:50Zhttps://geekographie.maieul.net/-171-#comment16752016-04-13T15:01:50Z<p>Merci pour votre réponse.</p>
<p>Je me suis sans doute mal expliqué.</p>
<p>Je voudrais simplement que xindy ne prenne pas l'initiative de créer des intervalles là où l'auteur n'a pas indiqué d'intervalles avec les commandes |( et |), même si la même commande \index se retrouve aux pages 28, 29, 30, 31, et que si en revanche on donne des commandes |( et |) explicites, il en tienne compte exactement comme elles ont été entrées.</p>
<p>J'ai vu qu'on peut empêcher xindy de couper un intervalle 28—29 <strong>demandé explicitement avec |( et |)</strong> en 28, 29 en prenant 2 pour valeur par défaut de la longueur minimum des intervalles, mais est-ce qu'alors il ne va pas créer des intervalles 31—32, etc. chaque fois qu'il verra la même commande \index sur deux pages consécutives<small class="fine d-inline"> </small>?</p>
<p>Pour les autres demandes, je ne sais pas s'il y a moyen d'y satisfaire. Si on me dit que c'est possible uniquement au moyen d'un fichier de style .xdy, je peux me lancer dans cet apprentissage. Mais s'il faut reprogrammer xindy, je renonce.</p>
<p><span class="caps">A.B.</span></p>Régler l'apparence des index avec <code class="spip_code spip_code_inline" dir="ltr">xindy</code>2016-04-13T13:02:06Zhttps://geekographie.maieul.net/-171-#comment16742016-04-13T13:02:06Z<p>Bonjour,</p>
<p>je vous invite à lire le paragraphe 4.3 du présent article qui vous donne tous les outils pour régler ce genre de détail… Ou alors je n'ai rien compris à ce que vous entrez comme commande et ce que vous attendez comme sortie, ce qui est bien possible…</p>Régler l'apparence des index avec <code class="spip_code spip_code_inline" dir="ltr">xindy</code>2016-04-13T12:51:48Zhttps://geekographie.maieul.net/-171-#comment16732016-04-13T12:51:48Z<p>Bonjour,</p>
<p>Je n'ai jamais écrit de fichier .xdy. Je veux bien m'y mettre, mais ce serait plus facile pour moi si quelqu'un avait déjà écrit un fichier donnant à xindy la commande simple suivante : respecter les intervalles indiqués dans le fichier Latex, ne pas prendre l'initiative de créer des intervalles. Je précise.</p>
<p>Dans ce qui suit, j'écris 28 pour une commande index située page 28, (28 pour une commande d'ouverture d'intervalle page 28, et 28) pour une commande de fermeture d'intervalle page 28.</p>
<p>Ce que je veux dire, c'est que aussi bien makeindex que xindy font, sauf erreur, la chose suivante :</p>
<p>(28 29) produit 28, 29 au lieu de 28—29<br class="autobr">
(28 29) 30 produit 28—30 au lieu de 28—29, 30<br class="autobr">
(28 29) (30 32) produit 28—32 au lieu de 28—29, 30—32</p>
<p>Merci pour toute aide,</p>
<p>André Bellaïche</p>