Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

First off, I'm very grateful of the help this community has provided me so far. Anyway, to my problem:

I feel like I'm missing something obvious here. I want...

\documentclass{article}

\usepackage{hyperref} 
\renewcommand{\ref}{\autoref}

\begin{document}
\section{Section Title} \label{anchor}
Blah Blah Blah. \ref{anchor}
\end{document}

to print as...

1 Section Title

Blah Blah Blah. section 1

but instead I get ...

1 Section Title

Blah Blah Blah. 1

... so \ref is not being replaced with \autoref. How can I correct this? Do I have no option but to do a find-and-replace to change \ref to \autoref?

share|improve this question
    
Hmmm... Interesting.... I tried everything I know from \renewcommand, \def, \let, and \LetLtxMacro, but was not able to get \ref to produce the same output as \autoref. –  Peter Grill Dec 2 '12 at 5:56
1  
I suggest you not to try this; \ref and \autoref are semantically different and using one or the other changes how the text is laid out. –  egreg Dec 2 '12 at 10:43

1 Answer 1

up vote 13 down vote accepted

Ok, figured out a solution:

enter image description here

Notes:

  • None of the usual tricks of using:

    1. \renewcommand{\ref}[1]{\autoref{#1}}
    2. \def\ref#1{\autoref{#1}}
    3. \let\ref\autoref
    4. \LetLtxMacro\ref\autoref

    seem to work in this case.

    I suspect it is because hyperref does an \AtBeginDocument, so that some things get defined at the the start of the document. So using \AtBeginDocument puts our redefinition at the end of queue of commands that get executed \AtBeginDocument.

    And since placing the \AtBeginDocument to be before \usepackage{hyperref} does not work, this confirms that the suspicion was correct.

Code:

\documentclass{article}

\usepackage{hyperref} 


\AtBeginDocument{\renewcommand{\ref}[1]{\autoref{#1}}}

\begin{document}
\section{Section Title} \label{anchor}
Blah Blah Blah.  \autoref{anchor}  \ref{anchor}
\end{document}
share|improve this answer
    
Or simply put the command after \begin{document} –  Harish Kumar Dec 2 '12 at 6:02
    
@HarishKumar: But then that would be required in each document. Putting in the preamble is better in my opinion. –  Peter Grill Dec 2 '12 at 6:06
    
@PeterGrill: \ref is defined \Hy@AtBeginDocument - similar to \AtBeginDocument. –  Werner Dec 2 '12 at 6:22

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.