thmtools 中的样式继承

thmtools 中的样式继承

在下面的 MWE 中,我定义了两种定理样式remarkdefinition,除了几个键值对之外,它们应该是相同的。

我想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 预定义了remarkdefinition样式,我已将您的样式重命名为myremarkmydefinition(它仍将按您的方式工作,但重命名可避免在此示例中产生混淆)。

\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

相关内容