我正在尝试自动在章节标题中添加一个点。请看以下示例:
\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 页)的文档