如何在 amsart 中僅將小節編號加粗?

如何在 amsart 中僅將小節編號加粗?

如果我使用程式碼

\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>;如果未定義該命令,則與 一起使用\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

相關內容