titlesec 如何隐式调用 sectionbreak?

titlesec 如何隐式调用 sectionbreak?

包是如何titlesec工作的?我从来没有\sectionbreak在代码中明确调用过,但它似乎\sectionbreak在中间被调用\section

\documentclass[fleqn]{report}
\usepackage{titlesec}
\newcommand{\sectionbreak}{\clearpage \setcounter{equation}{0}}

\begin{document}
\section{One}
\begin{equation} 2+2=3.99      \end{equation}
\begin{equation} \pi^2=9.86    \end{equation}

\section{Two}
\begin{equation} E=mc^2        \end{equation}
\begin{equation} v=\frac{e}{t} \end{equation}

\subsection{Two \& One}
\begin{equation} 2+2=22 \end{equation}
\end{document}

答案1

根据第 8 页标题安全manual,\sectionbreak在每个 section 命令之后应用。如果您仔细查看包代码,在 中titlesec.sty,您会发现两个实例:

\@ifundefined{#6break}%
  {\addpenalty{\@secpenalty}}%
  {\csname#6break\endcsname}%

这里,#6是分段命令的名称,因此是section、、或之一。在特殊情况下,当subsection上面的代码是时,表示:subsubsectionparagraphsubparagraph#6section

如果sectionbreak没有定义,则添加\@secpenalty惩罚,如果已定义,则添加\sectionbreak

如果您想在编译文件时看到这种情况发生,那么例如,您可以添加\typeout{Adding a section break!!!}到命令的定义\sectionbreak(见下文),然后查看日志文件 - 在终端中编译文件并查看输出。

\documentclass[fleqn]{report}
\usepackage{titlesec}
\newcommand{\sectionbreak}{\clearpage \setcounter{equation}{0}\typeout{Adding a section break!!!}}

\begin{document}
\section{One}
\begin{equation} 2+2=3.99      \end{equation}
\begin{equation} \pi^2=9.86    \end{equation}

\section{Two}
\begin{equation} E=mc^2        \end{equation}
\begin{equation} v=\frac{e}{t} \end{equation}

\subsection{Two \& One}
\begin{equation} 2+2=22 \end{equation}
\end{document}

相关内容