Bitten Sie `\autoref`, den Umgebungsnamen ohne Nummer anzuzeigen

Bitten Sie `\autoref`, den Umgebungsnamen ohne Nummer anzuzeigen

Ich verwende die memoirKlasse und definiere Theoreme mit thmtools. Theoreme haben neben einer Nummerierung oft auch einen Namen. Ich möchte einen \fullrefBefehl schreiben, der den Namen der Umgebung (hier Theorem) zusammen mit ihrem angegebenen Namen, aber ohne Nummer ausgibt. (Dieser Befehl sollte für jede Umgebung funktionieren, für die ein Name definiert ist, z. B. über \myenvautorefname.)

Ich habe früher den folgenden Befehl verwendet, den Sie hier auf TeX SE finden:

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

Leider stehen memoirund cleverefim Widerspruch zueinander. Daher möchte ich darauf verzichten cleveref.

Es scheint, dass ich mit only den gleichen Effekt erzielen kann autoref. Der Befehl

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

fastmacht, was ich will, außer dass es die Theoremnummer zwischen Theoremund dem Theoremnamen anzeigt.

Hier ist ein MWE, das den obigen Befehl veranschaulicht:

\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}

Dank im Voraus!

Antwort1

Warum nicht verwenden 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> mit <code>memoir</code>

Antwort2

Die folgenden Anwendungenzrefals Alternative zucleverefzur Erstellung eines neuenEigentumaufgerufen envname(ähnlich wie das, was vom Modul bereitgestellt wird ), das entweder oder den Namen der Entität zref-envspeichert :\<env>autorefname\@currenvircurrenvir

Bildbeschreibung hier eingeben

\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}

verwandte Informationen