我用来declaretheoremstyle
定义一个定理环境,并在我的文档末尾打印一个定理列表:
\documentclass{article}
\usepackage[english]{babel}
\usepackage[margin=2cm]{geometry}% just for the example
\usepackage{xcolor}
\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{mdframed}
\declaretheoremstyle[
spaceabove=6pt, spacebelow=6pt,
headfont=\normalfont\bfseries,
postheadspace=1em,
notefont=\bfseries,
notebraces={(}{)},
bodyfont=\itshape,
shaded={bgcolor=yellow!20}
]{thmstyle}
\declaretheorem[style=thmstyle,name=Theorem]{theorem}
\begin{document}
\begin{theorem}[name]
...
\end{theorem}
\renewcommand{\listtheoremname}{List of Theorems}
\addcontentsline{toc}{section}{\listtheoremname}
\listoftheorems[ignoreall,show=theorem]
\end{document}
定理列表打印在最后(请忽略字体颜色):
现在,问题是如何直接打印定理的名称,而不是总是重复“Theorem(”?
有人可以帮忙吗?
答案1
不确定这是否是你想要的:
\documentclass{article}
\usepackage[english]{babel}
\usepackage[margin=2cm]{geometry}% just for the example
\usepackage{xcolor}
\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{mdframed}
\usepackage{etoolbox}
\makeatletter
\patchcmd\thmt@mklistcmd
{\thmt@thmname}
{\check@optarg{\thmt@thmname}}
{}{}
\patchcmd\thmt@mklistcmd
{\thmt@thmname\ifx}
{\check@optarg{\thmt@thmname}\ifx}
{}{}
\protected\def\check@optarg#1{%
\@ifnextchar\thmtformatoptarg\@secondoftwo{#1}%
}
\makeatother
\declaretheoremstyle[
spaceabove=6pt, spacebelow=6pt,
headfont=\normalfont\bfseries,
postheadspace=1em,
notefont=\bfseries,
notebraces={(}{)},
bodyfont=\itshape,
shaded={bgcolor=yellow!20}
]{thmstyle}
\declaretheorem[style=thmstyle,name=Theorem]{theorem}
\begin{document}
\begin{theorem}[Somebody]
...
\end{theorem}
\begin{theorem}
...
\end{theorem}
\renewcommand{\listtheoremname}{List of Theorems}
\addcontentsline{toc}{section}{\listtheoremname}
\listoftheorems[ignoreall,show=theorem]
\end{document}