![thmtools 中的样式继承](https://linux22.com/image/421716/thmtools%20%E4%B8%AD%E7%9A%84%E6%A0%B7%E5%BC%8F%E7%BB%A7%E6%89%BF.png)
在下面的 MWE 中,我定义了两种定理样式remark
和definition
,除了几个键值对之外,它们应该是相同的。
我想remark
在的声明中重用的样式definition
,但简单地style=remark
在其内部使用却不起作用。
\documentclass{article}
\usepackage{amsthm}
\usepackage{thmtools}
\declaretheoremstyle[
headfont=\sffamily\bfseries,
postheadspace=.5em,
]{remark}
\declaretheoremstyle[
% style=remark, % <-- is there a way to make this work?
headfont=\sffamily\bfseries,
postheadspace=.5em,
notefont=\normalfont,
]{definition}
\declaretheorem[
style=remark,
name=Remark,
]{remark}
\declaretheorem[
style=definition,
name=Definition,
]{definition}
\begin{document}
\begin{remark}[ name={foo} ]
This is a remark.
\end{remark}
\begin{definition}[ name={bar} ]
This is a definition.
\end{definition}
\end{document}
答案1
style
以下是可用密钥的实现\declaretheoremstyle
。还发布在相应的 thmtools 上github 问题。由于 amsthm 预定义了remark
和definition
样式,我已将您的样式重命名为myremark
和mydefinition
(它仍将按您的方式工作,但重命名可避免在此示例中产生混淆)。
\documentclass{article}
\usepackage{amsthm}
\usepackage{thmtools}
\makeatletter
\define@key{thmstyle}{style}{%
\thmt@inheritstyle{#1}%
}
\def\thmt@inheritstyle#1{
\ifcsname thmt@style@#1@setdefaultkeys\endcsname%
\csname thmt@style@#1@setdefaultkeys\endcsname%
\else
\PackageError{thmtools}{No style `#1' defined}{}%
\fi
}
\renewcommand\declaretheoremstyle[2][]{%
\def\thmt@style{#2}%
\@xa\def\csname thmt@style \thmt@style @defaultkeys\endcsname{}%
\thmt@declaretheoremstyle@setup
\kvsetkeys{thmstyle}{#1}%
\thmt@declaretheoremstyle{#2}%
\@xa\def\csname thmt@style@\thmt@style @setdefaultkeys\endcsname{% ADDED
\kvsetkeys{thmstyle}{#1}% ADDED
}% ADDED
}
\def\thmt@style@plain@setdefaultkeys{}
\def\thmt@style@definition@setdefaultkeys{%
\kvsetkeys{thmstyle}{%
bodyfont=\normalfont
}%
}
\def\thmt@style@remark@setdefaultkeys{%
\kvsetkeys{thmstyle}{%
spaceabove=0.5\topsep,
spacebelow=0.5\topsep,
headfont=\itshape,
bodyfont=\normalfont
}%
}
\makeatother
\declaretheoremstyle[
headfont=\sffamily\bfseries,
postheadspace=.5em,
]{myremark}
\declaretheoremstyle[
style=myremark,
notefont=\normalfont,
]{mydefinition}
\declaretheorem[
style=myremark,
name=Remark,
]{remark}
\declaretheorem[
style=mydefinition,
name=Definition,
]{definition}
\begin{document}
\begin{remark}[name=foo]
This is a remark.
\end{remark}
\begin{definition}[name=bar]
This is a definition.
\end{definition}
\end{document}
正如我在 github 问题中提到的,最好给它一个像 这样的名称inherit-style
。