如何通过 \label 创建带有标签的 tcolorbox 定理环境
我有一些自动生成的代码,看起来像
\begin{thm}[Title with \(\LaTeX\)]
\label{label}
Here is a theorem
\end{thm}
我想在 tcolorbox 中渲染该定理。我可以使用\newtheorem{thm}{Theorem}
命令\tcolrboxenvironment{thm}{options}
在它周围放置一个框,但我不想只在环境周围放置一个框。我想更好地控制它的显示方式。我想使用 tcolorboxes 来显示该定理,这样它就会像下面这样出现(当然我会有一个更有趣的风格):
\usepackage[most]{tcolorbox}
\tcbset{mystyle/.style={}}
\newtcbtheorem{thm}{Theorem}{mystyle}{}
\newcommand{\thmautorefname}{Theorem}
\begin{thm}[label=label]{My theorem \(x^2\)}{}
Here is a theorem
\end{thm}
并使用各种 ref 命令引用定理,例如
\nameref{label} with number \ref{label} and autoref \autoref{label}
问题是创建的环境\newtcbtheorem
需要的语法与自动生成的代码不同。
我有一个方法,即创建自己的环境,但我觉得要实现这个目标需要重新发明很多轮子。我希望可以使用tcolorbox
和的某种组合来完成这项工作。amsthm
这是当前解决方案的 MWE,我在其中创建了环境来包装 tcolorboxes。我的实际解决方案稍微复杂一些,因为我创建了一个类似于\newtheorem{thm}{Theorem}
创建环境的宏,带有共享计数器,然后我感觉我开始重新发明 amsthm!
\documentclass{article}
\usepackage[most]{tcolorbox}
\usepackage{hyperref}
\tcbset{mystyle/.style={}}
\makeatletter
\newcounter{thm}
\newenvironment{thm}[1][]
{\refstepcounter{thm}
\protected@edef\@currentlabelname{#1}
\begin{tcolorbox}[title={Theorem \@currentlabel{}: #1}, mystyle]}
{\end{tcolorbox}}
\newcommand{\thmautorefname}{Theorem}
\makeatother
\begin{document}
\begin{thm}[My Theorem \(x^2\)]
\label{label}
Here is a theorem.
\end{thm}
\nameref{label} with number \ref{label} and autoref \autoref{label}
\end{document}