2009-09-21 7 views
3

J'ai un document de latex. J'utilise des paquets hyperref, makeidx et glossary pour mon document.Hyper liens de référence dans le document Latex commence à partir du début de la page

Tout est créé correctement; table des matières (toutes les références fonctionnent bien), glossaire et index sauf que les numéros de pages imprimés dans le glossaire et l'index sont corrects mais pointent vers les numéros de page commençant par le début du document où 10 pages sont en chiffres arabes puis en chiffres romains à partir de 1 commence.

par exemple. J'ai 10 pages pour l'avant-propos (résumé, déclaration, table des matières, etc). Après cela, mainmatter commence ainsi que les numéros de page en roman de 1. Donc sur cette page 1, j'ai une entrée d'index "bonjour"

Maintenant dans l'index, il imprime "bonjour 1" qui est correct sauf que quand on clique sur 1, alors il va à droite au début du document plutôt que numéroté page 1.

Votre aide serait grandement appréciée.

Merci, Omer

+0

Ceci est un nouveau par moi. Utilisez-vous une classe standard (article, livre, rapport ...) ou une classe personnalisée? – dmckee

+0

Une solution en utilisant \ phantomsection est ici: http://stackoverflow.com/questions/782187/latex-table-of-contents-links-to-wrong-section Cordialement! –

Répondre

2

J'ai écrit un blog post à ce sujet il ya quelque temps, expliquant comment numéroter simplement vos pages 1 ... n, en se débarrassant des chiffres romains. Cela résout votre problème, et rend la numérotation des pages judicieuses dans le lecteur PDF. Si c'est ce que vous voulez, mettez le code suivant dans votre préambule:

\let\oldsetcounter=\setcounter 
\renewcommand\setcounter[2]{% 
    \ifx\not{#1}{page}\oldsetcounter{#1}{#2}\fi} 
+0

Merci Thomas ... Mais j'ai besoin de chiffres arabes et romains pour mon document pour différentes sections. – okm

4

OK, googlefu (*) fournit http://www.tex.ac.uk/cgi-bin/texfaq2html?label=pdfpagelabels où est dit que c'est un problème de savoir, et propose deux options au package hyperref:

  • plainpages=false
  • pdfpagelabels

bien que Arns que ceux-ci ne fonctionnera pas dans chaque situation (mais je crois qu'il sera dans le vôtre). L'application devrait ressembler à quelque chose comme:

\usepackage[plainpages=false,pdfpagelabels,pagebackref]{hyperref} 

dans votre préambule.

A défaut, le http://en.wikibooks.org/wiki/LaTeX/Hyperlinks fournit une astuce clunkie qui fonctionnera dans les endroits où les opérations ci-dessus échouent. (Faites défiler jusqu'à la section "Problèmes avec les liens".)

Espérons que cela aide.

(*) Il s'avère que j'ai trouvé ce genre de choses à cause d'une faute de frappe, et j'ai demandé à google pour "hyperef frontmatter" plutôt que "hyperref frontmatter". Certains jours, vous avez juste de la chance.

+0

J'essaie ... plainpages = fasle n'a pas fonctionné Je ne suis pas sûr de savoir comment utiliser pdfpagelables et où ?? – okm

+0

Ici: '\ usepackage [pdfpagelabels] {hyperref}'. – Thomas

+0

J'ai essayé toutes les options, y compris "Problèmes avec des liens" mais cela n'a pas fonctionné. – okm

0

Je ne sais pas si cela va fonctionner du tout, mais avez-vous essayé d'ajouter

\ frontmatter

\ mainmatter

\ backmatter

dans les endroits appropriés?

Notez que cela ne vaut que pour le livre & classes comme le livre, pas l'article, lettre, etc.

+0

Oui! Tout cela fonctionne. Ce n'est pas un problème de frontmatter, mainmatter et backmatter; Si vous lisez mon premier message, j'ai décrit que tout va bien, sauf les hyperrefs dans le glossaire et l'index qui impriment correctement les pages mais qui ne sont pas correctement reliés. – okm

+0

ressemble à un problème de compteur de pages. avez-vous essayé de définir un compteur au début de \ frontmatter, puis un autre compteur à \ mainmatter? – Mica

0

Ceci est un sale tour, mais il fonctionne

\newcounter{glshyperpage}% 
\def\glshyper#1#2{% 
\setcounter{glshyperpage}{#2}% 
\addtocounter{glshyperpage}{6}%number of front-matter pages 
(\hyperlink{#1.\theglshyperpage}{#2})} 
1

Ok cette question est vieux , mais j'ai rencontré le même problème et j'ai dû trouver une solution. La solution implique un peu de tex hacking et n'est pas générique mais vous devriez pouvoir l'adapter à votre cas particulier.

Le problème

Le paquet d'index génère des liens en utilisant la macro \hyperpage, qui prend un seul argument: il imprime ce numéro et lien vers la page qui a ce nombre absolu.

solution ad hoc

Enregistrement du nombre de pages en la matière avant dans une macro, puis déplacer toutes les ancres de page par ce même numéro.

Dans la pratique

Cette solution est fragile car si le code de votre style de livre ou les paquets hyperref changements, il ne fonctionnera plus. Encore c'est une solution de travail pour moi. j'ai modifié le \frontmatter macro dans mon style de livre:

(nouvelles lignes ajoutées sont les lignes 2 et 3, notez que nous devons décrémenter par 1 que le calcul se produit sur la nouvelle page numérotée « 1 »)

\newcommand\mainmatter{\clearemptydoublepage 
    \count0=\value{page}\advance\count0 by -1 
    \xdef\pagesfrontmatter{\the\count0} 
    \@mainmattertrue\pagenumbering{arabic}} 

Puis vient une partie plus délicate. Le \hyperpage embarque beaucoup de code, et peut gérer par exemple des arguments comme '2,4' ou '3-5', nous devons donc modifier la macro de fin qui produit réellement le texte et le lien hypertexte. Si vous regardez hyperref.sty, vous le trouverez nommé \[email protected]. Nous devons redéfinir seulement pour l'indice afin que chaque lien a le même texte, mais l'ancre est décalé de la bonne quantité (lignes modifiées sont celles dont les références à \count0):

{ % open local group 
% locally change how hyperpage creates hyperlinks to take 
% frontmatter pages into account 
\makeatletter 
\def\[email protected]#1 #2\@nil{% 
    \[email protected]=\expandafter{\the\[email protected]#1}% 
    \ifx\\#2\\% 
    \edef\x{\the\[email protected]}% 
    \ifx\x\@empty 
    \else 
     \count0=\the\[email protected]\advance\count0 by \pagesfrontmatter% 
     \hyperlink{page.\the\count0}{\the\[email protected]}% 
    \fi 
    \else 
    \[email protected]{% 
     \[email protected]#2\@nil 
    }% 
    \fi 
} 
\makeatother 

\printindex 
} % close local group 
0

Il suffit de mettre l'option hypertextnames=true dans votre \usepackage{hyperref}, c.-à-mettre quelque chose comme

\usepackage[hypertexnames=true]{hyperref} 

dans votre préambule.

Questions connexes