[Tex/LaTex] Cite a theorem by its name and number

theorems

I don't know if this is possible to do in Latex, but here's what I'd like to do. I want to cite a theorem using its label, but what should appear is both its theorem number and its name (the text in square brackets after \begin{theorem}).

For example, consider the following theorem definition:

\begin{theorem}[Triangle inequality]\label{thm:triangle}

……

\end{theorem}

When I cite this, I want to be able to write something like

This is easily proved using the \SomeCommand{thm:triangle}.

What I would like to appear is

This is easily proved using the Triangle inequality (Theorem 1).

Ideally, the text will also be hyperlinked to the theorem.

Can this be done?

Best Answer

Here are two approaches. First, you can combine \ref and \nameref to format as desired. Second, you can use \mylabel to save preformatted text. The advantage of the latter is that it is implemented as a single hyperlink.

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

\newtheorem{theorem}{Theorem}

\makeatletter
\@ifpackageloaded{hyperref}%
  {\newcommand{\mylabel}[2]% #1=name, #2 = contents
    {\protected@write\@auxout{}{\string\newlabel{#1}{{#2}{\thepage}%
      {\@currentlabelname}{\@currentHref}{}}}}}%
  {\newcommand{\mylabel}[2]% #1=name, #2 = contents
    {\protected@write\@auxout{}{\string\newlabel{#1}{{#2}{\thepage}}}}}
\makeatother

\begin{document}
\begin{theorem}[Triangle inequality]\label{thm:triangle}
\mylabel{text:triangle}{Triangle inequality (Theorem \thetheorem)}
\end{theorem}
This is easily proved using the \nameref{thm:triangle} (Theorem \ref{thm:triangle}).

\medskip\noindent
This is easily proved using the \ref{text:triangle}.
\end{document} 

demo

Related Question