使用 \@addpunct 在节标题末尾添加条件点

使用 \@addpunct 在节标题末尾添加条件点

我正在尝试自动在章节标题中添加一个点。请看以下示例:

\documentclass{report}
\usepackage{amsgen}

\makeatletter
\newcommand{\sectiontitleformat}[1]{%
  #1\@addpunct{.}}
\makeatother

\let\sectionx\section
\renewcommand{\section}[1]{\sectionx{\sectiontitleformat{#1}}}

\let\paragraphx\paragraph
\renewcommand{\paragraph}[1]{\paragraphx{\sectiontitleformat{#1}}}

\begin{document}
\section{A}
\end{document}

这会导致以下错误:

! Improper \spacefactor.
\@addpunct #1->\ifnum \spacefactor 
                                   >\@m \else #1\fi 
l.16 \section{A}
                
? 
! Emergency stop.

当将示例更改为使用\paragraph{A}而不是时\section{A},它似乎运行良好。

我也尝试使用它来定义部分,但是将参数设置为正值\@startsection时问题仍然出现。afterskip

编辑:将显示的示例改为错误的示例。

答案1

如果我追踪它,我会发现它#1被替换为

\@hangfrom {\hskip \z@ \relax \@svsec }\interlinepenalty \@M A\@@par

因此\@addpunct命令来得太晚了\@@par(这是标准\par)。

我的建议是用于titlesec这项工作。

\documentclass{report}
\usepackage{amsgen}
\usepackage{titlesec}

%\titleformat{\chapter}[display]
%  {\normalfont\huge\bfseries}{\chaptertitlename\ \thechapter}{20pt}{\Huge}
\titleformat{\section}
  {\normalfont\Large\bfseries}{\thesection}{1em}{\sectiontitleformat}
%\titleformat{\subsection}
%  {\normalfont\large\bfseries}{\thesubsection}{1em}{}
%\titleformat{\subsubsection}
%  {\normalfont\normalsize\bfseries}{\thesubsubsection}{1em}{}
\titleformat{\paragraph}[runin]
  {\normalfont\normalsize\bfseries}{\theparagraph}{1em}{\sectiontitleformat}
%\titleformat{\subparagraph}[runin]
%  {\normalfont\normalsize\bfseries}{\thesubparagraph}{1em}{}

\makeatletter
\newcommand{\sectiontitleformat}[1]{#1\@addpunct{.}}
\makeatother

\begin{document}

\section{Text}

\section{Text!}

\paragraph{Text}

\paragraph{Text!}

\end{document}

这些\titleformat行取自titlesec(第 24 页)的文档

在此处输入图片描述

相关内容