如果我使用代码
\makeatletter
\renewcommand{\@secnumfont}{\bfseries}
\makeatother
从如何将节标题加粗?(包括标题和编号)它还使节数加粗。如何只为子节获取粗体数字?查看 amsart.cls,似乎没有针对子节或段落的特定命令。
答案1
您\@seccntformat
可以根据所使用的计数器类型来格式化部分计数器显示以满足您的需要。
下面我添加了一个条件,用于检查您是否正在设置subsection
计数器。如果是,请使用\bfseries
。当然,也可以通过添加更多条件来扩展它以更改其他分段计数器设置:
\documentclass{amsart}
\makeatletter
\def\@seccntformat#1{%
\protect\textup{\protect\@secnumfont
\ifnum\pdfstrcmp{subsection}{#1}=0 \bfseries\fi% subsection # in \bfseries
\csname the#1\endcsname
\protect\@secnumpunct
}%
}
\makeatother
\begin{document}
\section{A section}
\subsection{A subsection}
\subsubsection{A subsection}
\end{document}
由于 ,这需要 e-TeX \pdfstrcmp
。
答案2
沃纳 (Werner) 的利用想法\@seccntformat
很好,但还有更巧妙的方法:添加形式为 的命令\format<level>
;如果该命令未定义,则使用 with\csname...\endcsname
将使其等同于\relax
。
\documentclass{amsart}
\makeatletter
\def\@seccntformat#1{%
\protect\textup{%
\protect\@secnumfont
\expandafter\protect\csname format#1\endcsname % <--- added
\csname the#1\endcsname
\protect\@secnumpunct
}%
}
% define what you want for the various levels
\newcommand{\formatsubsection}{\bfseries}
%\newcommand{\formatsubsubsection}{\Huge} %%%% try for experimenting
\makeatother
\begin{document}
\section{A section}
\subsection{A subsection}
\subsubsection{A subsection}
\end{document}
尝试,只是通过实验,取消注释该\formatsubsubsection
行。
答案3
Amsart 有一个奇怪的行为:如果小节标题为空,则其数字为粗体。这是通过\sect
定义中的以下几行实现的:
\@ifempty{#8}{%
\ifnum #2=\tw@ \def\@secnumfont{\bfseries}\fi}{}%
这#2
是章节级别 (1 代表章节,2 代表小节,3 代表小小节,等等)。
因此,您需要检查标题(#8
)是否为空,并且小节编号将始终以粗体显示。
这可以解决问题(我只是采用了 amsart 代码并删除了\@ifempty
检查):
\makeatletter
\def\@sect#1#2#3#4#5#6[#7]#8{%
\edef\@toclevel{\ifnum#2=\@m 0\else\number#2\fi}%
\ifnum #2>\c@secnumdepth \let\@secnumber\@empty
\else \@xp\let\@xp\@secnumber\csname the#1\endcsname\fi
\@tempskipa #5\relax
\ifnum #2>\c@secnumdepth
\let\@svsec\@empty
\else
\refstepcounter{#1}%
\edef\@secnumpunct{%
\ifdim\@tempskipa>\z@ % not a run-in section heading
\@ifnotempty{#8}{.\@nx\enspace}%
\else
\@ifempty{#8}{.}{.\@nx\enspace}%
\fi
}%
\ifnum #2=\tw@ \def\@secnumfont{\bfseries}\fi
\protected@edef\@svsec{%
\ifnum#2<\@m
\@ifundefined{#1name}{}{%
\ignorespaces\csname #1name\endcsname\space
}%
\fi
\@seccntformat{#1}%
}%
\fi
\ifdim \@tempskipa>\z@ % then this is not a run-in section heading
\begingroup #6\relax
\@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty\@M #8\par}%
\endgroup
\ifnum#2>\@m \else \@tocwrite{#1}{#8}\fi
\else
\def\@svsechd{#6\hskip #3\@svsec
\@ifnotempty{#8}{\ignorespaces#8\unskip
\@addpunct.}%
\ifnum#2>\@m \else \@tocwrite{#1}{#8}\fi
}%
\fi
\global\@nobreaktrue
\@xsect{#5}}
\makeatother