Problème avec l'adresse d'un site

Bonjour à tous,

Dans un texte en latex je veux donner une référence qui consiste en un pdf qui est en libre téléchargement. Je donne donc l'adresse du site.
Manque de pot, cette adresse comporte un "~" et deux "_", donc ça me génère des erreurs de compilation.
Comment régler le problème ?

Merci d'avance

Martial

Réponses

  • Bonjour Martial,

    Il y a plusieurs façons de faire. Pour les URLs, je dirais en première approche hyperref ou xurl. hyperref permet d'avoir des liens cliquables dans le PDF, c'est évidemment un plus. Mais il faut savoir qu'il doit être chargé en dernier (sauf exceptions comme cleveref qui doit être chargé après) et quand on le charge, il y a souvent quelques warnings qui apparaissent et nécessitent un peu de travail pour s'en débarasser (en général, c'est dû aux caractères mathématiques ou spéciaux dans les titres, car ces derniers deviennent des “bookmarks” du PDF et il faut que chacun d'entre eux ait une version qui passe avec les limitations inhérentes aux bookmarks du format PDF).

    NB : les “bookmarks” sont souvent affichés à gauche dans les lecteurs PDF et contiennent généralement les premiers niveaux de la table des matières, cliquables et en dehors de la zone réservée à la page.

    L'autre possibilité est le package xurl (ou le package url plus ancien). Il y en a encore d'autres, mais qui sont « bof ».

    Je te propose de mettre 1) en préambule, \usepackage{hyperref} en respectant ce que j'ai dit sur l'ordre de chargement et 2) dans le corps du document :
    \url{ton URL}
    
    ou bien
    \href{ton URL}{description}
    
    Ensuite, il faut compiler au moins deux fois (le format du fichier .aux change lorsqu'on utilise hyperref, donc il est normal d'avoir des erreurs la première fois après changement) et regarder la sortie textuelle de LaTeX (erreurs, warnings...). Si les couleurs des liens, de la table des matières, etc. ne te conviennent pas, tu peux utiliser \hypersetup{allcolors=black} ou quelque chose comme
    \hypersetup{anchorcolor=...,linkcolor=...,urlcolor=...,citecolor=...}
    
    après avoir chargé hyperref (on peut aussi les passer en option à hyperref).

    Il y a quelques cas où l'utilisation de hyperref peut légèrement modifier la mise en page (environnements de liste...).

    Edit : hyperref a aussi un certain nombre de problèmes de compatibilité avec d'autres packages, notamment titlesec. Voir Special support for other packages, Package Compatibility dans le manuel de hyperref.
  • Merci Brian, je vais essayer ta méthode.
  • Bonjour,
    J'en profite pour demander, brian : connais-tu une façon de faire revenir à la ligne l'url pour éviter ce que l'on voit dans l'image jointe ? J'utilise hyperref.106094
  • Bonjour Calli,

    La documentation de hyperref indique l'option 'breaklinks' :
    Allows link text to break across lines; since this cannot be accommodated in PDF, it is only set true by default if the pdftex driver is used. This makes links on multiple lines into different PDF links to the same target.
    Ah, mais c'est sans doute déjà ce que tu utilises. Je pense qu'il ne veut pas couper ton URL entre deux lettres car on pourrait croire que le tiret fait partie de l'URL. Compliqué... Tu aurais peut-être plus de chances avec xurl, mais je crains que le lien ne soit pas cliquable dans ce cas. Sinon, si tu mets ton URL dans une \footnote, peut-être tient-elle en une seule ligne ? Autrement, si ce n'est pas pour imprimer, utilise \href et le problème est réglé.
  • Merci brian. J'ai essayé breaklinks, mais ça ne marche pas. J'utiliserai \href, c'est plus simple (ça n'est pas pour imprimer).
  • L'option 'breaklinks' est active par défaut avec pdfTeX ; c'est peut-être pour ça que cette option ne change rien pour toi. Je me demande si tu n'utilises pas une vieille version de hyperref, car dans un de mes documents, les liens très longs sont bien coupés (voir premier attachement). Ma version de hyperref est « 2020-05-15 v7.00e » (c'est écrit dans le fichier .log).

    Dans un package perso, j'utilise les macros suivantes pour avoir un résultat plaisant tant en sortie papier qu'en sortie écran et pour que tout soit écrit en noir dans la version papier. Il faut décommenter la ligne \toggletrue{SortiePapier} pour activer la sortie papier. Même si les liens sont en noir dans cette dernière, ils sont fonctionnels (ils peuvent donner lieu à une info-bulle et sont cliquables). Ne pas oublier de remettre 'https' avant le ':// ' comme indiqué en commentaire à la fin du document ci-dessous.

    N.B. : tout ce qu'il y a entre \ExplSyntaxOn et \ExplSyntaxOff fait partie du package perso — pas besoin d'y toucher. Le reste est un mini-exemple d'utilisation.
    \documentclass[a4paper,11pt,french]{article}
    \usepackage{lmodern}
    \usepackage[T1]{fontenc}
    \usepackage[utf8]{inputenc}
    \usepackage{babel}
    \usepackage{amsmath}
    \usepackage{etoolbox}
    \usepackage{xparse}
    \usepackage[svgnames]{xcolor}
    \usepackage{hyperref}
    
    \newtoggle{SortiePapier}        % initialement faux
    %\toggletrue{SortiePapier}
    
    \ExplSyntaxOn
    \msg_new:nnn { flo-misc } { invalid-boolean-string-passed-to-cs }
      {
        Invalid~value~passed~to~\token_to_str:N #1:~
        '\exp_not:n {#2}'~(valid~choices~are~'true'~and~'false')
      }
    
    % Internal variables for \floHref
    \bool_new:N \g_flohref_footnote_deferred_bool
    \tl_new:N \g_flohref_deferred_footnotetext_tl
    
    % Whether to include URLs as hyperlinks or in footnotes
    \bool_new:N \g_flohref_usehyperlinks_bool
    \bool_gset_true:N \g_flohref_usehyperlinks_bool % default value
    
    % Customization functions for \floHref
    \NewDocumentCommand \floHrefSetUseHyperlinksFromBoolExpr { m }
      {
        \bool_gset:Nn \g_flohref_usehyperlinks_bool {#1}
      }
    
    \NewDocumentCommand \floHrefSetUseHyperlinks { m }
      {
        \str_case_e:nnF {#1}
          {
            { true }  { \floHrefSetUseHyperlinksFromBoolExpr { \c_true_bool } }
            { false } { \floHrefSetUseHyperlinksFromBoolExpr { \c_false_bool } }
          }
          {
            \msg_fatal:nnnn { flo-misc } { invalid-boolean-string-passed-to-cs }
              { \floHrefSetUseHyperlinks }
              {#1}
          }
      }
    
    % Insert a URL with optional link text. In print mode, if the link text is
    % provided, then the URL is put inside a footnote after the link text.
    %
    % #1: URL
    % #2: link text (optional)
    % #3: pass 'intertext' if this \floHref call is inside the argument of
    %     amsmath's \intertext command and call
    %     \floHrefMaybeInsertDeferredFootnote after the display (optional)
    %
    % Example with the third argument as 'intertext':
    %
    %   \begin{align*}
    %     ...
    %     \intertext{ ... \floHref{url}[link text][intertext] ... } ...
    %   \end{align*}
    %   \floHrefMaybeInsertDeferredFootnote
    \NewDocumentCommand \floHref { m o o }
    {
      \IfValueTF {#2}
        { % The link text was provided (#2)
          \bool_if:nTF { \g_flohref_usehyperlinks_bool }
            { \href {#1} {#2} }
            {
              #2
              \str_if_eq:eeTF {#3} { intertext } % inside an \intertext arg?
                {
                  \footnotemark
                  % Flag saying we still have to issue a \footnotetext command
                  \bool_gset_true:N \g_flohref_footnote_deferred_bool
                  % Store \url{#1} for later use (when we're out of the \intertext
                  % argument).
                  \tl_gset:Nn \g_flohref_deferred_footnotetext_tl { \url {#1} }
                }
                {
                  \footnote { \url {#1} }
                }
            }
        }
        { % No link text provided
          \url {#1}
        }
    }
    
    % *Must* be called after calling \floHref with 'intertext' as the optional
    % parameter #3. This call of course has to be inserted when one is out of the
    % \intertext argument, that's the whole point.
    \NewDocumentCommand \floHrefMaybeInsertDeferredFootnote { }
    {
      \bool_if:NT \g_flohref_footnote_deferred_bool
        { \footnotetext { \g_flohref_deferred_footnotetext_tl } }
    
      % The footnote text has been set, reset the flag.
      \bool_gset_false:N \g_flohref_footnote_deferred_bool
    }
    \ExplSyntaxOff
    
    \iftoggle{SortiePapier}{%
      \floHrefSetUseHyperlinks{false}%
      \hypersetup{colorlinks=true,allcolors=black}%
    }{%
      \floHrefSetUseHyperlinks{true}%
      \hypersetup{colorlinks=true,urlcolor=DarkBlue}%
    }%
    
    \begin{document}
    
    $G_x$ est le stabilisateur de $x$ (noté $\operatorname{St}_x$
    % Remettre https avant le :// (je l'ai enlevé car sinon, le forum casse mon lien).
    \floHref{://fr.wikipedia.org/wiki/Action_de_groupe_(math\%C3\%A9matiques)\#Stabilisateur_d.27un_.C3.A9l.C3.A9ment}%
      [sur Wikipédia]).
    
    \end{document}
    
    106116
    106118
    106120
    106122
  • J'ai vu dans le fichier hyperref.sty que j'ai la version 2018/02/06 v6.86b d'hyperref. J'ai téléchargé la version 2020-05-15 v7.00e sur CTAN, mais je ne sais pas l'installer ensuite. (:P)
  • Ben... il faudrait en savoir plus. Quelle distribution TeX utilises-tu ? Sous quel OS ? Les méthodes manuelles sont indiquées dans le README.md ici et dépendent du fichier .zip que tu as téléchargé.

    À noter que lorsqu'on installe un package manuellement, par exemple dans ~/texmf sous Linux, le jour où la distribution TeX est mise à jour, il faut penser à faire le ménage de ce qui a été installé manuellement, sinon les packages installés à la main vont cacher ceux plus à jour de la distribution.
  • Ok. Je vais garder la version 2018. Ça ne vaut pas la peine de me prendre la tête (et de te prendre la tienne) pour ça. Merci brian.
  • Comme tu veux, mais si tu as une TeX Live configurée de manière standard sous Linux, il suffit de télécharger hyperref.tds.zip, le décompresser dans ~/texmf et lancer
    mktexlsr ~/texmf
    
    en simple utilisateur (en fait, la commande n'est pas nécessaire sous Debian actuelle, ça dépend de la config de TeX Live ; de toute façon, elle ne peut pas faire de mal). Pour revenir au point de départ, il suffit d'effacer les fichiers qui ont été décompressés dans ~/texmf et de relancer la commande.
  • Bonjour,
    Peut-être pouvez-vous essayer de faire précéder dans l'url tout signe underscore (_) d'un backslash (\) et remplacer les lettres écrites non en clair (avec des % et des chiffres) par le code leur correspondant (par exemple remplacer %C3%A9 par \'{e} dans mathématiques}.
    Cordialement,
    Aline
Connectez-vous ou Inscrivez-vous pour répondre.