自动以粗体形式排版章节标题中的数学内容

自动以粗体形式排版章节标题中的数学内容

这个问题的动机是一位正在写数学论文的朋友向我提出的问题。他的章节标题偶尔会包含数学,其中:

  • 他希望用粗体来与章节标题的其余部分相匹配;但是
  • 他希望当它出现在目录中时,其权重是中等的,就像其余的章节标题一样。

他使用\mathbf粗体显示章节标题中的数学符号;这当然也会使它们在目录中变为粗体。我给了他一个简单的解决方案,在目录的开头插入代码,这样就可以不加任何\mathbf改动地传递其参数。当然,\mathbf也会使其参数直立而不是斜体显示,我认为这也不太理想;而且它对例如 希腊字符,因此您必须使用类似\bm命令的命令。(您可以在目录中使用与bm.sty相同的技巧,但对于章节标题中的所有数学运算,必须重复使用不同的数学宏,这对我来说似乎不太优雅。)\bm\mathbf

什么是最优雅的方式,可以自动将所有数学字符(包括非拉丁字符)以粗体形式呈现在章节标题中,但在其他地方(包括目录的条目)使用正常的中等粗体?

答案1

最简单的事情是修补\@startsection\@chapter(假设bookreport类):

\usepackage{etoolbox}
\makeatletter
% \tracingpatches
\patchcmd{\@sect}{#8}{\boldmath #8}{}{}
\let\ori@chapter\@chapter
\def\@chapter[#1]#2{\ori@chapter[\boldmath#1]{\boldmath#2}}
\makeatother

#8\@sect是包含标题的参数;但\boldmath不会泄漏到目录或标题中(对于标题,如果需要粗体标题,则使用fancyhdr和发出就足够了)。\boldmath

它不适用于\paragraph\subparagraph,也不适用于。偶尔提出 的论点\chapter*应该没有问题。\boldmath\chapter*

答案2

我发现这里有一个非常有效的解决方案——将以下内容添加到文档序言中

\makeatletter
\g@addto@macro\bfseries{\boldmath}
\makeatother

(或者只需将中间一行添加到 .sty/.cls 文件中,其中不需要 at 符号转义。)这只是修改该\bfseries宏以包含\boldmath。您还需要确保您的字体系列包含粗体数学符号,当然:并非所有字体系列都包含粗体数学符号。

我不太清楚为什么默认情况下不这样做……这似乎是一种明显可取的行为。功劳归功:我认为这是几年前 Donald Arseneau 在 上提供给我的comp.text.tex

(PS:在发现这个“技巧”之前,我编写了一个 hackymaybemath包,这是一种不太优雅的方式来做这种事情,但也允许根据上下文将数学调整为无衬线/罗马字体和斜体/直立样式。后者可能看起来有点奇怪,因为数学模式默认已经是斜体,但当数学模式仅用于访问下标/上标时很有用,特别是在肝粒子包(参见testhepparticles.pdf示例。如果能有更优雅的方法来实现这一点将不胜感激!)

答案3

好吧,可以自动完成此操作,但这里有一个更简单的“半自动”解决方案。请注意,\section有两个参数:强制参数设置章节标题,可选参数(如果存在)设置目录条目。这里我们使用\boldmath强制参数,但不使用可选参数。还请注意,粗体数学不是直立的,如您所愿:

\documentclass{article}
\begin{document}
\pagestyle{empty}
\tableofcontents
\section[First: $a=b$]{First: \boldmath{$a=b$}} 
\end{document}

在此处输入图片描述

实际上,\boldmath在 TOC 中看起来也不错:

\documentclass{article}
\begin{document}
\pagestyle{empty}
\tableofcontents
\section{First: \boldmath{$a=b$}} 
\end{document}

在此处输入图片描述

我个人更喜欢第二种解决方案:这里数学与章节标题和目录中的文本融合在一起。

答案4

扩大@andybuckley 的回答,评论中讨论的问题amsthm(由于缺乏声誉,我无法自己评论)可以通过以下代码修复:

\makeatletter
\g@addto@macro\bfseries{\boldmath}
\def\thmhead@plain#1#2#3{%
  \thmname{#1}\thmnumber{\@ifnotempty{#1}{ }\@upn{#2}}%
  \thmnote{ {\the\thm@notefont\unboldmath(#3)}}}
\let\thmhead\thmhead@plain
\makeatother

问题出现的原因amsthm大致如下:

\begin{theorem}[extra note $a$]
is compiled to
{\bfseries Theorem 1 {\fontseries\mddefault\upshape extra note $a$}.}

这就是为什么如果不进行修复则extra note显示为正常而以粗体显示的原因。$a$

相关内容