Попросите `\autoref` отобразить имя среды без номера

Попросите `\autoref` отобразить имя среды без номера

Я использую memoirкласс и определяю теоремы с помощью thmtools. Теоремы часто имеют имя, помимо нумерации. Я хочу написать \fullrefкоманду, которая выводит имя среды (здесь, Theorem) вместе с ее именем, но без ее номера. (Эта команда должна работать для любой среды, для которой определено имя, например, через \myenvautorefname.)

Раньше я использовал следующую команду, которую можно найти здесь, на TeX SE:

\newcommand{\fullref}[1]{\hyperref[#1]{\namecref{#1}\ \nameref*{#1}}}

К сожалению, memoirи cleverefконфликтуют друг с другом. Поэтому я бы хотел обойтись без cleveref.

Кажется, я смогу добиться того же эффекта, используя autorefтолько. Команда

\newcommand{\fullref}[1]{\hyperref[#1]{\autoref*{#1}\ \nameref*{#1}}}

почтиделает то, что мне нужно, за исключением того, что отображает номер теоремы между Theoremи названием теоремы.

Вот MWE, иллюстрирующий приведенную выше команду:

\documentclass{memoir}

\usepackage{amsthm,thmtools}
\usepackage{nameref}
\usepackage{hyperref}

\declaretheorem{theorem}
\renewcommand{\theoremautorefname}{Theorem}

\newcommand{\fullref}[1]{\hyperref[#1]{\autoref*{#1}\ \nameref*{#1}}}

\begin{document}
  \begin{theorem}[Whatever]
    \label{thm:whatever}
    Some witty theorem.
  \end{theorem}

  % The following outputs "Theorem 1 Whatever".
  % I would like "Theorem Whatever".
  Consider \fullref{thm:whatever}.
\end{document}

Заранее спасибо!

решение1

Почему бы не использовать cleveref?!

\documentclass{memoir}

\usepackage{amsthm,thmtools}
\usepackage{nameref}
\usepackage{hyperref}
\usepackage{cleveref}

\declaretheorem{theorem}
\renewcommand{\theoremautorefname}{Theorem}

\newcommand{\fullref}[1]{\hyperref[#1]{\namecref{#1}\ \nameref*{#1}}}

\begin{document}
  \begin{theorem}[Whatever]
    \label{thm:whatever}
    Some witty theorem.
  \end{theorem}

  % The following outputs "Theorem 1 Whatever".
  % I would like "Theorem Whatever".
  Consider \fullref{thm:whatever}.
\end{document}

<code>cleveref</code> с <code>мемуарами</code>

решение2

Следующие примененияzrefкак альтернативаcleverefчтобы создать новыйсвойствоназывается envname(аналогично тому, что предоставляется модулем zref-env), который хранит либо \<env>autorefnameили \@currenvir- имя currобъекта envir:

введите описание изображения здесь

\documentclass{memoir}

\usepackage{amsthm,thmtools,zref}
\usepackage{hyperref}% Loads nameref

\makeatletter
\zref@newprop{envname}[??]{%
  \expandafter\ifx\csname\@currenvir autorefname\endcsname\relax
    \@currenvir
  \else
    \csname \@currenvir autorefname\endcsname
  \fi}%
\AtBeginDocument{
  \let\oldlabel\label
  \renewcommand{\label}[1]{\zref@labelbyprops{#1}{envname}\oldlabel{#1}}
}
\newcommand{\fullref}[1]{%
  \zref@refused{#1}% Mark label as used
  \hyperref[#1]{\zref@extract{#1}{envname}\ \nameref*{#1}}}
\makeatother


\declaretheorem{theorem}
\renewcommand{\theoremautorefname}{Theorem}

\begin{document}

\begin{theorem}[Whatever]
  \label{thm:whatever}
  Some witty theorem.
\end{theorem}

% The following outputs "Theorem Whatever".
Consider \fullref{thm:whatever}.
\end{document}

Связанный контент