这个问题的动机是一位正在写数学论文的朋友向我提出的问题。他的章节标题偶尔会包含数学,其中:
- 他希望用粗体来与章节标题的其余部分相匹配;但是
- 他希望当它出现在目录中时,其权重是中等的,就像其余的章节标题一样。
他使用\mathbf
粗体显示章节标题中的数学符号;这当然也会使它们在目录中变为粗体。我给了他一个简单的解决方案,在目录的开头插入代码,这样就可以不加任何\mathbf
改动地传递其参数。当然,\mathbf
也会使其参数直立而不是斜体显示,我认为这也不太理想;而且它对例如 希腊字符,因此您必须使用类似\bm
命令的命令。(您可以在目录中使用与bm.sty
相同的技巧,但对于章节标题中的所有数学运算,必须重复使用不同的数学宏,这对我来说似乎不太优雅。)\bm
\mathbf
什么是最优雅的方式,可以自动将所有数学字符(包括非拉丁字符)以粗体形式呈现在章节标题中,但在其他地方(包括目录的条目)使用正常的中等粗体?
答案1
最简单的事情是修补\@startsection
和\@chapter
(假设book
或report
类):
\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$