我正在使用 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
您的问题的答案涉及\renewtheoremstyle
对marginbreak
环境执行。在下面的 MWE 中,请注意(##3)
已扩展为{\normalfont(##3)}
。通过此更改,只有定理标题的可选标题和周围的括号设置为正常(非粗体)字体。
相对于您的示例代码,我还改变了数量\theoremindent
以0cm
使定理头的默认定位可见;使用正(负)长度右移(左移)定理头的位置。
\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
。无需为这样的事情创建新的定理样式。