
나는 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}
답변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}