I came across not-so-expected behavior in `nameref`

, the package responsible for creating named references, when used in conjunction with theorem environments such as the one provided by `amsthm`

. For example take a look at the following LaTeX document.

```
\documentclass{article}
\usepackage{amsmath,hyperref}
\begin{document}
\section{My Section}
\newtheorem{theorem}{Theorem}
\begin{theorem}[My Theorem]
\label{theo:My}0=0
\end{theorem}
This is a named reference: \nameref{theo:My}
\end{document}
```

You would expect the named reference to refer to the **theorem’s** name. However in reality it refers to the **section’s** name.

While searching for a solution I came across the following answer by Catalin in StackOverflow, which suggest it’s an old bug in `nameref`

that (according to the mailing list conversation he linked to) should have been resolved in` nameref-2.37`

. This is a conversation from 2010, but my Ubuntu 12.04 still has `nameref-2.31`

from 2007.

It seems like Ubuntu is a bit behind at updating TeXLive. I’m considering at installing off-the-repo TeXLive so I would have up-to-date TeX installation. I think I had in my two years ago more up-to-date version of TeXLive. Migrating to the official distribution would probably fix the Debian bug causing the installation of culmus-latex to fail as well.

But in the meantime I’ve looked for a workaround. After reading the `nameref`

documentation, I concluded that the problem is that nameref doesn’t properly hook the theorem-like environments to set the `\@currentlabelname`

. A possible workaround requires defining the theorem environment using `thmtools`

. The `thmtools`

gives us the `\thmt@optarg`

command which expands to the name passed to the theorem environment, so we’re able to set `\@currentlabelname`

properly. Basically, you need to add the following line after the `\begin{theorem}[some name]`

and before the `\label`

part:

```
\makeatletter \let\@currentlabelname\thmt@optarg\makeatother
```

A full example this looks like this:

```
\documentclass{article}
\usepackage{amsmath,thmtools,hyperref}
\declaretheorem{theorem}
\begin{document}
\section{My Section}
\begin{theorem}[My Theorem]
\makeatletter \let\@currentlabelname\thmt@optarg\makeatother
\label{theo:My}0=0
\end{theorem}
This is a named reference: \nameref{theo:My}
\end{document}
```

I think a better solution would be to automatically hook after the `\begin{theorem}`

to add the fix. This is maybe possible using `\addtotheorempostheadhook`

, but I haven’t figured it out yet.

**Update** 2012-12-16: I’ve installed the offical TeXLive 2012, and it was easier than I thought. It also, as expected, fixed the problem.