
Ich verwende die memoir
Klasse und definiere Theoreme mit thmtools
. Theoreme haben neben einer Nummerierung oft auch einen Namen. Ich möchte einen \fullref
Befehl 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 memoir
und cleveref
im 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 Theorem
und 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}
Antwort2
Die folgenden Anwendungenzref
als Alternative zucleveref
zur Erstellung eines neuenEigentumaufgerufen envname
(ähnlich wie das, was vom Modul bereitgestellt wird ), das entweder oder den Namen der Entität zref-env
speichert :\<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}