LaTeX 实现定理环境中的具体的定理名不由小括号包裹并后接冒号

\(\qquad\!\!\)这是尝试在整理《群论》的各种定义和定理时遇到的一个实现上的问题,虽然最后整理因为时间原因被我鸽掉了但是收获了对于 \(\mathrm{\LaTeX}\) 定理环境的进一步理解,在快一年之后终于有时间写篇博文进行一下简单的记录和整理了。

\(\qquad\!\!\)根据《lshort-zh-cn》中的介绍,使用 \(\mathrm{\LaTeX}\) 排版数学和其他科技文档时,会接触到大量的定理、证明等内容。 \(\mathrm{\LaTeX}\) 提供了一个基本的命令\newtheorem 提供定理环境的定义:

1
2
\newtheorem{⟨theorem environment⟩}{⟨title⟩}[⟨section-level⟩]
\newtheorem{⟨theorem environment⟩}[⟨counter⟩]{⟨title⟩}

定义了一个显示为 title 的 theorem environment 环境,可以使用这个环境排版定理、证明等内容:

\(\qquad\!\!\)\(\mathrm{\LaTeX}\) 默认的定理环境格式为粗体标签、斜体内容、定理名用小括号包裹。如果需要修改格式,则要依赖其它的宏包,如 amsthm、ntheorem 等等。但是因为我在进行整理的时候使用了 ctex 文档类,所以并不能直接使用 lshort 中介绍的 amsthm 宏包,所以选择使用 ntheorem 宏包进行格式的修改。

\(\qquad\!\!\)参考 tse 中的这个回答,我们可以通过参考 thp.sty 中的对于定理环境的定义,并进行一定的修改实现:

1
2
3
4
5
6
7
8
\makeatletter
\gdef\th@plain{\normalfont\itshape
\def\@begintheorem##1##2{%
\item[\hskip\labelsep \theorem@headerfont ##1\ ##2]}%
\def\@opargbegintheorem##1##2##3{%
\labelsep0pt
\item[\hskip\labelsep \theorem@headerfont ##1\ ##2\ ##3:]}}
\makeatother

主要修改了处理带自定义名称的定理(即 @opargbegintheorem##1##2##3)的部分,为了实现对于具体的定理名不由小括号包裹并后接冒号,对于代表了具体的定理名的 ##3 去掉了小括号并且后加了冒号改为 ##3:

\(\qquad\!\!\)但是如果只是进行了这样的修改,会发现如果保持定理内容不另起一行,在定理头的冒号后会产生一小块空白,即和定理内容间的间距有些奇怪:

\(\qquad\!\!\)这是因为在 Label 和具体内容之间 \(\mathrm{\TeX}\) 会加入一小段名为 labelsep 的间距,所以我们直接在这里将这个间距设置为 0pt 去除掉即可实现“紧凑的”间距排版。

\(\qquad\!\!\)至此,我们通过使用 ntheorem 宏包并修改了部分内部实现实现了全局的定理环境中的具体的定理名不由小括号包裹并后接冒号的格式,成品样式如下:

\(\qquad\!\!\)另外,Explorer 老师也给出了参考 tse 中的另一个回答的使用 amsthm、ntheorem 和 thmtools 三个宏包的标准接口实现的方案,欢迎感兴趣的大家直接阅读 Explorer 老师的回答进行学习。

Reference

  1. lshort-zh-cn – Introduction to LATEX, in Chinese
  2. LaTeX 如何修改定理环境中的具体的定理名不由小括号包裹并后接冒号?
  3. LaTeX 如何修改定理环境中的具体的定理名不由小括号包裹并后接冒号并在定理头和定理内容间距合理的情况下保持定理内容不另起一行?(已解决)
  4. Remove parentheses from theorem without amsthm package
  5. Theorem style with line break and different brackets for title
  6. 部分学习自 AI 工具。