J'aimerais utiliser la commande \autoref de l'extension hyperref afin de me faciliter un peu la vie. Celle-ci fonctionne à merveille, sauf s'il me vient l'envie de la personnaliser un peu. Par exemple, ce code compilé avec XeLaTeX :

Ouvrir dans l'éditeur
\documentclass[french]{article}

\usepackage{fontspec}
\usepackage{babel}
\usepackage{hyperref}

\addto\extrasfrench{\renewcommand{\itemautorefname}{objet \no}}

\begin{document}

\begin{enumerate}
\item Premier item\label{item1}
\item Second item\label{item2}
\end{enumerate}

Voir objet \no \ref{item1}

Voir \autoref{item2}

\end{document}

Il produit chez moi un espace indésirable entre le « n° » et le numéro de l'item affiché, alors que tout se passe très bien avec le classique \ref. D'où vient ce problème ?

Posée 04 Nov '15, 13:33

Namrod's gravatar image

Namrod
283714
Taux d'acceptation : 20%

Modifiée 04 Nov '15, 14:32

Pathe's gravatar image

Pathe ♦♦
7.4k29196245


Il faut commenter l'espace insécable qui est automatiquement mis par la macro \HyRef@testreftype.

Ouvrir dans l'éditeur
\documentclass[french]{article}

\usepackage{fontspec}
\usepackage{hyperref}
\usepackage{babel}

\addto\extrasfrench{\renewcommand{\itemautorefname}{objet \no}}
\makeatletter
\def\HyRef@testreftype#1.#2\\{%
  \ltx@IfUndefined{#1autorefname}{%
    \ltx@IfUndefined{#1name}{%
      \HyRef@StripStar#1\\*\\\@nil{#1}%
      \ltx@IfUndefined{\HyRef@name autorefname}{%
        \ltx@IfUndefined{\HyRef@name name}{%
          \def\HyRef@currentHtag{}%
          \Hy@Warning{No autoref name for `#1'}%
        }{%
          \edef\HyRef@currentHtag{%
            \expandafter\noexpand\csname\HyRef@name name\endcsname
            \noexpand~%
          }%
        }%
      }{%
        \edef\HyRef@currentHtag{%
          \expandafter\noexpand
          \csname\HyRef@name autorefname\endcsname
          \noexpand~%
        }%
      }%
    }{%
      \edef\HyRef@currentHtag{%
        \expandafter\noexpand\csname#1name\endcsname
        \noexpand~%
      }%
    }%
  }{%
    \edef\HyRef@currentHtag{%
      \expandafter\noexpand\csname#1autorefname\endcsname
      %\noexpand~% <---- espace "indésirable" ici !
    }%
  }%
}
\makeatother
\begin{document}

\begin{enumerate}
\item Premier item\label{item1}
\item Second item\label{item2}
\end{enumerate}

Voir objet \no \ref{item1}

Voir \autoref{item2}.

\end{document}
Lien permanent

Publiée 04 Nov '15, 17:24

unbonpetit's gravatar image

unbonpetit ♦♦
1.8k18
Taux d'acceptation : 68%

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.