引用命名的 tcbtheorems

引用命名的 tcbtheorems

我的目标与这个问题但是,我想使用包\newtcbtheorem来实现同样的效果tcolorbox。例如

\documentclass{article}

\usepackage{nameref}
\usepackage{tcolorbox}
\tcbuselibrary{theorems}

\newtcbtheorem{thm}{Theorem}{}{thm}

\begin{document}

\begin{thm}{My awesome theorem}{awesome}
Isn't this theorem so awesome?
\end{thm}

This is a reference to \nameref{thm:awesome}.

\end{document}

应该打印“这是对我的令人敬畏的定理的引用。”。

\newtcbtheorem不幸的是,如果我使用而不是 ,链接问题的答案将不再有效\newtheorem。有没有办法修改该答案以使其在这种情况下有效?

\begin{thm}\end{thm}(请注意,由于这里未提及的原因,将通过调用创建的包装\newtheorem在 a 中\tcbenvironment不是一个选项。)

答案1

原因是\@currentlabelname没有定义,它被写入了.auxbynameref的版本\label

解决这个问题最简单的方法是打补丁或稍微重新定义,用设置\@currentlabelname{##2}稍后会扩展以包含定理名称。(补丁也可以!)

\documentclass{article}

\usepackage{tcolorbox}
\tcbuselibrary{theorems}

\makeatletter


\renewcommand{\new@tcbtheorem}[5][]{%
  \@@newtcolorbox[auto counter,#1]{#2}[3][]{#4,%
    title={\tcb@theo@title{#3}{\thetcbcounter}{##2}},%
    list entry={\protect\numberline{\thetcbcounter}##2},%
    code={\gdef\@currentlabelname{##2}\tcb@theo@label{#5}{##3}},%
    ##1}%
  \@@newtcolorbox[#1,no counter,list inside=]{#2*}[2][]{#4,%
    title={\tcb@theo@title{#3}{\@empty}{##2}},%
    ##1}%
}
\makeatother




\usepackage{nameref}
\usepackage{hyperref}

\newtcbtheorem{thm}{Theorem}{}{thm}


\begin{document}

This is a reference to \nameref{thm:awesome} and \ref{thm:awesome}%

\clearpage
\begin{thm}{My awesome theorem}{awesome}
Isn't this theorem so awesome?
\end{thm}



\end{document}

在此处输入图片描述

答案2

感谢 Christian Hupfer 在他的回答中解决了这些请求。

我可以添加一个更短的方法来实现基督徒的解决方案:

\documentclass{article}

\usepackage{nameref}
\usepackage{hyperref}
\usepackage{tcolorbox}
\tcbuselibrary{theorems}

\makeatletter
 \newtcbtheorem{thm}{Theorem}{code={\edef\@currentlabelname{#2}}}{thm}
%\newtcbtheorem{thm}{Theorem}{code={\NR@gettitle{#2}}}{thm}  % alternatively, if nameref is loaded
\makeatother

\begin{document}

This is a reference to \nameref{thm:awesome} and \ref{thm:awesome}%

\clearpage
\begin{thm}{My awesome test theorem}{awesome}
Isn't this theorem so awesome?
\end{thm}

\end{document}

相关内容