2 votes

Inclusion de marques de hachage dans un fichier LaTeX \indexentry alias avec un \newcommand

C'est un cas étrange. J'ai dû faire quelques détours intéressants pour qu'il fonctionne un tant soit peu, mais nous avons une autre pierre d'achoppement.

Je me suis efforcé de créer un document séparé qui utilise un grand fichier .ind (index créé à l'aide de makeindex à partir de petits fichiers .idx individuels caténaires), l'idée étant d'obtenir un document unique qui indique les sous-documents et les numéros de page où se trouvent les données indexées.

A cette fin, j'ai dû définir une commande qui collecte toutes les entrées d'index comme :

\newcommand{\myindexer}[3]
    {\index{myindex}{#1 : #2.#3!\href{\doctitle.pdf}}}

Le résultat est des entrées d'index dans le fichier myindex.idx comme :

\indexentry{IndexedItemA : 55.iii!\href{Volume 1.pdf}{Volume 1.pdf}}{30}}
\indexentry{IndexedItemB : 23.vi!\href{Volume 3.pdf}{Volume 3.pdf}}{114}}

Pourtant, le problème existe lorsqu'on essaie de créer un hyperréflexe vers le PDF cible. Pour ouvrir un PDF à une page spécifique, le format suivant doit être utilisé (merci à quelqu'un d'autre sur ce forum d'avoir signalé la syntaxe #page.xx dans le package hyperref) :

\href{FILENAME#page.XX}{Link Text}

ce qui signifie qu'une marque de hachage doit être incluse dans le flux de sortie de l'application \newcommand lorsque myindex est déclaré, en utilisant éventuellement une marque de hachage échappée # comme :

\newcommand{\myindexer}[3]
    {\index{myindex}{#1 : #2.#3!\href{\doctitle.pdf\#page.\thepage}}}

ou selon un fragment que j'ai trouvé quelque part en utilisant une marque à double hachage comme :

\newcommand{\myindexer}[3]
    {\index{myindex}{#1 : #2.#3!\href{\doctitle.pdf##page.\thepage}}}

La première entraîne l'erreur suivante lors de la compilation de la source latex pour les multiples documents indexés :

! Illegal parameter number in definition of \@gtempa.
<to be read again>
                   \thepage
l.31 \myindex{IndexedItemA}{55}{iii}

Alors que la seconde entraîne une barre oblique inversée indésirable dans le fichier myindex.idx résultant comme :

\indexentry{IndexedItemA : 55.iii!\href  {Volume 1.pdf\#page.33}{Volume 1}}{33}

ce qui fait que le PDF cible ne s'ouvre pas correctement.

Avez-vous une idée de la manière dont on peut forcer la newcommand à produire la marque de hachage pour permettre l'établissement d'hyperliens entre les PDF de cette manière ?

0voto

AVB Points 2924

Et si on enveloppait le \href sur \protect ?

0voto

Charles Stewart Points 7698

Vous pouvez échanger les code-barres de # et de % :

\\catcode\`\\%=6 \\catcode\`\\#=12

Utilisez ensuite % pour marquer les paramètres :

\\newcommand{\\myindexer}\[3\]
    {\\index{myindex}{%1 : %2.%3!\\href{\\doctitle.pdf#page.\\thepage}}}

Après cela, rétablissez les codes-catalogues habituels :

\\catcode\`\\%=12 \\catcode\`\\#=6

C'est un peu maladroit, mais cela devrait fonctionner même si quelque chose interfère avec les mécanismes d'échappement habituels, et cela permet à \href pour être extensible au point \myindexer est utilisé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X