定理和归因,无需重新定义定理风格

定理和归因,无需重新定义定理风格

我正在使用 ntheorem 包中的 theoremstyle marginbreak,如下所示:

\theoremstyle{marginbreak}
\theoremindent1cm
\newtheorem{teo}{Theorem}[chapter]

问题是,当我想指定参考或归属时,如

\begin{teo}[Pitagora]
    $a^2+b^2=c^2$
\end{teo}

方括号内的文字以粗体显示。

我看过这个答案:ntheorem 和 theoremname。但由于我对 theoremstyles 不太熟悉,所以我无法重新定义 marginbreak 样式。

另一方面,以下工作:

\begin{teo}[\normalfont Pitagora]
    $a^2+b^2=c^2$
\end{teo}

但当然每次都写 \normalfont 不是解决办法。如果这是一个命令,而不是环境,我会这样做:

\renewcommand{\teo}[1]{\teo{\normalfont #1}}

但对于这样的环境,我却不知道该如何去做。

有什么建议么?

答案1

您的问题的答案涉及\renewtheoremstylemarginbreak环境执行。在下面的 MWE 中,请注意(##3)已扩展为{\normalfont(##3)}。通过此更改,只有定理标题的可选标题和周围的括号设置为正常(非粗体)字体。

相对于您的示例代码,我还改变了数量\theoremindent0cm使定理头的默认定位可见;使用正(负)长度右移(左移)定理头的位置。

\documentclass{book}
\usepackage{ntheorem,lipsum}
\makeatletter
\renewtheoremstyle{marginbreak}%
  {\item[\rlap{\vbox{\hbox{\theorem@headerfont
    \llap{##2}\hskip\labelsep\relax ##1\theorem@separator}\hbox{\strut}}}]}
  {\item[\rlap{\vbox{\hbox{\theorem@headerfont
    \llap{##2}\hskip\labelsep\relax ##1        {\normalfont(##3)}\theorem@separator}\hbox{\strut}}}]}
\makeatother

\theoremstyle{marginbreak}
\setlength\theoremindent{0cm} % default
\newtheorem{teo}{Theorem}[chapter]

\begin{document}
\chapter{Start}
\begin{teo}[Pitagora]
$a^2+b^2=c^2$
\end{teo}
\lipsum[2] % filler text
\end{document}

在此处输入图片描述

答案2

默认情况下,字体可以自定义,但整个标题使用相同的字体,因此如果您希望 Theorem 以粗体显示,但可选参数以正常显示,最简单的方法是复制定义并添加 normalfont,如下所示:

\documentclass{book}
\usepackage{ntheorem}


\makeatletter
\newtheoremstyle{mymarginbreak}%
  {\item[\rlap{\vbox{\hbox{\theorem@headerfont
    \llap{##2}\hskip\labelsep\relax ##1\theorem@separator}\hbox{\strut}}}]}
  {\item[\rlap{\vbox{\hbox{\theorem@headerfont
    \llap{##2}\hskip\labelsep\relax ##1\
    ({\normalfont ##3})\theorem@separator}\hbox{\strut}}}]}
\makeatother

\theoremstyle{mymarginbreak}
\theoremindent1cm


\begin{document}

\newtheorem{teo}{Theorem}[chapter]

\tracingmacros2

The problem is that when I want to specify a reference or an attribution as in

\begin{teo}[Pitagora]
    $a^2+b^2=c^2$
\end{teo}

\end{document}

答案3

你不需要重新定义事物。定理样式“继承”了它们之上的内容。所以:

\documentclass{article}
\usepackage{ntheorem}
\theoremstyle{marginbreak}
\theoremheaderfont{\normalfont}
\newtheorem{teo}{Theorem}
\begin{document}
Text

\begin{teo}[not bold]
  Text in body
\end{teo}

more text
\end{document}

基本上,\theoremheaderfont重新定义定理标题字体。所有其他设置都将从继承marginbreak。无需为这样的事情创建新的定理样式。

相关内容