\documentclass[english,11pt]{book}
%------------------------------------------------------------------------------------ %
%
\usepackage[fleqn]{amsmath} %
\usepackage{amsthm,amssymb} %
\usepackage[T1]{fontenc} %
\usepackage{newtxtext} %
\usepackage{newtxmath} %
\usepackage{xcolor} %
\usepackage[paperwidth=170mm,paperheight=240mm,textwidth=132mm,lmargin=12.5mm,rmargin=12.5mm,
bindingoffset=12.5mm,noheadfoot,nomarginpar,showframe,showcrop]{geometry} %
\usepackage[a4,frame,cam,center]{crop}
\usepackage{refcount} %
\usepackage{hyperref} %
%
\setlength{\unitlength}{1pt}
\setlength{\parskip}{0pt}
\setlength\parindent{0pt}
\definecolor{DarkRed}{rgb}{0.45,0.06,0.06} % #880000
\makeatletter
\newtheoremstyle{plain}
{4pt} % ABOVESPACE
{6pt} % BELOWSPACE
{\itshape\color{blue}} % BODYFONT
{6pt} % INDENT (empty value is the same as 0pt)
{\color{DarkRed}\bfseries}% HEADFONT
{\:.} % HEADPUNCT
{5pt plus 1pt minus 1pt} % HEADSPACE
{} % CUSTOM-HEAD-SPEC
\newtheorem{theorem}{Theorem}
\makeatother
\counterwithin*{theorem}{section}
\begin{document}
\vspace*{12pt}
\section{Section ONE}
\begin{theorem}
Theorem 1
\end{theorem}
\theorem{Theorem 2}
\end{document}
答案1
编辑:我更喜欢以下使用包的新解决方案tcolorbox
:
\documentclass[english,11pt]{book}
%------------------------------------------------------------------------------------ %
%
\usepackage[fleqn]{amsmath} %
\usepackage{amsthm,amssymb} %
\usepackage[T1]{fontenc} %
\usepackage{newtxtext} %
\usepackage{newtxmath} %
\usepackage[dvipsname]{xcolor} %
\usepackage[paperwidth=170mm,paperheight=240mm,textwidth=132mm,lmargin=12.5mm,rmargin=12.5mm,
bindingoffset=12.5mm,noheadfoot,nomarginpar,showframe,showcrop]{geometry} %
\usepackage[a4,frame,cam,center]{crop}
\usepackage{refcount} %
\usepackage{hyperref} %
\usepackage{tcolorbox}
%
\setlength{\unitlength}{1pt}
\setlength{\parskip}{0pt}
\setlength\parindent{0pt}
\definecolor{DarkRed}{rgb}{0.45,0.06,0.06} % #880000
\makeatletter
\newtheoremstyle{plain}
{4pt} % ABOVESPACE
{6pt} % BELOWSPACE
{\itshape\color{blue}} % BODYFONT
{6pt} % INDENT (empty value is the same as 0pt)
{} % HEADFONT
{} % HEADPUNCT
{5pt plus 1pt minus 1pt} % HEADSPACE
% CUSTOM-HEAD-SPEC
{\raisebox{0pt}{{%\frame{\colorbox{yellow}
{%
\textbf{%
\bfseries%
\tcbox[size=title, on line, hbox, colback=red!5!white, colframe=red!75!black]{%
\textcolor{DarkRed}{%
\thmname{#1}%
\thmnumber{ #2}%
\thmnote{ (#3)}%
.%
}%
}%
}%
}}}%
}
\newtheorem{theorem}{Theorem}
\makeatother
\counterwithin*{theorem}{section}
\begin{document}
\vspace*{12pt}
\section{Section ONE}
\begin{theorem}
Theorem 1
\end{theorem}
\theorem{Theorem 2}
\theorem[note]{Theorem 3}
\end{document}
以下是我使用\frame
和的原始解决方案\colorbox
:
\documentclass[english,11pt]{book}
%------------------------------------------------------------------------------------ %
%
\usepackage[fleqn]{amsmath} %
\usepackage{amsthm,amssymb} %
\usepackage[T1]{fontenc} %
\usepackage{newtxtext} %
\usepackage{newtxmath} %
\usepackage[dvipsname]{xcolor} %
\usepackage[paperwidth=170mm,paperheight=240mm,textwidth=132mm,lmargin=12.5mm,rmargin=12.5mm,
bindingoffset=12.5mm,noheadfoot,nomarginpar,showframe,showcrop]{geometry} %
\usepackage[a4,frame,cam,center]{crop}
\usepackage{refcount} %
\usepackage{hyperref} %
%
\setlength{\unitlength}{1pt}
\setlength{\parskip}{0pt}
\setlength\parindent{0pt}
\definecolor{DarkRed}{rgb}{0.45,0.06,0.06} % #880000
\makeatletter
\newtheoremstyle{plain}
{4pt} % ABOVESPACE
{6pt} % BELOWSPACE
{\itshape\color{blue}} % BODYFONT
{6pt} % INDENT (empty value is the same as 0pt)
{} % HEADFONT
{} % HEADPUNCT
{5pt plus 1pt minus 1pt} % HEADSPACE
% CUSTOM-HEAD-SPEC
{\raisebox{-3pt}{\frame{\colorbox{yellow}{%
\textbf{%
\bfseries%
\textcolor{DarkRed}{%
\thmname{#1}%
\thmnumber{ #2}%
\thmnote{ (#3)}%
.%
}%
}%
}}}%
}
\newtheorem{theorem}{Theorem}
\makeatother
\counterwithin*{theorem}{section}
\begin{document}
\vspace*{12pt}
\section{Section ONE}
\begin{theorem}
Theorem 1
\end{theorem}
\theorem{Theorem 2}
\end{document}
答案2
好的,首先让我们解决这里的一些明显的问题。
你周围的
\makeatletter
和是不必要的。删除它们。用火烧死它们。\makeatother
\theoremstyle
在我看来,这是一个错误,它
\newtheoremstyle
让你可以覆盖定理样式,而不会发出任何警告。我建议你改写\newtheoremstyle{color} ... all the bits of declaration here \theoremstyle{color} \newtheorem{theorem}{Theorem}
我看到过各种各样的
\newtheorem{theorem}{Theorem} \counterwithin*{theorem}{section}
我认为人们已经忘记了可选参数
\newtheorem
。我建议不要使用上述公式,而是改为这样写:\newtheorem{theorem}{Theorem}[section] % ❶ \RenewExpandableDocumentCommand{\thetheorem}{}{\arabic{theorem}} % ❷
使用尾随可选参数 ❶ 来
\newtheorem
指定其中的编号,然后重新定义 ¹ 、 ²\thetheorem
❷ 以省略章节编号。³这纯粹是偶然事件,
\section{Theorem 2}
不会引发错误,但应该\begin{theorem} Theorem 2 \end{theorem}
\section{Theorem 2}
如果文档中还有后续内容,您很快就会发现。像这样的命令
\vspace
实际上不属于文档。如果您希望在那里留出更多空间,则应修改文档类以将其插入到 之前\section
,而不是像这样添加一些视觉格式,尤其是对于要提交发布的内容。在这种情况下,您可能已经将其放入,因为您弄乱了页面几何形状,并且标题行覆盖了文本块÷
现在来回答一下实际问题
如果您只想向头部添加背景颜色,则需要使用最后一个参数来执行此操作\newtheoremstyle
。
最后一个参数的默认设置实际上并没有在任何地方记录,但最终是:⁴⁵
\thmname{#1}\thmnumber{ \textup{#2}}% ❸
\thmnote{ {\fontseries\mddefault\upshape(#3)}}
据我所知,对 ❸ 的调用\textup
似乎是多余的,但如果你想要将一个定理标记为定理 1并想知道为什么结果会是定理1反而。
宏\thmname
,\thmnumber
并\thmnote
检查是否提供了其相关参数。如果没有,则忽略参数的内容,这是一种简单的方法,可以消除定理编号和定理之间的空格(如果不存在该编号)。我们假设至少存在一个表述名称(例如“定理”)和编号,以便得出替代定义。我们可以使用
\colorbox{pink}{\thmname{#1}\thmnumber{ \textup{#2}}}%
\thmnote{ {\fontseries\mddefault\upshape(#3)}}
话虽如此,头部标点符号将出现在颜色框之外,我不得不假设\:
句号前的 是一个错误,因为我无法想象有人会故意想要在句号前留出那么大难看的空格。通过自定义头部规范将句号带入颜色框内看起来更好。您可能还想将 带入\thmnote
颜色框内,但这取决于您。这是一个完整的\newthoremstyle
:
\newtheoremstyle{color}
{4pt} % ABOVESPACE
{6pt} % BELOWSPACE
{\itshape\color{blue}} % BODYFONT
{6pt} % INDENT (empty value is the same as 0pt)
{\color{DarkRed}\bfseries}% HEADFONT
{} % HEADPUNCT
{5pt plus 1pt minus 1pt} % HEADSPACE
{\colorbox{pink}{\thmname{#1}\thmnumber{ \textup{#2}}.}%
\thmnote{ {\fontseries\mddefault\upshape(#3)}}} % CUSTOM-HEAD-SPEC
是的,我会继续使用
\NewDocumentCommand
和朋友,直到我再也见不到其他人\newcommand
等等。值得注意的是,我们在这里使用
\RenewExpandableDocumentCommand
而不是\RenewDocumentCommand
,以便我们将在参考文献等中获得定理数的正确值。虽然如果你这样做,你真的应该考虑定义
\p@theorem
将章节编号重新添加到参考文献中,以使其清晰哪个正在引用定理 1。为了清楚起见,我替换了一些内部宏定义。
其中还有一件事——内容的默认设置是
\thmnumber
查看是否提供了定理标签,如果没有,则省略空格。这让你看到了一些有点奇怪的事情:\newtheorem{foo}{}
得到一个没有标签但有数字的定理。这实际上对于练习列表很有用。