仅为 Theorem Header 添加背景颜色

仅为 Theorem Header 添加背景颜色
\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

好的,首先让我们解决这里的一些明显的问题。

  1. 你周围的\makeatletter和是不必要的。删除它们。用火烧死它们。\makeatother\theoremstyle

  2. 在我看来,这是一个错误,它\newtheoremstyle让你可以覆盖定理样式,而不会发出任何警告。我建议你改写

    \newtheoremstyle{color}
       ... all the bits of declaration here
    \theoremstyle{color}
    \newtheorem{theorem}{Theorem}
    
  3. 我看到过各种各样的

    \newtheorem{theorem}{Theorem}
    \counterwithin*{theorem}{section}
    

    我认为人们已经忘记了可选参数\newtheorem。我建议不要使用上述公式,而是改为这样写:

    \newtheorem{theorem}{Theorem}[section] % ❶
    \RenewExpandableDocumentCommand{\thetheorem}{}{\arabic{theorem}} % ❷
    

    使用尾随可选参数 ❶ 来\newtheorem指定其中的编号,然后重新定义 ¹ ² \thetheorem❷ 以省略章节编号。³

  4. 这纯粹是偶然事件,\section{Theorem 2}不会引发错误,但应该

    \begin{theorem}
    Theorem 2
    \end{theorem}
    

    \section{Theorem 2}如果文档中还有后续内容,您很快就会发现。

  5. 像这样的命令\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

  1. 是的,我会继续使用\NewDocumentCommand和朋友,直到我再也见不到其他人\newcommand等等。

  2. 值得注意的是,我们在这里使用\RenewExpandableDocumentCommand而不是\RenewDocumentCommand,以便我们将在参考文献等中获得定理数的正确值。

  3. 虽然如果你这样做,你真的应该考虑定义\p@theorem将章节编号重新添加到参考文献中,以使其清晰哪个正在引用定理 1。

  4. 为了清楚起见,我替换了一些内部宏定义。

  5. 其中还有一件事——内容的默认设置是\thmnumber查看是否提供了定理标签,如果没有,则省略空格。这让你看到了一些有点奇怪的事情:

     \newtheorem{foo}{}
    

    得到一个没有标签但有数字的定理。这实际上对于练习列表很有用。

相关内容