L'ECM suivant génère l'affichage d'une \pageref dont le label correspond à un document pdf inclus avec la commande \includepdf de l'extension pdfpages.

Le numéro affiché est juste (c'est celui de la dernière page du document, mais si je veux la première page, il suffit de les inclure séparément).

Le problème c'est que le lien créé par hyperref ne correspond pas (dans mon document original, il renvoie à la page précédente, avec l'ECM il renvoie en bas de la première page, soit 2 pages avant.

J'ai exploré la doc d'hyperref, mais mon niveau d'anglais (et de \LaTeX ?) ne m'ont pas suffisamment éclairé.

\documentclass[french]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{pdfpages}
\usepackage[french]{babel}
\usepackage[hidelinks]{hyperref}
\begin{document}
Introduction, voir le document pages~\pageref{ici}, 
affiche bien la bonne page, mais le lien dirige sur la page précédente (Blabla)
\pagebreak

Blabla

\pagebreak

\includepdf[pages=1-2,pagecommand={\label{ici}}]{document.pdf}

\end{document}

Posée 28 Sep '22, 16:06

joseph-tux's gravatar image

joseph-tux
42722450
Taux d'acceptation : 4%

Modifiée 29 Sep '22, 15:31

Pathe's gravatar image

Pathe ♦♦
7.4k28196245

Je ne sais pas comment mettre/utiliser un fichier pdf ici, pour que la compilation fonctionne sur cette page.

(28 Sep '22, 16:08) joseph-tux joseph-tux's gravatar image

Le \pagecommand n'a pas de sens, le \label ici est créé deux fois.

(28 Sep '22, 19:37) Ulrike Fischer Ulrike%20Fischer's gravatar image

\documentclass[french]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage{pdfpages}
\usepackage[french]{babel}
\usepackage[hidelinks]{hyperref}
\begin{document}
Introduction, voir le document pages~\hyperlink{example-image-a4-numbered.pdf.1}{\pageref*{ici.1}}%
 --\hyperlink{example-image-a4-numbered.pdf.2}{\pageref*{ici.2}},,
affiche bien la bonne page, mais le lien dirige sur la page précédente (Blabla)

\newpage

Blabla

\newpage
\includepdf[pages=1-2,link,
   pagecommand={\label{ici.\csname AM@page\endcsname}}]
    {example-image-a4-numbered}

\end{document}
Lien permanent

Publiée 28 Sep '22, 19:53

Ulrike%20Fischer's gravatar image

Ulrike Fischer
6193
Taux d'acceptation : 58%

Modifiée 31 Oct '22, 08:52

denis's gravatar image

denis ♦♦
7.0k1510

Merci, merci aussi de me faire (re?)découvrir aussi \hyperlink et donner à apprendre \csname et son mystérieux AM@page.

(01 Oct '22, 14:34) joseph-tux joseph-tux's gravatar image
\documentclass[french]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage{pdfpages}
\usepackage[french]{babel}
\usepackage[hidelinks]{hyperref}
\newcounter{includepdfpage}
\begin{document}
Introduction, voir le document pages~\pageref{ici.1}--\pageref{ici.2},
affiche bien la bonne page, mais le lien dirige sur la page précédente (Blabla)

\newpage

Blabla

\newpage
\includepdf[pages=1-2,link,
   pagecommand={\refstepcounter{includepdfpage}\label{ici.\csname AM@page\endcsname}}]
    {example-image-a4-numbered}

\end{document}
Lien permanent

Publiée 30 Oct '22, 22:00

vincentb1's gravatar image

vincentb1
1874
Taux d'acceptation : 0%

Modifiée 31 Oct '22, 11:41

Il faut un \refstepcounter pour que l'ancre soit identifiée dans le .aux. Les commandes \section, \subsection, etc. les environnements table, ou figure, font implicitement ce \refstepcounter, mais là dans votre cas je crée un compteur includepdfpage (que vous auriez pu nommer autrement), et je fais \refstepcounter{includepdfpage}.

Avec votre code on a dans le .aux ceci (qui ne marche pas) :

\newlabel{ici.1}{{}{3}{}{}{}}
\newlabel{ici.2}{{}{4}{}{}{}}

Avec le code corrigé on a ceci dans le .aux :

\newlabel{ici.1}{{1}{3}{}{includepdfpage.1}{}}
\newlabel{ici.2}{{2}{4}{}{includepdfpage.2}{}}

De même pour la référence, au lieu de \hyperlink{example-image-a4-numbered.pdf.1}{\pageref*{ici.1}}, utilisez juste \pageref{ici.1} qui donnera à la fois le texte du lien et le lien vers la bonne ancre.

Notez bien que le numéro de l'ancre includepdfpage.1 n'est que par hasard le même que celui de l'étiquette ici.1, si vous aviez inclus les pages 6 et 7 du document, vous auriez eu ici.6 mais toujours includepdfpage.1 lui correspondant et ici.7 avec includepdfpage.2 lui correspondant, c'est à dire qu'avec le code corrigé que j'ai proposé les ancres sont numérotées séquentiellement de la première page incluse à la dernière incluse. Si par exemple vous incluez les pages 3, 7 et 10 d'un document docA.pdf, et ensuite les pages 7 et 28 d'un document docB.pdf, alors l'ancre correspondant à la page 7 de docA.pdf sera includepdfpage.2, et celle correspondant à la page 28 de docB.pdf sera includepdfpage.5, et dans ce cas vous auriez certainement fabriqué des étiquettes avec un radical différent, par ex. iciA pour docA.pdf dont la page 7 incluse serait désignée par l'étiquette iciA.7, et iciB pour docB.pdf dont la page 7 incluse serait désignée par l'étiquette iciB.7 et a donc une étiquette différente de iciA.7.

Si vous voulez que les ancres aient le même numéro que celui de la page du document d'origine, par exemple pour que ce soit plus facile de faire référence à ces ancres depuis un autre document avec le paquetage xr (cf. https://latexref.xyz/fr/xr-package.html) alors il vous faudrait quelque chose reprenant AM@page, du genre de :

pagecommand={\setcounter{includepdfpage}{\numexpr\csname AM@page\endcsname-1}%
  \refstepcounter{includepdfpage}\label{ici.\csname AM@page\endcsname}}

Dans ce cas d'ailleurs, pour la même raison d'éviter toute collision de noms, il serait préférable d'utiliser un compteur différent par document inclus, par. ex. Si vous incluiez les pages de deux documents docA.pdf et docB.pdf, vous définiriez par exemple des compteurs includepdfpageA et includepdfpageB. Ainsi, si vous incluez à la fois la page 7 de docA.pdf et la page 7 de docB.pdf vous avez des ancres différentes includepdfpageA.7 et includepdfpageB.7.

Lien permanent

Publiée 30 Oct '22, 22:06

vincentb1's gravatar image

vincentb1
1874
Taux d'acceptation : 0%

Modifiée 31 Oct '22, 12:15

À noter finalement, que si cela vous suffit que les étiquettes soient numérotées non pas avec la page du document d'origine, mais séquentiellement sur tout le document chapeau, alors faire ceci suffit :

pagecommand={\refstepcounter{includepdfpage}\label{ici.\theincludepdfpage}

Dans ce cas si vous incluez les pages 3, 7, et 10, elles seront désignées par les étiquettes ici.1, ici.2 et ici.3.

Lien permanent

Publiée 31 Oct '22, 12:20

vincentb1's gravatar image

vincentb1
1874
Taux d'acceptation : 0%

Votre réponse
(dés)activer l'aperçu

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.