60

Is it possible to make \nameref display not only the title of the section but also its number?

\section{First Section}
\label{sec:some_sec}

\subsection*{Unnumbered subsection}
\label{sec:subsec}

[...]

As we defined in section \nameref{sec:some_sec}, yada yada yada, see section \nameref{sec:subsec}

With normal \nameref I get:

"As we defined in section First Section, yada yada yada, see section Unnumbered subsection"

what I want is a combination of numbers (as in \autoref} and section names AND (if possible) unnumbered subsections should inherit the number of the parenting section:

"As we defined in section 1 First Section, yada yada yada, see section 1 Unnumbered subsection"

4
  • 7
    section~\ref{sec:some_sec} \nameref{sec:some_sec}
    – egreg
    Jun 30, 2013 at 18:05
  • Welcome to TeX.SX! You can have a look on our starter guide to familiarize yourself further with our format. Jun 30, 2013 at 18:18
  • 1
    Your label {sec:subsec} has a negative effect. You are using \subsection* and so there is no anchor (number) for any label. Jun 30, 2013 at 18:55
  • Marco, the answer works as I described above. For un-numbered subsections the number of the parenting section should be used -- and this is the case. Also, when i click the text in the PDF I get to the subsection (as expected). Thats exactly what I wanted ;)
    – cpt. jazz
    Jun 30, 2013 at 19:02

2 Answers 2

61

How about defining a new command \fullref:

\documentclass{article}
\usepackage[colorlinks=true]{hyperref}

% Original definition
% \newcommand\fullref[1]{\autoref{#1} \nameref{#1}} % Two links

% Updated definition, see explanation below
\newcommand*{\fullref}[1]{\hyperref[{#1}]{\autoref*{#1} \nameref*{#1}}} % One single link

\begin{document}

\section{First Section}
\label{sec:some_sec}

\subsection*{Unnumbered subsection}
\label{sec:subsec}

[...]

As we defined in \fullref{sec:some_sec}, yada yada yada, see \fullref{sec:subsec}

\end{document}

enter image description here


Update

The \fullref defined above produces two links, one by \autoref, the other by \nameref. Heiko Oberdiek suggests the following definition that combines the two into one single link:

\newcommand*{\fullref}[1]{\hyperref[{#1}]{\autoref*{#1} \nameref*{#1}}}
10
  • 15
    You get a full link in one piece by \newcommand*{\fullref}[1]{\hyperref[{#1}]{\autoref*{#1} \nameref{#1}}}. Jun 30, 2013 at 21:14
  • 2
    I have added the star for \nameref that I have forgotten in the comment. The star forms prevent nested double links. Jun 30, 2013 at 23:32
  • 1
    Don't you need to add \usepackage{nameref} for this to work? Jan 13, 2015 at 13:29
  • 1
    It conflicts with the titlesec package. The reference prints things like "chapter 2" instead of the name of the section.
    – Velkan
    Nov 23, 2016 at 9:30
  • 1
    @HeikoOberdiek if I want to capitalize the first letter, can I use \newcommand*{\fullref}[1]{\hyperref[{#1}]{\Cref*{#1} \nameref*{#1}}} with cleveref package or is there a better way?
    – Diaa
    Apr 29, 2017 at 7:32
2

Starting with @herr-k 's answer, I went a step farther and defined four (4) new commands: \secref, \subsecref, \subsubsecref, and \parref.

\newcommand*{\secref}[1]{\hyperref[{#1}]{Specification \thesection, \nameref*{#1}}}
\newcommand*{\subsecref}[1]{\hyperref[{#1}]{Section \thesubsection, \nameref*{#1}}}
\newcommand*{\subsubsecref}[1]{\hyperref[{#1}]{Section \thesubsubsection, \nameref*{#1}}}
\newcommand*{\parref}[1]{\hyperref[{#1}]{Section \theparagraph, \nameref*{#1}}}

Doing so allows me to customize how the hyperlink text displays for each level of my document. In my case, There's not a difference between the \subsecref, \subsubsecref, and \parref other than the number that displays (e.g. 1.1 vs 1.1.1 vs 1.1.1.A), but one can change these commands to suit their needs.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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