숫자 없이 환경 이름을 표시하려면 `\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>memoir</code>가 포함된 <code>cleveref</code>

답변2

다음 용도zref대안으로cleveref새로운 것을 만들다재산또는 엔터티 이름 을 저장하는 envname(모듈에서 제공하는 것과 유사 ) 호출됩니다 .zref-env\<env>autorefname\@currenvircurrenvir

여기에 이미지 설명을 입력하세요

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

관련 정보